开启超帧外插模式后运动物体边缘出现严重拖影现象，可能的原因是什么
================================

由于外插模式需要标记模板缓冲（Stencil Buffer）的第8位用于区分静态物体和动态物体，即静态物体模板值第8位标记成0，动态物体模板值第8位标记成1，模板缓冲的低7位模板值开发者可自行设置。如果标记错误或漏标记，可能会在动态物体边缘产生严重的拖影现象。

**现象描述**

Demo中运动角色出现头身分离等严重拖影现象，角色头部向右偏。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/70/v3/a55-ja1DQkKgGU3H82qOXA/zh-cn_image_0000002664328679.png?HW-CC-KV=V1&HW-CC-Date=20260709T132552Z&HW-CC-Expire=86400&HW-CC-Sign=F3F8C971C138535FE2037748693AF83702193F98D58BB440FE48391D6348482C)

**原因分析**

通过抓帧查看模板缓冲中的模板值，发现头发区域模板值为0，身体区域模板值为0x80。由于角色头、身均属于运动目标区域，应该将所有运动物体区域的模板值第8位标记为1。错误的头部区域模板值导致超帧效果出现头身分离的严重拖影现象。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9b/v3/c0A5qfwZSYa1M3SN2aBExQ/zh-cn_image_0000002633849568.png?HW-CC-KV=V1&HW-CC-Date=20260709T132552Z&HW-CC-Expire=86400&HW-CC-Sign=FDC4DF1DC8CF91152791F8052355BC23E58305F95D002F40F1A71B20FEAD607E)

**处理步骤**

基于分析结论，造成头身分离拖影现象的主要原因是运动区域模板值未统一标记为1xxx xxxx。因此将运动角色头发和面部区域的模板值统一改为0x80，保持和身体模板值一致，头身分离的拖影现象消失，效果如下图所示。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/13/v3/7FD_J98sTt2XcsNyuvscDQ/zh-cn_image_0000002634009472.png?HW-CC-KV=V1&HW-CC-Date=20260709T132552Z&HW-CC-Expire=86400&HW-CC-Sign=8001DB0F3C5CF50FC712FD78EC5312FBFE9522E832AB65BD9809B6E6112A1060)

**代码示例**

检查动态物体材质Shader中的模板值是否设置正确，即静态物体模板值标记为0xxx xxxx，动态物体模板值标记为1xxx xxxx。

Shader "Standard\_with\_stencil"
{
    Properties
    {
        /\* ... \*/
        \_LightingStencilRef("Lighting Stencil Reference", Float) = 128 // 将动态物体材质模板值改为1xxx xxxx，消除头身分离现象
        \[Enum(UnityEngine.Rendering.CompareFunction)\] \_LightingStencilComp("Lighting Stencil Comparison", Float) = 8
        \_StencilReadMask("Stencil Read Mask", Float) = 255
        \_StencilWriteMask("Stencil Write Mask", Float) = 255
    }
    SubShader
    {
        /\* ... \*/
        Pass
        {
            /\* ... \*/
            Stencil
            {
                Ref\[\_LightingStencilRef\]
                Comp\[\_LightingStencilComp\]
                ReadMask\[\_StencilReadMask\]
                WriteMask\[\_StencilWriteMask\]
                Pass Replace
            }
        }
    }
}

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/28/v3/L2k9wygZQmWdq63hEBVfhw/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132552Z&HW-CC-Expire=86400&HW-CC-Sign=7B50B37A873B08402F5A8794D88873531353E6F43413E06ED4398AF4BD26E576)

不同管线的Shader中需要配置模板值的Pass不同，如下：

*   团结引擎URP管线
    
    在每个有DepthOnly或DepthNormals的Pass中，即出现Tags {"LightMode" = "DepthOnly" }或Tags {"LightMode" = "DepthNormals" }的Pass，配置模板值。
    
*   团结引擎Build-in管线
    
    在每个有ForwardBase或ForwardAdd的Pass中，即出现Tags {"LightMode" = "ForwardBase" }或Tags {"LightMode" = "ForwardAdd" }的Pass，配置模板值。