本文主要是介绍Unity Sprite2D Outline Shader 图片描边+纯色填充,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2D图片描边,2D图片纯色填充,二合一Shader。支持UGUI UI Mask。
Shader "Sprites/SpriteOutline"
{Properties{[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}_Color ("Tint Color", Color) = (1,1,1,1)_TintColorFactor ("Tint Color Factor", Range(0, 1)) = 1_FillColor ("Fill Color", Color) = (1,1,1,1)_FillColorFactor ("Fill Color Factor", Range(0, 1)) = 0_OutlineColor("Outline Color", Color) = (1,1,1,1)_LineWidth("Outline Width", Float) = 0.39_CheckRange("Check Range", Range(0, 1)) = 0_CheckAccuracy("Check Accuracy", Range(0.1, 0.99)) = 0.9[MaterialToggle] PixelSnap ("Pixel Snap", Float) = 0_StencilComp ("Stencil Comparison", Float) = 8_Stencil ("Stencil ID", Float) = 0_StencilOp ("Stencil Operation", Float) = 0_StencilWriteMask ("Stencil Write Mask", Float) = 255_StencilReadMask ("Stencil Read Mask", Float) = 255_ColorMask ("Color Mask", Float) = 15}SubShader{Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane""CanUseSpriteAtlas"="True"}Cull OffLighting OffZWrite OffBlend One OneMinusSrcAlphaStencil{Ref[_Stencil]Comp[_StencilComp]Pass[_StencilOp]ReadMask[_StencilReadMask]WriteMask[_StencilWriteMask]}ColorMask[_ColorMask]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;float _TintColorFactor;fixed4 _FillColor;float _FillColorFactor;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_ONOUT.vertex = UnityPixelSnap(OUT.vertex);#endifreturn 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;
#endifreturn 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 * _TintColorFactor * (1 - _FillColorFactor) + _FillColor * _FillColorFactor, bOut);return c;}else{return c;}}ENDCG}}
}
这篇关于Unity Sprite2D Outline Shader 图片描边+纯色填充的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!