笼中窥梦复刻

github仓库:EanoJiang/Unity-MoncageCopy: 笼中窥梦Shader复刻

博客:笼中窥梦复刻 - EanoJiang - 博客园

效果:演示

模板测试

Buffer(缓存)

1748934986235

当看到当前帧的时候,下一帧的画面会渲染到buffer中

1748934893456

1748934873032

Stencil Buffer模板缓存

1748935032057

为什么不用ShaderGraph?

因为这里需要改渲染管线,只能用Shader

需要的模型:

1748938983752

加上两片Quad

1748939144352

Shader

  1. 新建一个Unlit Shader

代码如下:

Shader "Unlit/StencilShader"
{
    Properties
    {
        //参考值
        [IntRange]_index("stencil index",Range(0,255)) = 0
    }
    SubShader
    {
        Tags
        {
            //不透明材质
            "RenderType" = "Opaque"
            //渲染队列:几何物体
            "Queue" = "Geometry"
            //渲染管线:URP
            "RenderPipeLine" = "UniversalPipeline"
        }


        Pass
        {
            //混合模式:来源和目标的透明度Alpha直接混合
            Blend Zero One
            //关闭深度写入
            ZWrite Off

            //开启模板测试
            Stencil
            {
                //参考值 index
                Ref [_index]
                //参考值和当前值比较,永远通过
                Comp Always
                //通过后,用参考值替换模板值
                Pass Replace
                //失败后,当前值不变
                Fail Keep
            }
            
        }
    }
}

  1. 新建2个材质Material:st1、st2,勾选Unlit Shader

1748939105254

1748939111998

然后分别添加到Quad1和2

  1. 为两个物体分别建Layer

1748941853886

1748941870829

  1. URP里的Filtering,反勾选这两个Layer

1748941919158

新建Render Objects

1748942205788

效果如下:

演示

posted @ 2025-06-03 17:56  EanoJiang  阅读(62)  评论(0)    收藏  举报