diff options
| -rw-r--r-- | Editor/tooner.cs | 26 | ||||
| -rw-r--r-- | tooner.shader | 5 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 7 |
3 files changed, 29 insertions, 9 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 9409dbc..ca2d1c8 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -324,7 +324,7 @@ public class ToonerGUI : ShaderGUI { mode = (NormalsMode) EditorGUILayout.EnumPopup( MakeLabel("Normals mode"), mode); if (EditorGUI.EndChangeCheck()) { - RecordAction("Rendering Mode"); + RecordAction("Rendering mode"); } bc.floatValue = (float) mode; @@ -620,6 +620,11 @@ public class ToonerGUI : ShaderGUI { Fade } + enum CutoutMode { + Cutoff, + Stochastic + } + void DoRendering() { RenderingMode mode = RenderingMode.Opaque; if (target.IsKeywordEnabled("_RENDERING_CUTOUT")) { @@ -630,13 +635,13 @@ public class ToonerGUI : ShaderGUI { EditorGUI.BeginChangeCheck(); mode = (RenderingMode) EditorGUILayout.EnumPopup( - MakeLabel("Rendering Mode"), mode); + MakeLabel("Rendering mode"), mode); BlendMode src_blend = BlendMode.One; BlendMode dst_blend = BlendMode.Zero; bool zwrite = false; if (EditorGUI.EndChangeCheck()) { - RecordAction("Rendering Mode"); + RecordAction("Rendering mode"); SetKeyword("_RENDERING_CUTOUT", mode == RenderingMode.Cutout); SetKeyword("_RENDERING_FADE", mode == RenderingMode.Fade); @@ -676,8 +681,19 @@ public class ToonerGUI : ShaderGUI { MaterialProperty bc; if (mode == RenderingMode.Cutout) { - bc = FindProperty("_Alpha_Cutoff"); - editor.ShaderProperty(bc, MakeLabel(bc)); + EditorGUI.BeginChangeCheck(); + bc = FindProperty("_Cutout_Mode"); + CutoutMode cmode = (CutoutMode) Math.Round(bc.floatValue); + cmode = (CutoutMode) EditorGUILayout.EnumPopup( + MakeLabel("Cutout mode"), cmode); + EditorGUI.EndChangeCheck(); + bc.floatValue = (float) cmode; + SetKeyword("_RENDERING_CUTOUT_STOCHASTIC", cmode == CutoutMode.Stochastic); + + if (cmode == CutoutMode.Cutoff) { + bc = FindProperty("_Alpha_Cutoff"); + editor.ShaderProperty(bc, MakeLabel(bc)); + } } bc = FindProperty("_Cull"); diff --git a/tooner.shader b/tooner.shader index c97b700..a0c3209 100644 --- a/tooner.shader +++ b/tooner.shader @@ -130,6 +130,8 @@ Shader "yum_food/tooner" _Enable_Tessellation("Enable tessellation", Float) = 0.0 _Tess_Factor("Tessellation factor", Range(1, 64)) = 1.0 _Tess_Dist_Cutoff("Tessellation distance cutoff", Float) = -1.0 + + _Cutout_Mode("Cutout rendering mode", Float) = 0.0 } SubShader { @@ -163,6 +165,7 @@ Shader "yum_food/tooner" #pragma shader_feature_local _ _EMISSION //#pragma shader_feature_local _ _SHADING_MODE_FLAT #pragma shader_feature_local _ _RENDERING_CUTOUT + #pragma shader_feature_local _ _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _ _RENDERING_FADE #pragma shader_feature_local _ _OUTLINES #pragma shader_feature_local _ _GLITTER @@ -226,6 +229,7 @@ Shader "yum_food/tooner" #pragma shader_feature_local _ _EMISSION //#pragma shader_feature_local _SHADING_MODE_FLAT #pragma shader_feature_local _RENDERING_CUTOUT + #pragma shader_feature_local _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _RENDERING_FADE #pragma shader_feature_local _OUTLINES #pragma shader_feature_local _GLITTER @@ -273,6 +277,7 @@ Shader "yum_food/tooner" #pragma target 5.0 #pragma shader_feature_local _BASECOLOR_MAP #pragma shader_feature_local _RENDERING_CUTOUT + #pragma shader_feature_local _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _OUTLINES #pragma shader_feature_local _EXPLODE #pragma shader_feature_local _ _SCROLL diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 0b054f2..787b911 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -412,10 +412,9 @@ float4 effect(inout v2f i) #endif #if defined(_RENDERING_CUTOUT) -#if 0 - if (albedo.a < _Alpha_Cutoff) { - discard; - } +#if defined(_RENDERING_CUTOUT_STOCHASTIC) + float ar = rand2(i.uv); + clip(albedo.a - ar); #else clip(albedo.a - _Alpha_Cutoff); #endif |
