Win32 API 日本語リファレンス
ホームGraphics.Direct3D12 › D3D12_RAY_FLAGS

D3D12_RAY_FLAGS

列挙型フラグ
基底型i4

メンバー 12

名前10進16進説明
D3D12_RAY_FLAG_NONE00x0オプションは選択されません。
D3D12_RAY_FLAG_FORCE_OPAQUE10x1

レイトレース中に検出されたレイとプリミティブのすべての交差が不透明として扱われます。そのため、ヒットしたジオメトリが D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE を指定しているかどうか、およびヒットしたインスタンスのインスタンスフラグに関係なく、any hit シェーダーは実行されません。

このフラグは RAY_FLAG_FORCE_NON_OPAQUE、RAY_FLAG_CULL_OPAQUE、RAY_FLAG_CULL_NON_OPAQUE とは相互排他です。

D3D12_RAY_FLAG_FORCE_NON_OPAQUE20x2レイトレース中に検出されたレイとプリミティブのすべての交差が非不透明として扱われます。そのため、any hit シェーダーが存在する場合は、ヒットしたジオメトリが D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE を指定しているかどうか、およびヒットしたインスタンスのインスタンスフラグに関係なく実行されます。このフラグは RAY_FLAG_FORCE_\OPAQUE、RAY_FLAG_CULL_OPAQUE、RAY_FLAG_CULL_NON_OPAQUE とは相互排他です。
D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH40x4

レイトレース中に最初に検出されたレイとプリミティブの交差により、any hit シェーダーの直後に AcceptHitAndEndSearch が自動的に呼び出されます。これは any hit シェーダーが存在しない場合も同様です。

唯一の例外は、直前の any hit シェーダーが IgnoreHit を呼び出した場合です。この場合、レイは影響を受けずに進み続け、次のヒットが改めて最初のヒットの候補になります。この例外が適用されるには、any hit シェーダーが実際に実行される必要があります。したがって、ヒットが不透明として扱われるために any hit シェーダーがスキップされた場合 (たとえば RAY_FLAG_FORCE_OPAQUE、D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE、D3D12_RAYTRACING_INSTANCE_FLAG_OPAQUE が設定されている場合) は、AcceptHitAndEndSearch が呼び出されます。

最初のヒットに closest hit シェーダーが存在する場合、RAY_FLAG_SKIP_CLOSEST_HIT_SHADER も同時に指定されていない限り、そのシェーダーが呼び出されます。レイ上により近い可能性のある他のヒットが調べられていない場合でも、見つかったその 1 つのヒットが「最も近い (closest)」ものとみなされます。

このフラグの代表的な用途は影の処理であり、ヒットを 1 つ見つけるだけでよい場合に使用します。

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

裏向きの三角形のカリングを有効にします。インスタンスごとにどの三角形を裏向きとして扱うかの選択については、D3D12_RAYTRACING_INSTANCE_FLAGS を参照してください。

D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE を指定したインスタンスでは、このフラグは効果がありません。

D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES 以外のジオメトリ型では、このフラグは効果がありません。

このフラグは RAY_FLAG_CULL_FRONT_FACING_TRIANGLES とは相互排他です。

D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES320x20

表向きの三角形のカリングを有効にします。インスタンスごとにどの三角形を裏向きとして扱うかの選択については、D3D12_RAYTRACING_INSTANCE_FLAGS を参照してください。

D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE を指定したインスタンスでは、このフラグは効果がありません。

D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES 以外のジオメトリ型では、このフラグは効果がありません。

このフラグは RAY_FLAG_CULL_FRONT_FACING_TRIANGLES とは相互排他です。

D3D12_RAY_FLAG_CULL_OPAQUE640x40

ジオメトリフラグおよびインスタンスフラグに基づいて不透明とみなされるすべてのプリミティブをカリングします。

