Объявление
public void SetShaderPass(string passName);Параметры
passName | Shader Pass для использования при выполнении шейдеров трассировки лучей. |
Описание
Выбирает, какой проход шейдера использовать при выполнении шейдеров пересечения лучей/геометрии.
Это имя указывается в шейдерах ShaderLab, используемых материалами, применяемыми к средствам визуализации, используемым в трассировке лучей. Если у шейдера нет Shader Pass с указанным именем, код пересечения луча/геометрии не выполняется. Этот метод необходимо вызывать перед вызовом RayTracingShader.DispatchRays.
Код Shader Pass может включать в себя необязательные шейдеры Nearshit или AnyHit.
Для процедурной геометрии с трассировкой лучей необходимо создать шейдер пересечения. Код движка автоматически активирует ключевую работу с именем RAY_TRACING_PROCEDURAL_GEOMETRY
, если для геометрии используется процедурная трассировка лучей.
SubShader
{
Pass
{
// SetShaderPass 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
}
}