|
@@ -0,0 +1,56 @@
|
|
|
+// Upgrade NOTE: replaced '_Projector' with 'unity_Projector'
|
|
|
+// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip'
|
|
|
+// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
|
|
|
+
|
|
|
+Shader "Projector/AdditiveTint" {
|
|
|
+ Properties{
|
|
|
+ _Color("Tint Color", Color) = (1,1,1,1)
|
|
|
+ _Attenuation("Falloff", Range(0.0, 1.0)) = 1.0
|
|
|
+ _ShadowTex("Cookie", 2D) = "gray" {}
|
|
|
+ }
|
|
|
+ Subshader{
|
|
|
+ Tags {"Queue" = "Transparent"}
|
|
|
+ Pass {
|
|
|
+ ZWrite Off
|
|
|
+ ColorMask RGB
|
|
|
+ Blend SrcAlpha One // Additive blending
|
|
|
+ Offset - 1, -1
|
|
|
+
|
|
|
+ CGPROGRAM
|
|
|
+ #pragma vertex vert
|
|
|
+ #pragma fragment frag
|
|
|
+ #include "UnityCG.cginc"
|
|
|
+
|
|
|
+ struct v2f {
|
|
|
+ float4 uvShadow : TEXCOORD0;
|
|
|
+ float4 pos : SV_POSITION;
|
|
|
+ };
|
|
|
+
|
|
|
+ float4x4 unity_Projector;
|
|
|
+ float4x4 unity_ProjectorClip;
|
|
|
+
|
|
|
+ v2f vert(float4 vertex : POSITION)
|
|
|
+ {
|
|
|
+ v2f o;
|
|
|
+ o.pos = UnityObjectToClipPos(vertex);
|
|
|
+ o.uvShadow = mul(unity_Projector, vertex);
|
|
|
+ return o;
|
|
|
+ }
|
|
|
+
|
|
|
+ sampler2D _ShadowTex;
|
|
|
+ fixed4 _Color;
|
|
|
+ float _Attenuation;
|
|
|
+
|
|
|
+ fixed4 frag(v2f i) : SV_Target
|
|
|
+ {
|
|
|
+ // Apply alpha mask
|
|
|
+ fixed4 texCookie = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
|
|
|
+ fixed4 outColor = _Color * texCookie.a;
|
|
|
+ // Attenuation
|
|
|
+ float depth = i.uvShadow.z; // [-1 (near), 1 (far)]
|
|
|
+ return outColor * clamp(1.0 - abs(depth) + _Attenuation, 0.0, 1.0);
|
|
|
+ }
|
|
|
+ ENDCG
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|