summaryrefslogtreecommitdiffstats
path: root/mochie_shadow_caster.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'mochie_shadow_caster.cginc')
-rw-r--r--mochie_shadow_caster.cginc63
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;
}