版本:Unity 6 (6000.0)
语言英语
  • C#

RayTracingShader.SetShaderPass

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void SetShaderPass(string passName);

参数

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 } }