diff options
| author | yum <yum.food.vr@gmail.com> | 2024-05-26 18:33:46 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-05-26 18:33:46 -0700 |
| commit | 33b2b8a3ab0ddea85c7a3f03f918fe5ee6874426 (patch) | |
| tree | 961636e8cd124cba4d163d7fc93e321a650b746f | |
| parent | 225ff402428d2d37c150028bf129f7450368c058 (diff) | |
Add transparent & transclipping rendering modes
| -rw-r--r-- | Editor/tooner.cs | 24 | ||||
| -rw-r--r-- | tooner.shader | 4 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 3 |
3 files changed, 30 insertions, 1 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 5bb21f9..184b653 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -678,7 +678,9 @@ public class ToonerGUI : ShaderGUI { enum RenderingMode { Opaque, Cutout, - Fade + Fade, + Transparent, + TransClipping, } enum CutoutMode { @@ -692,6 +694,10 @@ public class ToonerGUI : ShaderGUI { mode = RenderingMode.Cutout; } else if (target.IsKeywordEnabled("_RENDERING_FADE")) { mode = RenderingMode.Fade; + } else if (target.IsKeywordEnabled("_RENDERING_TRANSPARENT")) { + mode = RenderingMode.Transparent; + } else if (target.IsKeywordEnabled("_RENDERING_TRANSCLIPPING")) { + mode = RenderingMode.TransClipping; } EditorGUI.BeginChangeCheck(); @@ -705,6 +711,8 @@ public class ToonerGUI : ShaderGUI { RecordAction("Rendering mode"); SetKeyword("_RENDERING_CUTOUT", mode == RenderingMode.Cutout); SetKeyword("_RENDERING_FADE", mode == RenderingMode.Fade); + SetKeyword("_RENDERING_TRANSPARENT", mode == RenderingMode.Transparent); + SetKeyword("_RENDERING_TRANSCLIPPING", mode == RenderingMode.TransClipping); RenderQueue queue = RenderQueue.Geometry; string render_type = ""; @@ -730,6 +738,20 @@ public class ToonerGUI : ShaderGUI { dst_blend = BlendMode.OneMinusSrcAlpha; zwrite = false; break; + case RenderingMode.Transparent: + queue = RenderQueue.Transparent; + render_type = "Transparent"; + src_blend = BlendMode.One; + dst_blend = BlendMode.OneMinusSrcAlpha; + zwrite = false; + break; + case RenderingMode.TransClipping: + queue = RenderQueue.AlphaTest; + render_type = "Transparent"; + src_blend = BlendMode.One; + dst_blend = BlendMode.OneMinusSrcAlpha; + zwrite = true; + break; } foreach (Material m in editor.targets) { m.renderQueue = (int) queue; diff --git a/tooner.shader b/tooner.shader index a51cd54..3ad48ab 100644 --- a/tooner.shader +++ b/tooner.shader @@ -208,6 +208,8 @@ Shader "yum_food/tooner" #pragma shader_feature_local _ _RENDERING_CUTOUT #pragma shader_feature_local _ _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _ _RENDERING_FADE + #pragma shader_feature_local _ _RENDERING_TRANSPARENT + #pragma shader_feature_local _ _RENDERING_TRANSCLIPPING #pragma shader_feature_local _ _OUTLINES #pragma shader_feature_local _ _GLITTER #pragma shader_feature_local _ _EXPLODE @@ -292,6 +294,8 @@ Shader "yum_food/tooner" #pragma shader_feature_local _RENDERING_CUTOUT #pragma shader_feature_local _RENDERING_CUTOUT_STOCHASTIC #pragma shader_feature_local _RENDERING_FADE + #pragma shader_feature_local _RENDERING_TRANSPARENT + #pragma shader_feature_local _RENDERING_TRANSCLIPPING #pragma shader_feature_local _OUTLINES #pragma shader_feature_local _GLITTER #pragma shader_feature_local _EXPLODE diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index f31dbd1..6a0dd87 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -897,6 +897,9 @@ float4 effect(inout v2f i) result = lerp(result, al_color, _Explode_Phase * _Explode_Phase); } #endif +#if defined(_RENDERING_TRANSPARENT) || defined(_RENDERING_TRANSCLIPPING) + result.rgb *= result.a; +#endif return result; } |
