最近做了一些绘图的工作,使用到了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 1Comp EqualPass Keep}}}
}
Stencil Mask
Shader "Custom/Masked"
{SubShader{Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}Blend SrcAlpha OneMinusSrcAlphaPass{Stencil{Ref 1Comp EqualPass 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}}
}
上述代码是模板和模板测试的原型,着色代码可以自己添加, 也可以自定义属性控制,这里简单的写了一下,希望能给你带来帮助。