|
|
- // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
-
- Shader "Fog Volume/Shadow Projector"
- {
-
- Properties
- {
- [NoScaleOffset]_MainTex("ShadowMap", 2D) = "white" {}
- displacePower("light Displace intensity", range(.01,.3)) = 0.079
- _ShadowColor("ShadowColor", Color)=(0,0,0,0)
- _Cutoff("Alpha cutoff", Range(0,1)) = 0.01//TODO: Publish
- }
- SubShader
- { Tags{
- "Queue" = "AlphaTest"
-
- "IgnoreProjector" = "True"
- "RenderType" = "NeverRenderMe"
- }
- Pass
- {
- Fog{ Mode Off }
-
- Blend DstColor OneMinusSrcAlpha
- Cull front
- ZWrite Off
- ZTest Always
- Lighting Off
- CGPROGRAM
- #pragma target 3.0
- #pragma vertex vert
- #pragma fragment frag
-
-
- #include "UnityCG.cginc"
-
- struct v2f
- {
- float4 pos : SV_POSITION;
- half2 uv : TEXCOORD0;
- float4 screenUV : TEXCOORD1;
- float3 ray : TEXCOORD2;
- half3 orientation : TEXCOORD3;
- };
-
- v2f vert(float3 v : POSITION)
- {
- v2f o;
- o.pos = UnityObjectToClipPos(float4(v,1));
- o.uv = v.xz + 0.5;
- o.screenUV = ComputeScreenPos(o.pos);
- //o.ray = mul(UNITY_MATRIX_MV, float4(v,1)).xyz * float3(-1,-1,1);
- //5.6:
- o.ray = UnityObjectToViewPos(float4(v, 1) ).xyz* float3(-1, -1, 1);
- o.orientation = mul((float3x3)unity_ObjectToWorld, float3(0,1,0));
- return o;
- }
-
- uniform float3 L;
- sampler2D _MainTex, RT_OpacityBlur;
- sampler2D_float _CameraDepthTexture;
- half displacePower;
- half _Cutoff;
- half4 _ShadowColor;
- fixed4 frag(v2f i) : COLOR0
- {
- i.ray = i.ray * (_ProjectionParams.z / i.ray.z);
- float2 uv = i.screenUV.xy / i.screenUV.w;
- // read depth and reconstruct world position
- float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv);
- depth = Linear01Depth(depth);
- float4 vpos = float4(i.ray * depth,1);
- float3 wpos = mul(unity_CameraToWorld, vpos).xyz;
- float3 opos = mul(unity_WorldToObject, float4(wpos,1)).xyz;
- clip(float3(0.5,0.5,0.5) - abs(opos.xyz));
- i.uv = opos.xz + 0.5;
- i.uv = i.uv + displacePower*L.xz;
- fixed4 col = tex2D(RT_OpacityBlur, i.uv).r;
- clip(col.a - _Cutoff);
- col.rgb = _ShadowColor*( col.a);
- //return float4(0,0,0,1);
- return float4(col.rgb, col.a);
- }
- ENDCG
- }
-
- }
-
- Fallback Off
- }
|