diff options
Diffstat (limited to 'mochie_shadow_caster.cginc')
| -rw-r--r-- | mochie_shadow_caster.cginc | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/mochie_shadow_caster.cginc b/mochie_shadow_caster.cginc index 028cc31..11d0941 100644 --- a/mochie_shadow_caster.cginc +++ b/mochie_shadow_caster.cginc @@ -63,6 +63,13 @@ v2f vert (appdata v){ v.vertex.xyz = gerstner_vert(v.vertex.xyz, p); } #endif +#if defined(_GIMMICK_FOG_00) + { + float3 ro = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1)); + float3 rd = normalize(ro - v.vertex.xyz); + v.vertex.xyz = ro + rd * _Gimmick_Fog_00_Radius; + } +#endif v2f o = (v2f)0; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); @@ -71,18 +78,68 @@ v2f vert (appdata v){ return o; } +float2 get_uv_by_channel(v2f i, uint which_channel) { + switch (which_channel) { + case 0: + return i.uv0; + break; +#if !defined(_OPTIMIZE_INTERPOLATORS) + case 1: + return i.uv1; + break; +#if !defined(LIGHTMAP_ON) + case 2: + return i.uv2; + break; + case 3: + return i.uv3; + break; + case 4: + return i.uv4; + break; + case 5: + return i.uv5; + break; + case 6: + return i.uv6; + break; + case 7: + return i.uv7; + break; +#endif +#endif // _OPTIMIZE_INTERPOLATORS + default: + return 0; + break; + } +} + +#define UV_SCOFF(i, tex_st, which_channel) get_uv_by_channel(i, round(which_channel)) * (tex_st).xy + (tex_st).zw + float4 frag (v2f i) : SV_Target { #if defined(_BASECOLOR_MAP) - float iddx = ddx(i.uv.x); - float iddy = ddx(i.uv.y); - float4 albedo = _MainTex.SampleGrad(linear_repeat_s, i.uv, iddx, iddy); + float4 albedo = _MainTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _MainTex_ST, 0), _Global_Sample_Bias); albedo *= _Color; #else float4 albedo = _Color; #endif // _BASECOLOR_MAP #if defined(_RENDERING_CUTOUT) +#if defined(_RENDERING_CUTOUT_STOCHASTIC) + float ar = rand2(i.uv0); + clip(albedo.a - ar); +#elif defined(_RENDERING_CUTOUT_IGN) + float ar = ign_anim( + floor(tdata.screen_uv_round * _Rendering_Cutout_Noise_Scale) + _Rendering_Cutout_Ign_Seed, + floor(_Frame_Counter), _Rendering_Cutout_Ign_Speed); + clip(albedo.a - ar); +#elif defined(_RENDERING_CUTOUT_NOISE_MASK) + float ar = _Rendering_Cutout_Noise_Mask.SampleLevel(point_repeat_s, tdata.screen_uv * _ScreenParams.xy * _Rendering_Cutout_Noise_Mask_TexelSize.xy, 0); + clip(albedo.a - ar); +#else clip(albedo.a - _Alpha_Cutoff); #endif + albedo.a = 1; +#endif UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); return 0; } |
