VTK9.0中的屏幕空間環境光遮蔽

Michael Migliore on July 28, 2020

Tags: vtk ssao opengl rendering

現在如果要在VTK中渲染幾何圖形,我們已經可以通過新引入的PBR陰影得到極佳的結果了。只需要適當地配置燈光,HDRI和材料屬性就可以達到目的。然而,一些對於一些具有複雜表面的CAD模型,顯然是缺少一些東西,渲染的圖像看起來非常的不真實,如圖1所示。

VTK9.0中的屏幕空間環境光遮蔽

圖1 - VTK渲染一個複雜的幾何使用PBR陰影

算法

我們的深度感知是對環境光遮蔽高度敏感的。洞、摺痕、凹面被周圍的幾何體遮擋,在計算光照時必須考慮到這一點。在VTK 9.0中,我們添加了一個新的渲染通道叫做Screen-Space Ambient Occlusion (屏蔽空間環境光遮蔽SSAO)。這種技術,在2007年由Crytek引入,是一個有效的替代光線追蹤近似環境光遮蔽的方法。雖然只是一個近似,但它能實時產生非常不錯的結果。圖2顯示了在RTX 2060 GPU上以150 fps渲染的複雜幾何圖形的狀態(大約3百萬個網格)。

VTK9.0中的屏幕空間環境光遮蔽

圖2 -啓用SSAO時的相同幾何圖形

為了計算環境光遮蔽,渲染通道修改了PolyDataMapper以在新的GPU 紋理中保存像素位置和法線信息。這些紋理是被SSAO算法處理,以產生一個新的遮擋紋理,並可以結合到顏色緩衝區中。該算法效果如圖3所示。

VTK9.0中的屏幕空間環境光遮蔽

圖3 - SSAO算法概述

使用

為了在VTK中啓用SSAO,需要創建一個自定義的渲染通道pipeline。有幾個參數可以用來對這個渲染通道進行配置:

  • 半徑:計算遮擋時考慮的鄰近像素
  • 偏差:比較像素深度時使用的容忍因子
  • 內核大小:使用的採樣數量(可以控制渲染質量)
  • 模糊:控制遮擋緩衝區是否應該在與顏色緩衝區結合之前被模糊

下面是一個簡單的該類型渲染通道pipeline示例。

vtkNew basicPasses;
double sceneSize; // e.g. the diagonal of the bounding box 
vtkNew ssao;
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]

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 1256 字。

轉載請註明: VTK9.0中的屏幕空間環境光遮蔽 - 楠木軒