Notifications
Article
unity适用于ui的描边shader
Published 8 months ago
202
1
(图是随便配的,但代码真的没问题!)是不是太简单了呢....我在网上找到的都是一份3d模型的描边shader代码。ui的描边shader基本就是3d描边变得简单一点这样,思路依然是用两次渲染。
先放代码:
Shader "Custom/EdgeShader" { Properties{ _MainTex("Base (RGB)", 2D) = "white" {} _OutlineColor("Outline Color", Color) = (0,0,0,1) _Outline("Outline width", Range(0.0, 0.03)) = 0.01 } SubShader { pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" float _RADIUSBUCE; float _Outline; float4 _OutlineColor; float _WidthDevideHeight; sampler2D _MainTex; struct v2f { float4 pos : SV_POSITION; float2 ModeUV: TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.ModeUV = v.texcoord; o.pos.x += o.ModeUV.x * _Outline; o.pos.y -= o.ModeUV.y * _Outline; return o; } fixed4 frag(v2f i) : COLOR { return _OutlineColor; } ENDCG } pass { CGPROGRAM #pragma exclude_renderers gles #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" sampler2D _MainTex; struct v2f { float4 pos : SV_POSITION; float2 ModeUV: TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); //v.vertex; o.ModeUV = v.texcoord; return o; } fixed4 frag(v2f i) :COLOR { fixed4 col; col = (0,1,1,0); col = tex2D(_MainTex, i.ModeUV); return col; } ENDCG } } }
大括号应该没有少加(捂脸)。
总而言之,这儿用了两个pass。第一个pass里改变uv值使ui膨胀(什么鬼用词)一圈儿,然后渲染出膨胀的部分;第二个pass里面重新渲染一份原本的ui。写这个的原因主要是因为我没在网上找到一个靠谱简单的实现(捂脸)。所以,还是自己写了一个,嗯,就这样吧。
xindu233
Developer - Student
3
Comments
黄磊
8 days ago
赞一个,又能把3d object添加描边的shadergraph文章吗?本人美术,想学学shadergraph
0