CommandBuffer.SetRayTracingShaderPass
Declaration
public void SetRayTracingShaderPass(Rendering.RayTracingShader rayTracingShader, string passName);Параметры
| Параметр | Описание |
|---|---|
| rayTracingShader | RayTracingShader для установки параметра. |
| passName | Shader Pass для использования при выполнении шейдеров с трассированием лучей. |
Описание
Добавлена команда для выбора Shader Pass, который будет использоваться при выполнении шейдеров пересечения луча/геометрии.
Это имя указано в шейдерах ShaderLab, используемых Материалами, применяемыми к рендерам, используемым в трассировании лучей. Если у шейдера нет Shader Pass с указанным именем, то код пересечения лучей/геометрии не выполняется. Этот метод должен быть вызван перед вызовом CommandBuffer.DispatchRays.
Код Shader Pass может включать опциональные шейдеры ближайшего попадания или любые попадания.
Для процедурных геометрий с трассированием лучей, должен быть создан шейдер пересечения. Код движка автоматически включит ключевую работу с именем RAY_TRACING_PROCEDURAL_GEOMETRY, если геометрия процедурно трассирована лучами.
SubShader
{
Pass
{
// CommandBuffer.SetRayTracingShaderPass must use this name in order to execute the ray tracing shaders from this Pass.
Name "Test"
Tags{ "LightMode" = "RayTracing" }
HLSLPROGRAM
#pragma multi_compile_local RAY_TRACING_PROCEDURAL_GEOMETRY
#pragma raytracing test
struct AttributeData
{
float2 barycentrics;
};
struct RayPayload
{
float4 color;
};
#if RAY_TRACING_PROCEDURAL_GEOMETRY
[shader("intersection")]
void IntersectionMain()
{
AttributeData attr;
attr.barycentrics = float2(0, 0);
ReportHit(0, 0, attr);
}
#endif
[shader("closesthit")]
void ClosestHitMain(inout RayPayload payload : SV_RayPayload, AttributeData attribs : SV_IntersectionAttributes)
{
payload.color = float4(1, 0, 0, 1);
}
ENDHLSL
}
}