Shader "Zhanyou/Character/NPCColorLerp" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
		[NoScaleOffset]_OtherTex ("Other Texture", 2D) = "white" {}
		_Emission ("Emission", Range(0, 1)) = 0.2
		// 角色材质颜色,乘法运算
		_Color("Blend Color", Color) = (1, 1, 1, 1)
		// Emission叠加颜色,加法运算
		_AddColor("Additive Color", Color) = (0, 0, 0, 1)
		_Outline ("Outline Power", float) = 22
		_OutlineColor ("Outline Color", Color) = (0.02, 0.02, 0.02, 1)
		// 溶解贴图,RGB为颜色,A为溶解开始数值
		_DissolveTex ("Dissolve Tex", 2D) = "white" {}
		// 部分溶解的渐变区域值
		_DissolveFade ("Dissolve Fade", Range(0, 1)) = 0.1
		// 完全溶解的Alpha数值
		_DissolveEnd ("Dissolve End", Range(0, 1)) = 0.5
	}

	SubShader {
		Tags { "Queue"="AlphaTest+10" "RenderType"="Character" }

		Pass {
            Stencil {
                Ref 1
                Comp always
                Pass replace
            }
		
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#pragma multi_compile_fog
			#include "NpcBase.cginc"
			
			uniform sampler2D _OtherTex;
			uniform sampler2D _DissolveTex;
			uniform half4 _DissolveTex_ST;
			uniform half _DissolveFade;
			uniform half _DissolveEnd;
			
			struct v2f {
				float4 pos : SV_POSITION;
				float2 texcoord : TEXCOORD0;
				float2 dissolveCoord : TEXCOORD1;
				half rim : TEXCOORD2;
				UNITY_FOG_COORDS(3)
			};
	
			v2f vert (appdata_tan v)
			{
				v2f o;
				UNITY_INITIALIZE_OUTPUT(v2f, o);
				NPC_VERT_COMMON(o);
				o.dissolveCoord = TRANSFORM_TEX(v.texcoord, _DissolveTex);
				UNITY_TRANSFER_FOG(o, o.pos);
				return o;
			}
	
			fixed4 frag(v2f i) : SV_TARGET
			{
				fixed4 col = tex2D(_OtherTex, i.texcoord);
				fixed4 mainCol = tex2D(_MainTex, i.texcoord);
				fixed4 dissolve = tex2D(_DissolveTex, i.dissolveCoord);
				if (dissolve.a <= _DissolveEnd + _DissolveFade)
				{
					float rate = max(0.0, (dissolve.a - _DissolveEnd) / _DissolveFade);
					col.rgb = lerp(mainCol.rgb, col.rgb, rate * rate);
				}
				
				col.rgb *= _Color.rgb;
				col.rgb += col.rgb * _Emission + _AddColor;
				col.rgb += _OutlineColor.rgb * _OutlineColor.a * i.rim;
				UNITY_OPAQUE_ALPHA(col.a);
				UNITY_APPLY_FOG(i.fogCoord, col);
				return col;
			}
			ENDCG
		}
	}
	Fallback "Zhanyou/Character/NPC"
}