Unity3D Shader 2D描边

Unity3D Shader 2D描边_第1张图片
效果图
// 指定渲染队列
Tags{  "Queue" ="Transparent"}

//开始alpha 混合
Blend SrcAlpha OneMinusSrcAlpha


//片元着色器
fixed4 frag (v2f i) : SV_Target
{
    fixed4 col = tex2D(_MainTex, i.uv);
     
    float2 uv_up = i.uv + _MainTex_TexelSize.xy * float2(0, 1) * _Outline;
    float2 uv_down = i.uv + _MainTex_TexelSize.xy * float2(0, -1) * _Outline;
    float2 uv_left = i.uv + _MainTex_TexelSize.xy * float2(-1, 0) * _Outline;
    float2 uv_right = i.uv + _MainTex_TexelSize.xy * float2(1, 0) * _Outline;

    float w = tex2D(_MainTex, uv_up).a * tex2D(_MainTex, uv_down).a
        * tex2D(_MainTex, uv_left).a * tex2D(_MainTex, uv_right).a;

    col.rgb = lerp(_OutlineColor, col.rgb,w);



    return col;
}

原理:纹理采样点Alpha =0 的时候 就认为边缘,设置成描边颜色。

备注1:指定渲染队列
备注2:开启透明混合
备注3:_MainTex_TexelSize 解释:纹理像素的尺寸
备注4: float w 解释,计算纹理采样周围边缘的强度。
备注5:lerp解释,计算差值 参数三等于0.5,返回参数一 50%+参数二50%

变量解释:
_OutlineColor = 边缘颜色
_Outline = 边缘宽度

你可能感兴趣的:(Unity3D Shader 2D描边)