summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-11-04 01:04:32 -0800
committeryum <yum.food.vr@gmail.com>2024-11-04 01:04:32 -0800
commit5f4b58803d1f1d0c61a031e8563df4024682b328 (patch)
treecca8177cb3b370bdb3123c75820a44cc41ca82e1
parent4adbc6dfbf2409f34e11e001db2b434feeeb435f (diff)
Add noise mask option to cutout shading mode
-rw-r--r--Editor/tooner.cs9
-rw-r--r--atrix256.cginc5
-rw-r--r--feature_macros.cginc1
-rw-r--r--globals.cginc5
-rw-r--r--tooner.shader2
-rw-r--r--tooner_lighting.cginc30
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;