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も存在しない限り呼び出されます。 検出されたヒットは、レイに近い可能性のある他のヒットが訪問されていない可能性がある場合でも、"最も近い" と見なされます。

このフラグの一般的な用途は、1 つのヒットしか見つからないシャドウ用です。

RAY_FLAG_SKIP_CLOSEST_HIT_SHADER

少なくとも 1 つのヒットがコミットされ、最も近いヒットのヒット グループに最も近いヒット シェーダーが含まれている場合でも、そのシェーダーの実行をスキップします。

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 リファレンス