Michael Migliore on July 28, 2020
Tags: vtk ssao opengl rendering
現在如果要在VTK中渲染幾何圖形,我們已經可以透過新引入的PBR陰影得到極佳的結果了。只需要適當地配置燈光,HDRI和材料屬性就可以達到目的。然而,一些對於一些具有複雜表面的CAD模型,顯然是缺少一些東西,渲染的影象看起來非常的不真實,如圖1所示。
圖1 - VTK渲染一個複雜的幾何使用PBR陰影
我們的深度感知是對環境光遮蔽高度敏感的。洞、摺痕、凹面被周圍的幾何體遮擋,在計算光照時必須考慮到這一點。在VTK 9.0中,我們添加了一個新的渲染通道叫做Screen-Space Ambient Occlusion (遮蔽空間環境光遮蔽SSAO)。這種技術,在2007年由Crytek引入,是一個有效的替代光線追蹤近似環境光遮蔽的方法。雖然只是一個近似,但它能實時產生非常不錯的結果。圖2顯示了在RTX 2060 GPU上以150 fps渲染的複雜幾何圖形的狀態(大約3百萬個網格)。
圖2 -啟用SSAO時的相同幾何圖形
為了計算環境光遮蔽,渲染通道修改了PolyDataMapper以在新的GPU 紋理中儲存畫素位置和法線資訊。這些紋理是被SSAO演算法處理,以產生一個新的遮擋紋理,並可以結合到顏色緩衝區中。該演算法效果如圖3所示。
圖3 - SSAO演算法概述
為了在VTK中啟用SSAO,需要建立一個自定義的渲染通道pipeline。有幾個引數可以用來對這個渲染通道進行配置:
- 半徑:計算遮擋時考慮的鄰近畫素
- 偏差:比較畫素深度時使用的容忍因子
- 核心大小:使用的取樣數量(可以控制渲染質量)
- 模糊:控制遮擋緩衝區是否應該在與顏色緩衝區結合之前被模糊
下面是一個簡單的該型別渲染通道pipeline示例。
vtkNew
double sceneSize; // e.g. the diagonal of the bounding box
vtkNew
ssao->SetRadius(0.1* sceneSize); // comparison radius
ssao->SetBias(0.001* sceneSize); // comparison bias
ssao->SetKernelSize(128); // number of samples used
ssao->BlurOff(); //donot blur occlusion
ssao->SetDelegatePass(basicPasses);
glRenderer->SetPass(ssao);
【來源:開源科學計算】
宣告:轉載此文是出於傳遞更多資訊之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯絡,我們將及時更正、刪除,謝謝。 郵箱地址:[email protected]