首页 > 解决方案 > DXR:如何在最近的命中着色器中识别底层 AS 的几何实例

问题描述

我在单个 DXR 底层加速结构 (BLAS) 中有多个几何图形 (D3D12_RAYTRACING_GEOMETRY_DESC)。如何确定其中哪些是在最近的命中着色器内命中的?以下 HLSL 内在函数做一些不同的事情:

标签: hlslraytracingdirectx-12

解决方案


我也想知道这一点。不幸的是,我不能给你一个明确的答案,但在这个页面上我发现了以下声明:

由于命中组需要有关被命中几何体的信息——它的顶点数据和材料属性——你通常需要一个本地根表。为了避免通过本地根表传递数据,您还可以使用顶级实例描述符中的实例 id 字段并利用在命中组着色器中隐式可用的实例索引。但请记住,当底层结构包含多个几何图形时,这些值在实例中的所有几何图形之间共享。要为每个几何图形提供唯一数据,必须使用本地根表。

因此,如果我理解正确,您要么必须使用本地根表,要么必须将自己限制为每个底层结构只有一个几何图形。

TraceRay 中有一个 MultiplierForGeometryContributionToShaderIndex 参数,您可以将其设置为 1 以获得每个几何体的不同命中组。如果您存储每个命中组的材料列表,则每个几何体可能只需要一个命中组。

另请参阅RaytracingMiniEngineSample


推荐阅读