Перечисление 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.
Требования
См. также раздел