簡體   English   中英

GPU 粒子元球表面渲染

[英]GPU particle metaball-surface rendering

我有一個關於如何渲染表面粒子的非常具體的方法的問題。 該方法在 Nvidia GPU Gems 3 第 7 章“ GPU 上的基於點的 Metaballs 可視化”中有很好的解釋, 鏈接到本章

這篇文章是關於使用均勻分布在表面上的點或碎片來渲染隱式表面。 他們說這些粒子的計算完全在 GPU 上完成。 只有定義表面的數據才會從 CPU 發送到 GPU,以保持盡可能低的流量。

他們還提供了一些片段着色器程序的偽代碼示例來計算粒子位置、速度等。對我來說,這些程序應該為每個粒子運行一次。

現在我的問題是,它們如何存儲這些粒子? 它是一種什么樣的數據結構? 它必須是某種可以在 GPU 上進行讀取和寫入操作的緩沖區或紋理。 但是如何在下一個渲染步驟中再次渲染此緩沖區/紋理?

我的第一個想法是某種頂點緩沖區對象,它在開始時發送到 GPU 並在每次渲染過程中不斷更新。 這可能嗎?

對我的一個要求是它必須使用 OpenGL/GLSL 實現,我希望這是可能的。

是的,您需要某種 VBO 並重復傳遞相同的數據。 數據結構可以是 SoA(數組結構)或 AoS(結構數組),具體取決於您喜歡如何編寫對數組不同屬性的訪問,即:

索A:

  • 位置數組
  • 速度陣列
  • 法線陣列

服務范圍:

  • 只有一個包含 [Position, Speed, Normal] 的數組。

    AoS 與用於渲染的交錯數組相同,其中僅在一個數組中保留網格的所有屬性。

您可以使用 VBO 或紋理,唯一的區別是緩存的完成方式,因為紋理針對 2D 訪問進行了優化。

渲染的步驟與您想象的完全一樣,因此您需要做的就是使用計算所需屬性的着色器“渲染”系統的物理步進,然后將相同的結構綁定到真實的圖形渲染中后續步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM