VTK9.0中的屏幕空间环境光遮蔽

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下常用的图形应用下载工具

    声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

    (0)
    上一篇 2020年8月2日
    下一篇 2020年8月2日

    相关推荐