diff options
| author | yum <yum.food.vr@gmail.com> | 2024-11-04 01:04:32 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-11-04 01:04:32 -0800 |
| commit | 5f4b58803d1f1d0c61a031e8563df4024682b328 (patch) | |
| tree | cca8177cb3b370bdb3123c75820a44cc41ca82e1 | |
| parent | 4adbc6dfbf2409f34e11e001db2b434feeeb435f (diff) | |
Add noise mask option to cutout shading mode
| -rw-r--r-- | Editor/tooner.cs | 9 | ||||
| -rw-r--r-- | atrix256.cginc | 5 | ||||
| -rw-r--r-- | feature_macros.cginc | 1 | ||||
| -rw-r--r-- | globals.cginc | 5 | ||||
| -rw-r--r-- | tooner.shader | 2 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 30 |
6 files changed, 39 insertions, 13 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 53ae1a8..6c5a9f8 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -2367,6 +2367,7 @@ public class ToonerGUI : ShaderGUI { Cutoff, Stochastic, InterleavedGradientNoise, + NoiseMask, } // unity is made by fucking morons and they don't expose this so i'm @@ -2481,11 +2482,19 @@ public class ToonerGUI : ShaderGUI { bc.floatValue = (float) cmode; SetKeyword("_RENDERING_CUTOUT_STOCHASTIC", cmode == CutoutMode.Stochastic); SetKeyword("_RENDERING_CUTOUT_IGN", cmode == CutoutMode.InterleavedGradientNoise); + SetKeyword("_RENDERING_CUTOUT_NOISE_MASK", cmode == CutoutMode.NoiseMask); + EditorGUI.indentLevel += 1; if (cmode == CutoutMode.Cutoff) { bc = FindProperty("_Alpha_Cutoff"); ShaderProperty(bc, MakeLabel(bc)); + } else if (cmode == CutoutMode.NoiseMask) { + bc = FindProperty("_Rendering_Cutout_Noise_Mask"); + TexturePropertySingleLine( + MakeLabel(bc, "Noise mask"), + bc); } + EditorGUI.indentLevel -= 1; } bc = FindProperty("_Cull"); diff --git a/atrix256.cginc b/atrix256.cginc index 5236715..3eb164c 100644 --- a/atrix256.cginc +++ b/atrix256.cginc @@ -33,5 +33,10 @@ float ign(float2 screen_px) { 0.00583715 * screen_px.y, 1), 1); } +float ign_anim(float2 screen_px) { + float frame = frac(_Time[0]*.0005) * 64; + return ign(screen_px + frame * 5.588238f); +} + #endif // __ATRIX256_INC diff --git a/feature_macros.cginc b/feature_macros.cginc index 7f68ef1..388dc86 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -20,6 +20,7 @@ #pragma shader_feature_local _ _RENDERING_CUTOUT #pragma shader_feature_local _ _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _ _RENDERING_CUTOUT_IGN +#pragma shader_feature_local _ _RENDERING_CUTOUT_NOISE_MASK #pragma shader_feature_local _ _RENDERING_FADE #pragma shader_feature_local _ _RENDERING_TRANSPARENT #pragma shader_feature_local _ _RENDERING_TRANSCLIPPING diff --git a/globals.cginc b/globals.cginc index a62bb07..c717cae 100644 --- a/globals.cginc +++ b/globals.cginc @@ -811,5 +811,10 @@ float4 _Gimmick_Gerstner_Water_Color_Ramp_Mask1; float _Gimmick_Fog_00_Ray_March_0_Seed; #endif +#if defined(_RENDERING_CUTOUT_NOISE_MASK) +texture2D _Rendering_Cutout_Noise_Mask; +float4 _Rendering_Cutout_Noise_Mask_TexelSize; +#endif + #endif diff --git a/tooner.shader b/tooner.shader index a21a52f..5a73809 100644 --- a/tooner.shader +++ b/tooner.shader @@ -19,6 +19,8 @@ Shader "yum_food/tooner" _Clearcoat_Mask2("Clearcoat mask 2", 2D) = "white" {} _Clearcoat_Mask2_Invert("Clearcoat mask 2 invert", Float) = 0 + _Rendering_Cutout_Noise_Mask("Noise mask", 2D) = "white" {} + _MainTex("Base color", 2D) = "white" {} [Normal] _BumpMap("Normal", 2D) = "bump" {} _MetallicTex("Metallic", 2D) = "white" {} diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index c6fd02a..d9200de 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1508,19 +1508,6 @@ float4 effect(inout v2f i, out float depth) } #endif -#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(tdata.screen_uv_round); - clip(albedo.a - ar); -#else - clip(albedo.a - _Alpha_Cutoff); -#endif - albedo.a = 1; -#endif - #if defined(_METALLIC_MAP) float metallic = _MetallicTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _MetallicTex_ST, 0), _Global_Sample_Bias)[round(_MetallicTexChannel)]; @@ -1797,6 +1784,23 @@ float4 effect(inout v2f i, out float depth) applyDecal(albedo, roughness, metallic, decal_emission, i); #endif +#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(tdata.screen_uv_round); + 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); + //return float4(ar, ar, ar, 1); + clip(albedo.a - ar); +#else + clip(albedo.a - _Alpha_Cutoff); +#endif + albedo.a = 1; +#endif + #if defined(_GIMMICK_AL_CHROMA_00) if (_Gimmick_AL_Chroma_00_Forward_Pass && AudioLinkIsAvailable()) { float3 c = AudioLinkData(ALPASS_CCSTRIP + uint2(0, 0)).rgb; |
