提示和技巧:光线跟踪最佳实践 Tips and Tricks: Ray Tracing Best Practices
本文介绍了在游戏和其他实时图形应用程序中实现光线跟踪的最佳实践。我们尽可能简短地介绍这些,以帮助您快速找到关键的想法。这是基于英伟达工程师在2019年GDC上所做的陈述。
通过修剪和选择性更新,优化加速结构(BLAS/TLAS)构建/更新最多需要2ms。
去噪RT效果至关重要。我们已经用NVIDIA RTX Deniser SDK打包了同类产品中最好的Deniser)。
使用异步计算队列将加速结构(BLAS/TLAS)的构建/更新和去噪,与其他机制(G缓冲区、阴影缓冲区、物理模拟)重叠。
尽可能利用硬件加速进行遍历。
最少的光线投射应该被称为“RT开启”,并且应该提供比光栅化明显更好的图像质量。提高质量水平应能以公平的速度提高图像质量和性能。见下表:
Performance Best Practices 1.0 Acceleration Structure Management1.1 General Practices
作为管理(生成/更新)移动到异步计算队列。在图形工作负载中很好地使用异步计算队列对,并且在许多情况下几乎完全隐藏了成本。类似地,任何AS依赖项(例如蒙皮)也可以移动到异步计算并很好地隐藏。
构建顶级加速结构(TLAS),而不是更新。在大多数情况下,它更容易管理,而且改装的成本节约可能不值得牺牲TLA的质量。
确保GetRaytracingAccelerationStructurePrebuildInfo和BuildRaytracingAccelerationStructure的描述符匹配。否则,分配的缓冲区可能太小,无法容纳AS或scratch内存,可能会产生一个微妙的错误!
不要在TLA中包含skybox/skysphere。在场景中使用天空几何体只会增加光线跟踪时间。改为在Miss着色器中实现天空明暗处理。
在BLAS和TLAS构建之间实现单个屏障。一般来说,正确性不需要更多的要求。BLAS构建之间的重叠可以在硬件上自然发生,但是添加不必要的屏障可以序列化该工作的执行。
1.2 Bottom-Level Acceleration Structures (BLAS)
在AABBs上使用三角形。RTX图形处理器在加速由三角形几何创建的AS的遍历方面表现突出。
尽可能将几何体标记为不透明。如果几何体不需要执行任何命中着色器代码(例如,对于alpha测试),则始终确保将其标记为不透明,以便尽可能有效地使用HW。不透明标志是来自几何体描述符(D3D12_RAYTRACING_geometry_flag_OPAQUE/VK_geometry_OPAQUE_BIT)、实例描述符
(D3D12_RAYTRACING_instance_flag_FORCE_OPAQUE/VK_geometry_instance_FORCE_OPAQUE_BIT)还是通过光线标志(ray_flag_FORCE_OPAQUE/gl_RayFlagsOpaqueNV)并不重要。