YanCheng_Metrology/Assets/ArtRes/Shaders/UIOutlineShader.shader

70 lines
2.1 KiB
Plaintext

Shader "Custom/UIOutlineShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_OutlineColor ("Outline Color", Color) = (1,1,1,1)
_OutlineWidth ("Outline Width", Range(0.0, 10.0)) = 1.0
}
SubShader
{
Tags {"Queue"="Overlay" "IgnoreProjector"="True" "RenderType"="Transparent"}
Lighting Off ZWrite Off ZTest Always Blend SrcAlpha OneMinusSrcAlpha Cull Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 pos : POSITION;
float2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _OutlineColor;
float _OutlineWidth;
v2f vert(appdata_t v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.texcoord = v.texcoord;
return o;
}
float4 frag(v2f i) : COLOR
{
float4 mainColor = tex2D(_MainTex, i.texcoord);
// Get texture size
float2 texelSize = float2(_OutlineWidth / _ScreenParams.x, _OutlineWidth / _ScreenParams.y);
// Sampling neighboring pixels
float alpha =
tex2D(_MainTex, i.texcoord + texelSize.xy).a +
tex2D(_MainTex, i.texcoord - texelSize.xy).a +
tex2D(_MainTex, i.texcoord + float2(-texelSize.x, texelSize.y)).a +
tex2D(_MainTex, i.texcoord + float2(texelSize.x, -texelSize.y)).a;
alpha = step(0.01, alpha) * (1 - mainColor.a);
float4 outlineColor = _OutlineColor * alpha;
return outlineColor + mainColor;
}
ENDCG
}
}
FallBack "Unlit/Transparent"
}