Version: 6000.3
语言: 中文
URP 中的运动矢量渲染通道
URP中着色器中的运动向量示例

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

对于 URP 渲染 MotionVectors 通道ShaderLabUnity 用于定义 Shader 对象结构的语言。更多信息
请参阅术语表
着色器在 GPU 上运行的程序。更多信息
请参阅术语表
,请确保其活动 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 动画,是指MotionVectors传入 URP 预构建的 ShaderLab 着色器,例如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 标签。从 Unity 2023.2 开始,由于以下原因,此回退逻辑被禁用:

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