版本:Unity 6 (6000.0)
语言:English
URP 中的运动向量渲染通道
在 URP 的着色器中采样运动向量

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

为了使 URP 为 ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
参见 术语表
着色器在 GPU 上运行的程序。 更多信息
参见 术语表
渲染 MotionVectors 通道,请确保其活动 SubShader 包含一个具有以下 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细节层次 (LOD) 技术是一种优化,当游戏对象与摄像机的距离增加时,它会减少 Unity 必须为其渲染的三角形数量。 更多信息
参见 术语表
交叉淡入淡出或 Alembic 动画等功能添加运动向量通道支持的示例,请参阅 URP 预制 ShaderLab 着色器中 MotionVectors 通道的实现,例如 Unlit.shader 文件。您的 MotionVectors 通道的渲染应与您的非运动向量通道匹配,并应反映任何自定义变形和/或顶点动画通道正在执行的操作。

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

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

注意:在 2023.2 之前的 Unity 版本中,URP 会自动为所有不包含带有 MotionVectors LightMode 标记 的通道的 SubShader 块使用回退通道。从 Unity 2023.2 开始,出于以下原因禁用此回退逻辑

  • 回退逻辑只是为 URP 自身的材质设计的初始实现细节。
  • URP 材质现在使用特定于材质类型的运动向量通道来支持 Alpha 剪切、LOD 交叉淡入淡出或 Alembic 动画等功能,从而使回退变得多余。
  • 回退逻辑会导致其不适用的内容出现意外的视觉伪像(例如,不应绘制任何对象运动向量的贴花)。
URP 中的运动向量渲染通道
在 URP 的着色器中采样运动向量