RAY_FLAG 枚举

传递给 TraceRay 函数以替代透明度、剔除和提前退出行为的标志。

语法

enum RAY_FLAG : uint
{
    RAY_FLAG_NONE                            = 0x00,
    RAY_FLAG_FORCE_OPAQUE                    = 0x01,
    RAY_FLAG_FORCE_NON_OPAQUE                = 0x02,
    RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x04,
    RAY_FLAG_SKIP_CLOSEST_HIT_SHADER         = 0x08,
    RAY_FLAG_CULL_BACK_FACING_TRIANGLES      = 0x10,
    RAY_FLAG_CULL_FRONT_FACING_TRIANGLES     = 0x20,
    RAY_FLAG_CULL_OPAQUE                     = 0x40,
    RAY_FLAG_CULL_NON_OPAQUE                 = 0x80,
    RAY_FLAG_SKIP_TRIANGLES                  = 0x100,
    RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES      = 0x200,
}; 

常量

RAY_FLAG_NONE

未选择任何选项。

RAY_FLAG_FORCE_OPAQUE

光线跟踪中遇到的所有光线基元交集都被视为不透明。 因此,无论命中几何图形是否指定D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE,也不管命中实例上的实例标志如何,都不会执行任何命中着色器。

此标志与 RAY_FLAG_FORCE_NON_OPAQUE、RAY_FLAG_CULL_OPAQUE 和 RAY_FLAG_CULL_NON_OPAQUE 互斥。

RAY_FLAG_FORCE_NON_OPAQUE

光线跟踪中遇到的所有光线基元交集都被视为非不透明。 因此,无论命中几何图形是否指定D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE,以及命中实例上的实例标志,都将执行任何命中着色器(如果存在)。 此标志与 RAY_FLAG_FORCE_\OPAQUE、RAY_FLAG_CULL_OPAQUE 和 RAY_FLAG_CULL_NON_OPAQUE 互斥。

RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH

光线跟踪中遇到的第一个光线基元交集会自动导致在任何命中着色器之后立即调用 AcceptHitAndEndSearch ,包括没有任何命中着色器。

唯一的例外是前面的任何命中着色器调用 IgnoreHit 时,在这种情况下,光线继续不受影响,使下一次命中成为第一次命中的另一个候选项。 若要应用此异常,必须实际执行任何命中着色器。 因此,如果跳过任何命中着色器,因为命中被视为不透明 (例如由于RAY_FLAG_FORCE_OPAQUE或D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE或D3D12_RAYTRACING_INSTANCE_FLAG_OPAQUE设置) ,则调用 AcceptHitAndEndSearch

如果第一次命中时存在最近的命中着色器,则除非也存在RAY_FLAG_SKIP_CLOSEST_HIT_SHADER,否则将调用该着色器。 发现的一个命中被认为是“最近的”,即使可能尚未访问其他可能更接近光线的潜在命中。

此标志的典型用途是阴影,其中只需要找到一个命中。

RAY_FLAG_SKIP_CLOSEST_HIT_SHADER

即使已提交至少一个命中,并且最近命中的命中组包含最近的命中着色器,请跳过该着色器的执行。

RAY_FLAG_CULL_BACK_FACING_TRIANGLES

启用对朝后三角形的剔除。 请参阅 D3D12_RAYTRACING_INSTANCE_FLAGS ,了解如何选择哪些三角形面向每个实例。

在指定D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE的实例上,此标志不起作用。

在除 D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES 以外的几何图形类型上,此标志不起作用。

此标志与 RAY_FLAG_CULL_FRONT_FACING_TRIANGLES 互斥。

RAY_FLAG_CULL_FRONT_FACING_TRIANGLES

启用对正面三角形的剔除。 请参阅 D3D12_RAYTRACING_INSTANCE_FLAGS ,了解如何选择哪些三角形面向每个实例。

在指定D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE的实例上,此标志不起作用。

在除 D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES 以外的几何图形类型上,此标志不起作用。

此标志与 RAY_FLAG_CULL_BACK_FACING_TRIANGLES 互斥。

RAY_FLAG_CULL_OPAQUE

根据几何图形和实例标志剔除所有被视为不透明的基元。

此标志与 RAY_FLAG_FORCE_OPAQUE、RAY_FLAG_FORCE_NON_OPAQUE 和 RAY_FLAG_CULL_NON_OPAQUE 互斥。

RAY_FLAG_CULL_NON_OPAQUE

根据几何图形和实例标志剔除所有被视为非不透明的基元。

此标志与 RAY_FLAG_FORCE_OPAQUE、RAY_FLAG_FORCE_NON_OPAQUE 和 RAY_FLAG_CULL_OPAQUE 互斥。

要求

另请参阅

Direct3D 12 光线跟踪 HLSL 参考