DXR:如何在最近的命中着色器中识别底层 AS 的几何实例



我在单个 DXR 底层加速结构 (BLAS( 内有多个几何形状 (D3D12_RAYTRACING_GEOMETRY_DESC(。如何确定其中哪些是在最接近的命中着色器中命中? 以下 HLSL 内部函数执行不同的操作:

  • PrimitiveIndex(( 返回当前几何图形的三角形索引,但它会针对 BLAS 中的每个新几何图形重新启动,所以我不知道命中了哪个。
  • InstanceIndex(( 返回顶层的索引,但不返回底层的索引
  • 同样,InstanceID(( 仅针对顶级定义

D3D12_RAYTRACING_TIER_1_1开始,有一个新的内在函数称为uint GeometryIndex()规范。

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

由于命中

组需要有关被命中几何体的信息 – 其顶点数据和材料属性 – 您通常需要本地 它们的根表。避免通过本地根目录传递数据 表中,您也可以使用顶级中的实例 ID 字段 实例描述符并利用实例索引,它们是 在命中组着色器中隐式可用。但请记住, 当 底层结构包含多个几何图形。要有 每个几何图形的唯一数据,必须使用本地根表。

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

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

另请参阅 RaytracingMiniEngineSample。

最新更新