【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)!