手动管理堆栈(如果适用)。使用API的查询函数来确定每个着色器所需的堆栈大小,并应用关于调用图的应用程序端知识来减少内存消耗和提高性能。一个很好的例子是在trace depth 1上使用昂贵的反射着色器来拍摄阴影光线(trace depth 2),应用程序知道这些阴影光线只会命中堆栈要求较低的小命中着色器。驱动程序无法预先知道此调用图,因此默认的保守堆栈大小计算将过度分配内存。
重用临时资源。例如,为BVH构建重用scratch内存资源以用于其他目的(可能是非光线跟踪)。在DXR上,使用放置的资源和第2层资源堆。
5.0 – Profiling and Debugging请注意以下工具,其中包括对DirectX光线跟踪和NVIDIA的VKRay的支持。它们发展很快,所以请确保使用最新版本。
NVIDIA Nsight图形。为光线跟踪开发人员提供了优秀的调试和分析工具(着色器表和资源检查器、加速结构查看器、范围分析、扭曲占用和GPU度量、通过NVIEW后的崩溃调试、C++帧捕获)。
NVIDIA Nsight系统。提供系统范围的分析功能和口吃分析功能。
微软PIX
FAQQ、 基本体的数量和加速结构构建/更新的成本(时间)之间的关系是什么?
A、 基本上是线性关系。好吧,它开始变得线性超过某个原始计数,在此之前,它被常数开销所限制。这里的确切数字在不断变化,不可靠。
Q、 假设最大占用率,加速结构构建/更新的GPU吞吐量SOL是多少?
A、 一个数量级准则是:对于完整构建,O(1亿)原语/秒;对于更新,O(10亿)原语/秒。
Q、 RT-PSOs的唯一着色器数量与编译成本(时间)之间的关系是什么?
A、 它大致是线性的。
Q、 现在游戏中RT-PSO编译的典型成本是多少?
A、 任何地方,20 ms→300 ms,每条管道。
Q、 有没有关于应该使用多少alpha/透明度的指导?任何命中和最近命中的代价是什么?
A、 任何打击都是昂贵的,应该使用最少。最好将几何体(或实例)标记为不透明,这将允许在固定功能硬件中进行光线遍历。当需要AH时(如评估透明度等),尽可能简单。不要仅仅为了执行alpha-tex查找和if语句而计算巨大的着色网络。
Q、 开发人员应该如何管理阴影差异?