summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs9
-rw-r--r--feature_macros.cginc1
-rw-r--r--globals.cginc5
-rw-r--r--tooner.shader3
-rw-r--r--tooner_lighting.cginc17
5 files changed, 30 insertions, 5 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 01e30ed..fefee6b 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -3389,6 +3389,7 @@ public class ToonerGUI : ShaderGUI {
Stochastic,
InterleavedGradientNoise,
NoiseMask,
+ SurfaceStableFractalDithering,
}
// unity is made by fucking morons and they don't expose this so i'm
@@ -3504,6 +3505,7 @@ public class ToonerGUI : ShaderGUI {
SetKeyword("_RENDERING_CUTOUT_STOCHASTIC", cmode == CutoutMode.Stochastic);
SetKeyword("_RENDERING_CUTOUT_IGN", cmode == CutoutMode.InterleavedGradientNoise);
SetKeyword("_RENDERING_CUTOUT_NOISE_MASK", cmode == CutoutMode.NoiseMask);
+ SetKeyword("_RENDERING_CUTOUT_SSFD", cmode == CutoutMode.SurfaceStableFractalDithering);
EditorGUI.indentLevel += 1;
{
@@ -3518,6 +3520,13 @@ public class ToonerGUI : ShaderGUI {
} else if (cmode == CutoutMode.InterleavedGradientNoise) {
bc = FindProperty("_Rendering_Cutout_Ign_Seed");
FloatProperty(bc, "Seed");
+ } else if (cmode == CutoutMode.SurfaceStableFractalDithering) {
+ bc = FindProperty("_Rendering_Cutout_SSFD_Scale");
+ FloatProperty(bc, "Scale");
+ bc = FindProperty("_Rendering_Cutout_SSFD_Max_Fwidth");
+ FloatProperty(bc, "Max fwidth");
+ bc = FindProperty("_Rendering_Cutout_SSFD_Noise");
+ TexturePropertySingleLine(MakeLabel(bc, "Noise"), bc);
}
bc = FindProperty("_Rendering_Cutout_Speed");
diff --git a/feature_macros.cginc b/feature_macros.cginc
index d870fb9..98d439f 100644
--- a/feature_macros.cginc
+++ b/feature_macros.cginc
@@ -21,6 +21,7 @@
#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_CUTOUT_SSFD
#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 578fb8e..d8a60d9 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -393,6 +393,11 @@ float _Rendering_Cutout_Speed;
#if defined(_RENDERING_CUTOUT_IGN)
float _Rendering_Cutout_Ign_Seed;
#endif
+#if defined(_RENDERING_CUTOUT_SSFD)
+float _Rendering_Cutout_SSFD_Scale;
+float _Rendering_Cutout_SSFD_Max_Fwidth;
+texture3D _Rendering_Cutout_SSFD_Noise;
+#endif
#endif
#if defined(_OUTLINES)
diff --git a/tooner.shader b/tooner.shader
index 15386c7..1660c3c 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -22,6 +22,9 @@ Shader "yum_food/tooner"
_Rendering_Cutout_Noise_Mask("Noise mask", 2D) = "white" {}
_Rendering_Cutout_Speed("Speed (for stochastic methods)", Float) = 1
+ _Rendering_Cutout_SSFD_Scale("Scale", Float) = 1
+ _Rendering_Cutout_SSFD_Max_Fwidth("Max fwidth", Float) = 1
+ _Rendering_Cutout_SSFD_Noise("Noise", 3D) = "black" {}
_MainTex("Base color", 2D) = "white" {}
[Normal] _BumpMap("Normal", 2D) = "bump" {}
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 09043f5..b1bbab0 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -1033,7 +1033,6 @@ float ssfd(float2 uv, float scale, float max_fwidth, texture3D noise)
float3 duv_3d = float3(duv, 0);
#endif
float dither = noise.SampleLevel(bilinear_repeat_s, duv_3d, 0);
- dither = (dither > 0.5) ? 1 : 0;
return dither;
}
@@ -1123,7 +1122,8 @@ float4 effect(inout v2f i, out float depth)
#endif // _FRAME_COUNTER
#if defined(_SURFACE_STABLE_FRACTAL_DITHERING)
- albedo.rgb = ssfd(i.uv0, _Surface_Stable_Fractal_Dithering_Scale, _Surface_Stable_Fractal_Dithering_Max_Fwidth, _Surface_Stable_Fractal_Dithering_Noise);
+ float ssfd_raw = ssfd(i.uv0, _Surface_Stable_Fractal_Dithering_Scale, _Surface_Stable_Fractal_Dithering_Max_Fwidth, _Surface_Stable_Fractal_Dithering_Noise);
+ albedo.rgb = ssfd_raw > 0.5 ? 1 : 0;
#endif
#if defined(_GIMMICK_GERSTNER_WATER)
@@ -1530,9 +1530,14 @@ float4 effect(inout v2f i, out float depth)
_Rendering_Cutout_Noise_Mask_TexelSize.xy, 0);
ar = frac(ar + frame * PHI * _Rendering_Cutout_Speed);
clip(albedo.a - ar);
+#elif defined(_RENDERING_CUTOUT_SSFD)
+ float ar = 1.0 - ssfd(i.uv0, _Rendering_Cutout_SSFD_Scale, _Rendering_Cutout_SSFD_Max_Fwidth, _Rendering_Cutout_SSFD_Noise);
+ ar = ar > albedo.a ? 1 : 0;
+ clip(albedo.a - ar);
#else
clip(albedo.a - _Alpha_Cutoff);
#endif
+
albedo.a = 1;
#endif // _RENDERING_CUTOUT
@@ -2348,19 +2353,21 @@ float4 effect(inout v2f i, out float depth)
uint2 bayer_idx = (glasses_uv_round % 8);
#if defined(_GIMMICK_LENS_00_BAYER)
float mask = BayerM8x8[bayer_idx.y * 8 + bayer_idx.x];
+ mask = frac(mask + frame * PHI * _Gimmick_Lens_00_Frame_Counter_Speed);
#elif defined(_GIMMICK_LENS_00_INTERLEAVED_GRADIENT_NOISE)
float mask = ign(glasses_uv_round);
+ mask = frac(mask + frame * PHI * _Gimmick_Lens_00_Frame_Counter_Speed);
#elif defined(_GIMMICK_LENS_00_SSFD)
- float mask = ssfd(glasses_uv_round, _Gimmick_Lens_00_SSFD_Scale, _Gimmick_Lens_00_SSFD_Max_Fwidth, _Gimmick_Lens_00_SSFD_Noise);
+ float mask = ssfd(i.uv0, _Gimmick_Lens_00_SSFD_Scale, _Gimmick_Lens_00_SSFD_Max_Fwidth, _Gimmick_Lens_00_SSFD_Noise);
+ mask = mask > 0.5 ? 1 : 0;
#endif
- //mask = frac(mask + frame * PHI * _Gimmick_Lens_00_Frame_Counter_Speed);
float2 grab_uv = i.grabPos.xy / i.grabPos.w;
//grab_uv = floor(grab_uv * _ScreenParams.xy * _Gimmick_Lens_00_Scale) / (_ScreenParams.xy * _Gimmick_Lens_00_Scale);
float3 grab_color = _Tooner_Grabpass.SampleLevel(linear_clamp_s, grab_uv, 0).rgb;
grab_color = round(grab_color * _Gimmick_Lens_00_Subdivisions) / _Gimmick_Lens_00_Subdivisions;
lit.rgb = (grab_color > mask);
- lit.rgb = mask * .1;
+ //lit.rgb = mask;
}
#endif