TH1/Unity/Assets/Shaders/OutlineGlow.shader
2025-07-17 18:26:28 +08:00

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
}
}
}