Version: Unity 6.0 (6000.0)
语言 : 中文
运动矢量在 URP 中渲染通道
URP 中的着色器中的运动矢量采样

在 URP 中的自定义着色器中输出运动矢量纹理

要让 URP 渲染__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary
着色器的 MotionVectors 通道,请确保其活动的子着色器包含具有以下 LightMode 标签的通道:

Tags { "LightMode" = "MotionVectors" }

例如:

Shader “Example/MyCustomShaderWithPerObjectMotionVectors"
{
    SubShader
    {
        // ...other passes, SubShader tags and commands
    
        Pass
        {
            Tags { "LightMode" = "MotionVectors" }
            ColorMask RG
            
            HLSLPROGRAM
            
            // Your shader code goes here.
            
            ENDHLSL
        }
    }
}

有关为 Alpha 裁剪、LOD 交叉淡入淡出或 Alembic 动画等功能添加运动矢量通道支持的示例,请参阅 URP 预构建的 ShaderLab 着色器(例如 Unlit.shader 文件)中的 MotionVectors 通道实现。MotionVectors 通道的渲染应该与非运动矢量通道匹配,并且应该反映通道执行的任何自定义变形和/或顶点动画。

如果自定义着色器仅适用于具有变换运动或蒙皮动画的对象,而不使用 Alpha 裁剪、LOD 交叉淡入淡出、Alembic 动画、自定义变形或顶点动画,URP 提供的运动矢量回退着色器可能就足够了。要添加预构建的回退着色器,请将以下 ShaderLab 命令添加到子着色器代码块中:

Shader “Example/MyCustomShaderWithPerObjectMotionVectorFallback"
{
    SubShader
    {
        // ...other passes, SubShader tags, and commands
    
        UsePass "Hidden/Universal Render Pipeline/ObjectMotionVectorFallback/MOTIONVECTORS"
    }
}

注意:在早于 2023.2 的 Unity 版本中,URP 会自动对不带 MotionVectors LightMode 标签的通道的所有子着色器块使用回退通道。从 Unity 2023.2 开始,由于以下原因禁用此回退逻辑:

  • 回退逻辑只是用于 URP 自身材质的初始实现细节。
  • URP 材质现在使用特定于材质类型的运动矢量通道来支持 Alpha 剪辑、LOD 交叉淡入淡出或 Alembic 动画等功能,从而使回退过时。
  • 回退逻辑对不适用的内容(例如,不应绘制任何对象运动矢量的贴花)造成了意外的视觉瑕疵。
运动矢量在 URP 中渲染通道
URP 中的着色器中的运动矢量采样