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<vtkRenderStepsPass> basicPasses;double sceneSize; // e.g. the diagonal of the bounding box vtkNew<vtkSSAOPass> ssao;ssao->SetRadius(0.1 * sceneSize); // comparison radiusssao->SetBias(0.001 * sceneSize); // comparison biasssao->SetKernelSize(128); // number of samples usedssao->BlurOff(); // do not blur occlusionssao->SetDelegatePass(basicPasses); glRenderer->SetPass(ssao);
往期文章
VTK: 用于气候科学研究
Linux下无法挂载exfat格式的分区
在Linux上如何校验ISO镜像文件
Linux下使用redshift来启用护眼模式
Linux下制作系统的U盘启动盘
Neofetch – 通过终端显示Linux系统信息
Linux下常用的图形应用下载工具
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!