Unity3D 2D Sprite描邊效果Shader,可手動調整效果適配

來源:互聯網
上載者:User

標籤:unity3   repr   com   abs   cto   roi   minus   手動   ifd   

  最近兩個月學了很多Shader的知識,現在也算入點門了。現在網上有很多2D描邊的Shader,說實話大多數很差勁。有些多餘的條件判斷影響效率,提供的參數也不夠適配所有圖片。因為美術喜歡在圖片上面加一些效果,再加上切圖的時候背景圖的透明部分不夠多,或者透明通道透明不徹底等等問題,2D圖片描邊效果通常都不盡如人意。這種情況一般是要從美術那邊用ps做調整,如果需要描邊切圖周圍需要留出一點地區,我這個Shader提供了兩個參數可以調整效果,檢測範圍和描邊粗細,根據圖片的不同,參數肯定要做些調整才能達到最想要的效果,Shader基於Unity內建SpriteDefault修改,直接賦給Sprite就行了。大家也可以適當做些修改。

  3D描邊已經完成了法線膨脹的方法,接下來我會重點學習螢幕特效的方法然後寫部落格。以後還會有各種效果的Shader部落格。

  

Shader "Sprites/SpriteOutline"{    Properties    {        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}        _Color ("Tint", Color) = (1,1,1,1)        [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0        _OutlineColor("OutlineColor",Color) = (1,1,1,1)        _CheckRange("CheckRange",Range(0,1)) = 0        _LineWidth("LineWidth",Float) = 0.39        _CheckAccuracy("CheckAccuracy",Range(0.1,0.99)) = 0.9    }    SubShader    {        Tags        {             "Queue"="Transparent"             "IgnoreProjector"="True"             "RenderType"="Transparent"             "PreviewType"="Plane"            "CanUseSpriteAtlas"="True"        }        Cull Off        Lighting Off        ZWrite Off        Blend One OneMinusSrcAlpha        Pass        {           CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #pragma target 2.0            #pragma multi_compile _ PIXELSNAP_ON            #pragma multi_compile _ ETC1_EXTERNAL_ALPHA            #include "UnityCG.cginc"            sampler2D _MainTex;            float4 _MainTex_TexelSize;            sampler2D _AlphaTex;            fixed4 _Color;            fixed4 _OutlineColor;            float _CheckRange;            float _LineWidth;            float _CheckAccuracy;            struct appdata_t            {                float4 vertex   : POSITION;                float4 color    : COLOR;                float2 texcoord : TEXCOORD0;            };            struct v2f            {                float4 vertex   : SV_POSITION;                fixed4 color    : COLOR;                float2 texcoord  : TEXCOORD0;            };//                                    v2f vert(appdata_t IN)            {                v2f OUT;                OUT.vertex = UnityObjectToClipPos(IN.vertex);                OUT.texcoord = IN.texcoord;                OUT.color = IN.color * _Color;                #ifdef PIXELSNAP_ON                OUT.vertex = UnityPixelSnap (OUT.vertex);                #endif                return OUT;            }                        fixed4 SampleSpriteTexture (float2 uv)            {                fixed4 color = tex2D (_MainTex, uv);#if ETC1_EXTERNAL_ALPHA//                // get the color from an external texture (usecase: Alpha support for ETC1 on android)                color.a = tex2D (_AlphaTex, uv).r;#endif //ETC1_EXTERNAL_ALPHA                return color;            }            fixed4 frag(v2f IN) : SV_Target            {                fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;                c.rgb *= c.a;                float isOut = step(abs(1/_LineWidth),c.a);                if(isOut != 0)                {                    fixed4 pixelUp = tex2D(_MainTex, IN.texcoord + fixed2(0, _MainTex_TexelSize.y*_CheckRange));                      fixed4 pixelDown = tex2D(_MainTex, IN.texcoord - fixed2(0, _MainTex_TexelSize.y*_CheckRange));                      fixed4 pixelRight = tex2D(_MainTex, IN.texcoord + fixed2(_MainTex_TexelSize.x*_CheckRange, 0));                      fixed4 pixelLeft = tex2D(_MainTex, IN.texcoord - fixed2(_MainTex_TexelSize.x*_CheckRange, 0));                      float bOut = step((1-_CheckAccuracy),pixelUp.a*pixelDown.a*pixelRight.a*pixelLeft.a);                    c = lerp(_OutlineColor,c,bOut);                    return c;                }                return c;                            }        ENDCG        }    }}

 

Unity3D 2D Sprite描邊效果Shader,可手動調整效果適配

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.