このフラグは RAY_FLAG_FORCE_OPAQUE、RAY_FLAG_FORCE_NON_OPAQUE、RAY_FLAG_CULL_NON_OPAQUE とは相互排他です。

D3D12_RAY_FLAG_CULL_NON_OPAQUE1280x80

ジオメトリフラグおよびインスタンスフラグに基づいて非不透明とみなされるすべてのプリミティブをカリングします。

このフラグは RAY_FLAG_FORCE_OPAQUE、RAY_FLAG_FORCE_NON_OPAQUE、RAY_FLAG_CULL_OPAQUE とは相互排他です。

D3D12_RAY_FLAG_SKIP_TRIANGLES2560x100
D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES5120x200
D3D12_RAY_FLAG_FORCE_OMM_2_STATE10240x400

公式ドキュメント

透明度、カリング、早期終了の動作を上書きするために TraceRay 関数に渡されるフラグです。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum D3D12_RAY_FLAGS : int {
    D3D12_RAY_FLAG_NONE = 0,
    D3D12_RAY_FLAG_FORCE_OPAQUE = 1,
    D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2,
    D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4,
    D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8,
    D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16,
    D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32,
    D3D12_RAY_FLAG_CULL_OPAQUE = 64,
    D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128,
    D3D12_RAY_FLAG_SKIP_TRIANGLES = 256,
    D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512,
    D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024
} D3D12_RAY_FLAGS;
[Flags]
public enum D3D12_RAY_FLAGS : int
{
    D3D12_RAY_FLAG_NONE = 0,
    D3D12_RAY_FLAG_FORCE_OPAQUE = 1,
    D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2,
    D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4,
    D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8,
    D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16,
    D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32,
    D3D12_RAY_FLAG_CULL_OPAQUE = 64,
    D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128,
    D3D12_RAY_FLAG_SKIP_TRIANGLES = 256,
    D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512,
    D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024,
}
<Flags>
Public Enum D3D12_RAY_FLAGS As Integer
    D3D12_RAY_FLAG_NONE = 0
    D3D12_RAY_FLAG_FORCE_OPAQUE = 1
    D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2
    D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4
    D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8
    D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16
    D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32
    D3D12_RAY_FLAG_CULL_OPAQUE = 64
    D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128
    D3D12_RAY_FLAG_SKIP_TRIANGLES = 256
    D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512
    D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024
End Enum
import enum

class D3D12_RAY_FLAGS(enum.IntFlag):
    D3D12_RAY_FLAG_NONE = 0
    D3D12_RAY_FLAG_FORCE_OPAQUE = 1
    D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2
    D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4
    D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8
    D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16
    D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32
    D3D12_RAY_FLAG_CULL_OPAQUE = 64
    D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128
    D3D12_RAY_FLAG_SKIP_TRIANGLES = 256
    D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512
    D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024
// D3D12_RAY_FLAGS (flags)
pub const D3D12_RAY_FLAG_NONE: i32 = 0;
pub const D3D12_RAY_FLAG_FORCE_OPAQUE: i32 = 1;
pub const D3D12_RAY_FLAG_FORCE_NON_OPAQUE: i32 = 2;
pub const D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH: i32 = 4;
pub const D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER: i32 = 8;
pub const D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES: i32 = 16;
pub const D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES: i32 = 32;
pub const D3D12_RAY_FLAG_CULL_OPAQUE: i32 = 64;
pub const D3D12_RAY_FLAG_CULL_NON_OPAQUE: i32 = 128;
pub const D3D12_RAY_FLAG_SKIP_TRIANGLES: i32 = 256;
pub const D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES: i32 = 512;
pub const D3D12_RAY_FLAG_FORCE_OMM_2_STATE: i32 = 1024;
// D3D12_RAY_FLAGS
const (
	D3D12_RAY_FLAG_NONE int32 = 0
	D3D12_RAY_FLAG_FORCE_OPAQUE int32 = 1
	D3D12_RAY_FLAG_FORCE_NON_OPAQUE int32 = 2
	D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH int32 = 4
	D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER int32 = 8
	D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES int32 = 16
	D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES int32 = 32
	D3D12_RAY_FLAG_CULL_OPAQUE int32 = 64
	D3D12_RAY_FLAG_CULL_NON_OPAQUE int32 = 128
	D3D12_RAY_FLAG_SKIP_TRIANGLES int32 = 256
	D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES int32 = 512
	D3D12_RAY_FLAG_FORCE_OMM_2_STATE int32 = 1024
)
const
  D3D12_RAY_FLAG_NONE = 0;
  D3D12_RAY_FLAG_FORCE_OPAQUE = 1;
  D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2;
  D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4;
  D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8;
  D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16;
  D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32;
  D3D12_RAY_FLAG_CULL_OPAQUE = 64;
  D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128;
  D3D12_RAY_FLAG_SKIP_TRIANGLES = 256;
  D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512;
  D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024;
