GigaVoxels高效3D體素實(shí)時(shí)渲染庫
GigaVoxels是一個(gè)開放的庫,用于基于GPU的實(shí)時(shí)質(zhì)量渲染非常詳細(xì)和寬泛的對(duì)象和場(chǎng)景(編碼為SVO - 稀疏體素八叉樹 - 但不一定模糊或透明:參見歷史)。它可以很容易地與普通的OpenGL對(duì)象和場(chǎng)景混合。
它的秘密在于惰性求值:數(shù)據(jù)塊(即,塊)僅在被證明對(duì)于圖像是必要的并且僅在必要的分辨率下被加載或生成。然后,它們被保存在GPU上的LRU高速緩存中用于下一幀。因此,隱藏?cái)?shù)據(jù)對(duì)管理,存儲(chǔ)和渲染沒有任何影響。類似地,如果高細(xì)節(jié)小于像素大小,則高細(xì)節(jié)對(duì)成本和混疊沒有影響。
GigaVoxels允許輕松地做簡(jiǎn)單的事情,也允許引擎的漸進(jìn)暴露取決于您需要的定制。它提供了大量的例子來說明可能性和變體,并通過復(fù)制粘貼來簡(jiǎn)化您的測(cè)試和原型。
在最基本的用法,你已經(jīng)很高興與其中一個(gè)例子(對(duì)你有好處:沒有代碼!)
最基本的編程用法包括編寫GigaVoxels渲染器將在最后一刻調(diào)用的回調(diào)生成器函數(shù),以獲取給定分辨率的給定空間立方體的數(shù)據(jù)。此功能可以有一部分在CPU側(cè)和一部分在GPU側(cè)。你可能只想將數(shù)據(jù)從CPU傳輸?shù)紾PU,或者可能在GPU一側(cè)解壓縮或放大。您還可以從程序上生成它(例如,體積Perlin噪聲),或者從已經(jīng)存在于GPU存儲(chǔ)器(例如,VBO網(wǎng)格)中的另一形狀結(jié)構(gòu)轉(zhuǎn)換所請(qǐng)求的數(shù)據(jù)塊[1]。
您可能還需要添加一個(gè)用戶定義的體素著色器來調(diào)整外觀(view-dep BRDF,但也可能是材質(zhì)顏色,而不是存儲(chǔ)在體素中),甚至可以即時(shí)調(diào)整數(shù)據(jù)。事實(shí)上,這取決于您在CPU,GPU生產(chǎn)者或在體素著色器中的生成(或預(yù)先存儲(chǔ)),這取決于您在存儲(chǔ),性能和即時(shí)需求之間的首選平衡更改。例如,如果要讓用戶使用顏色LUT或密度傳遞函數(shù),或調(diào)整超文本紋理參數(shù),則應(yīng)在體素著色器中進(jìn)行以獲得即時(shí)反饋 - 否則所有已生成的圖塊都應(yīng)取消。但是一旦這些參數(shù)是固定的,如果數(shù)據(jù)在生產(chǎn)者中被全部烹飪并且在高速緩存中保持準(zhǔn)備使用,則渲染將更快。
您可能想要處理非RGB值(多光譜,X射線...),或不是一個(gè)簡(jiǎn)單的方法(極化,HDR)。 GigaVoxels讓您輕松定義體素?cái)?shù)據(jù)的類型。您還可以自定義前置和后置渲染任務(wù)(例如,與OpenGL場(chǎng)景混合),各種早期測(cè)試,提示和優(yōu)先行為的標(biāo)志(例如,在嚴(yán)格的時(shí)間預(yù)算應(yīng)用程序中的創(chuàng)建優(yōu)先級(jí)策略)。
基本的GigaVoxels依賴于空間的八叉樹動(dòng)態(tài)分區(qū),其中節(jié)點(diǎn)對(duì)應(yīng)于體素塊 - 如果空間不為空。但實(shí)際上,您可以偏好另一個(gè)空間分區(qū)方案,例如N ^ 3-tree,k-d樹,甚至BSP-樹。您還可以選擇在本地?cái)?shù)據(jù)塊中存儲(chǔ)除了體素之外的其他東西,例如三角形,點(diǎn),過程參數(shù),簡(jiǎn)化更新或細(xì)分的內(nèi)部數(shù)據(jù),以避免從頭開始重建
GigaVoxels和GigaSpace是一樣的事情。 GigaSpace是查看工具的一般方式。 GigaVoxels的基本用途是使用八叉樹作為樹,體素塊作為數(shù)據(jù)塊,并使用體積錐跟蹤作為訪問者,因此這種命名優(yōu)先于SVO社區(qū)。但我們提供了許多其他示例顯示其他選擇,因?yàn)闈撛诘氖褂帽萐VO大得多。
