中年|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 basicPassesdouble sceneSize // e.g. the diagonal of the bounding box vtkNew ssaossao-&gtSetRadius(0.1* sceneSize) // comparison radiusssao-&gtSetBias(0.001* sceneSize) // comparison biasssao-&gtSetKernelSize(128) // number of samples usedssao-&gtBlurOff() // do not blur occlusionssao-&gtSetDelegatePass(basicPasses) glRenderer-&gtSetPass(ssao)
【来源:开源科学计算】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn
【中年|VTK9.0中的屏幕空间环境光遮蔽】


    推荐阅读