// D3D12_RAY_FLAGS
pub const D3D12_RAY_FLAG_NONE: i32 = 0;
pub const D3D12_RAY_FLAG_FORCE_OPAQUE: i32 = 1;
pub const D3D12_RAY_FLAG_FORCE_NON_OPAQUE: i32 = 2;
pub const D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH: i32 = 4;
pub const D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER: i32 = 8;
pub const D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES: i32 = 16;
pub const D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES: i32 = 32;
pub const D3D12_RAY_FLAG_CULL_OPAQUE: i32 = 64;
pub const D3D12_RAY_FLAG_CULL_NON_OPAQUE: i32 = 128;
pub const D3D12_RAY_FLAG_SKIP_TRIANGLES: i32 = 256;
pub const D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES: i32 = 512;
pub const D3D12_RAY_FLAG_FORCE_OMM_2_STATE: i32 = 1024;
const
  D3D12_RAY_FLAG_NONE* = 0
  D3D12_RAY_FLAG_FORCE_OPAQUE* = 1
  D3D12_RAY_FLAG_FORCE_NON_OPAQUE* = 2
  D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH* = 4
  D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER* = 8
  D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES* = 16
  D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES* = 32
  D3D12_RAY_FLAG_CULL_OPAQUE* = 64
  D3D12_RAY_FLAG_CULL_NON_OPAQUE* = 128
  D3D12_RAY_FLAG_SKIP_TRIANGLES* = 256
  D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES* = 512
  D3D12_RAY_FLAG_FORCE_OMM_2_STATE* = 1024
enum D3D12_RAY_FLAGS : int {
    D3D12_RAY_FLAG_NONE = 0,
    D3D12_RAY_FLAG_FORCE_OPAQUE = 1,
    D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 2,
    D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 4,
    D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 8,
    D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 16,
    D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 32,
    D3D12_RAY_FLAG_CULL_OPAQUE = 64,
    D3D12_RAY_FLAG_CULL_NON_OPAQUE = 128,
    D3D12_RAY_FLAG_SKIP_TRIANGLES = 256,
    D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 512,
    D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 1024,
}
#define global D3D12_RAY_FLAG_NONE                            0x0
#define global D3D12_RAY_FLAG_FORCE_OPAQUE                    0x1
#define global D3D12_RAY_FLAG_FORCE_NON_OPAQUE                0x2
#define global D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH 0x4
#define global D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER         0x8
#define global D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES      0x10
#define global D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES     0x20
#define global D3D12_RAY_FLAG_CULL_OPAQUE                     0x40
#define global D3D12_RAY_FLAG_CULL_NON_OPAQUE                 0x80
#define global D3D12_RAY_FLAG_SKIP_TRIANGLES                  0x100
#define global D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES      0x200
#define global D3D12_RAY_FLAG_FORCE_OMM_2_STATE               0x400
; ※フラグ列挙型。ビットORで組み合わせ可(例: FOO|BAR)。