| passName | 执行光线追踪着色器时要使用的着色器通道。 |
选择执行射线/几何体相交着色器时要使用的着色器通道。
此名称在应用于光线追踪中使用的渲染器的材质所使用的 ShaderLab 着色器中指定。如果着色器没有具有指定名称的着色器通道,则不会执行任何射线/几何体相交代码。必须在调用 RayTracingShader.DispatchRays 之前调用此方法。
着色器通道代码可以包含可选的最近命中或任何命中着色器。
对于过程化光线追踪几何体,必须编写相交着色器。如果几何体是过程化光线追踪的,则引擎代码将自动启用名为 RAY_TRACING_PROCEDURAL_GEOMETRY 的关键字。
以下示例着色器代码返回红色。
SubShader
{
Pass
{
// RayTracingShader.SetShaderPass must use this name in order to execute the ray tracing shaders from this Pass.
Name "Test"
// Add tags to identify the shaders to use for ray tracing.
Tags{ "LightMode" = "RayTracing" }
HLSLPROGRAM
#pragma multi_compile_local RAY_TRACING_PROCEDURAL_GEOMETRY
// Specify this shader is a raytracing shader.
#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
}
}