自学内容网 自学内容网

【Unity Shader】LineRender 组件如何使用Stencil模板测试应用遮罩

最近做了一些绘图的工作,使用到了LineRender组件,比较简单的任务,画个圆,然后需要加个遮罩,这个任务比较简单原因是2D的绘制,可是后续的问题来了,使用RectMask 2D根本遮不住这个叛逆的LineRender,他有个属性 Use World Space , 设置为Flase后进行2D 绘制,
怎么都遮不住,想想RectMask 2D也是通过Stencil模板测试来处理的,我自然就想到了使用Stencill来处理LineRender,

查资料…查资料…查资料…
查资料…查资料…查资料…

没有找到,CSDN上居然没有这么简单的问题居然没有答案,我很惊讶,于是翻墙出去搜了一下,发现老外也遇到了这个问题,最终找到了一个答案

如果你翻墙了,可以去看看,翻不了我就抄在下面给你们用

https://discussions.unity.com/t/how-to-use-the-stencil-buffer-on-a-line-renderer/950878

Stencil Test

Shader "Custom/Masked"
{
    SubShader
    {
        Tags {
            "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"
        }

        Pass
        {
            Stencil
            {
                Ref 1
                Comp Equal
                Pass Keep
            }
        }
    }
}

Stencil Mask

Shader "Custom/Masked"
{
    SubShader
    {
        Tags {
            "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"
        }
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
        {
            Stencil
            {
                Ref 1
                Comp Equal
                Pass Keep
            }
          
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct vert_to_frag
            {
                float4 pos : SV_POSITION;
                fixed4 color : COLOR;
            };

            vert_to_frag vert (appdata_full vert_data)
            {
                vert_to_frag frag_data;
                frag_data.pos = UnityObjectToClipPos(vert_data.vertex);
                frag_data.color.xyz = vert_data.color;
                frag_data.color.w = vert_data.color.w;
                return frag_data;
            }

            fixed4 frag (vert_to_frag frag_data) : SV_Target
            {
                return frag_data.color;
            }

            ENDCG
        }
    }
}

上述代码是模板和模板测试的原型,着色代码可以自己添加, 也可以自定义属性控制,这里简单的写了一下,希望能给你带来帮助。


原文地址:https://blog.csdn.net/gzylongxingtianxia/article/details/142913787

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!