67 lines
2.1 KiB
Plaintext
67 lines
2.1 KiB
Plaintext
Shader "Custom/OutlineGlow"
|
|
{
|
|
Properties
|
|
{
|
|
_MainTex("Sprite Texture", 2D) = "white" {}
|
|
_OutlineColor("Outline Color", Color) = (1,1,0,1) // 发光颜色
|
|
_OutlineWidth("Outline Width", Range(0, 0.1)) = 0.02 // 外发光宽度
|
|
}
|
|
SubShader
|
|
{
|
|
Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
Cull Off
|
|
Lighting Off
|
|
ZWrite Off
|
|
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata_t {
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
};
|
|
|
|
struct v2f {
|
|
float2 uv : TEXCOORD0;
|
|
float4 vertex : SV_POSITION;
|
|
};
|
|
|
|
sampler2D _MainTex;
|
|
float4 _OutlineColor;
|
|
float _OutlineWidth;
|
|
|
|
v2f vert(appdata_t v) {
|
|
v2f o;
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.uv = v.uv;
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : SV_Target {
|
|
float2 uv = i.uv;
|
|
fixed4 texColor = tex2D(_MainTex, uv);
|
|
|
|
// 计算外轮廓
|
|
float alpha = texColor.a;
|
|
float outlineAlpha = (
|
|
tex2D(_MainTex, uv + float2(_OutlineWidth, 0)).a +
|
|
tex2D(_MainTex, uv + float2(-_OutlineWidth, 0)).a +
|
|
tex2D(_MainTex, uv + float2(0, _OutlineWidth)).a +
|
|
tex2D(_MainTex, uv + float2(0, -_OutlineWidth)).a
|
|
) * 0.25;
|
|
|
|
fixed4 outlineColor = _OutlineColor;
|
|
outlineColor.a *= outlineAlpha; // 让外轮廓柔和一些
|
|
|
|
return lerp(outlineColor, texColor, alpha);
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|