summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs26
-rw-r--r--tooner.shader5
-rw-r--r--tooner_lighting.cginc7
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