From 4adbc6dfbf2409f34e11e001db2b434feeeb435f Mon Sep 17 00:00:00 2001 From: yum Date: Sun, 3 Nov 2024 15:35:40 -0800 Subject: Add interleaved gradient noise cutout mode Based on screen space uvs. --- tooner_lighting.cginc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'tooner_lighting.cginc') diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 2952f29..c6fd02a 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1363,6 +1363,16 @@ float4 pixellate_color(int2 px_res, float2 uv, float4 c) float4 effect(inout v2f i, out float depth) { + ToonerData tdata; + { + float3 full_vec_eye_to_geometry = i.worldPos - _WorldSpaceCameraPos; + float3 world_dir = normalize(i.worldPos - _WorldSpaceCameraPos); + float perspective_divide = 1.0 / i.pos.w; + float perspective_factor = length(full_vec_eye_to_geometry * perspective_divide); + tdata.screen_uv = i.screenPos.xy * perspective_divide; + tdata.screen_uv_round = floor(tdata.screen_uv * _ScreenParams.xy); + } + #if defined(EXPERIMENT__CUSTOM_DEPTH) { float4 clip_pos = mul(UNITY_MATRIX_VP, float4(i.worldPos, 1.0)); @@ -1502,6 +1512,9 @@ float4 effect(inout v2f i, out float depth) #if defined(_RENDERING_CUTOUT_STOCHASTIC) float ar = rand2(i.uv0); clip(albedo.a - ar); +#elif defined(_RENDERING_CUTOUT_IGN) + float ar = ign(tdata.screen_uv_round); + clip(albedo.a - ar); #else clip(albedo.a - _Alpha_Cutoff); #endif @@ -2418,7 +2431,7 @@ float4 effect(inout v2f i, out float depth) float4 lit = getLitColor(vertex_light_color, albedo, i.worldPos, normal, metallic, 1.0 - roughness, i.uv0, ao, /*enable_direct=*/true, - diffuse_contrib, i); + diffuse_contrib, i, tdata); #if defined(_GIMMICK_FLAT_COLOR) if (round(_Gimmick_Flat_Color_Enable_Dynamic)) { -- cgit v1.2.3