summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs9
-rw-r--r--globals.cginc8
-rw-r--r--tooner.shader10
-rw-r--r--tooner_lighting.cginc51
4 files changed, 72 insertions, 6 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 8cb4d07..ccd07c1 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -545,6 +545,15 @@ public class ToonerGUI : ShaderGUI {
bc.floatValue = enabled ? 1.0f : 0.0f;
SetKeyword($"_MATCAP{i}_DISTORTION0", enabled);
+ for (int j = 0; j < 4; j++) {
+ bc = FindProperty($"_Matcap{i}_Overwrite_Rim_Lighting_{j}");
+ enabled = bc.floatValue > 1E-6;
+ EditorGUI.BeginChangeCheck();
+ enabled = EditorGUILayout.Toggle($"Overwrite rim lighting {j}", enabled);
+ EditorGUI.EndChangeCheck();
+ bc.floatValue = enabled ? 1.0f : 0.0f;
+ }
+
EditorGUI.indentLevel -= 1;
}
}
diff --git a/globals.cginc b/globals.cginc
index 980a31a..b02507a 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -321,6 +321,10 @@ float4 _Matcap0Normal_ST;
float _Matcap0Normal_Str;
float _Matcap0Normal_UV_Select;
#endif
+float _Matcap0_Overwrite_Rim_Lighting_0;
+float _Matcap0_Overwrite_Rim_Lighting_1;
+float _Matcap0_Overwrite_Rim_Lighting_2;
+float _Matcap0_Overwrite_Rim_Lighting_3;
#endif
#if defined(_MATCAP1)
@@ -343,6 +347,10 @@ float4 _Matcap1Normal_ST;
float _Matcap1Normal_Str;
float _Matcap1Normal_UV_Select;
#endif
+float _Matcap1_Overwrite_Rim_Lighting_0;
+float _Matcap1_Overwrite_Rim_Lighting_1;
+float _Matcap1_Overwrite_Rim_Lighting_2;
+float _Matcap1_Overwrite_Rim_Lighting_3;
#endif
#if defined(_RIM_LIGHTING0)
diff --git a/tooner.shader b/tooner.shader
index 7eda029..80c1652 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -228,6 +228,10 @@ Shader "yum_food/tooner"
_Matcap0Normal("Matcap normals", 2D) = "bump" {}
_Matcap0Normal_Str("Matcap normals", Range(0, 10)) = 1
_Matcap0Normal_UV_Select("Matcap normals", Range(0, 3)) = 0
+ _Matcap0_Overwrite_Rim_Lighting_0("Overwrite RL", Float) = 0
+ _Matcap0_Overwrite_Rim_Lighting_1("Overwrite RL", Float) = 0
+ _Matcap0_Overwrite_Rim_Lighting_2("Overwrite RL", Float) = 0
+ _Matcap0_Overwrite_Rim_Lighting_3("Overwrite RL", Float) = 0
_Matcap1("Matcap", 2D) = "black" {}
_Matcap1_Mask("Matcap mask", 2D) = "white" {}
@@ -246,6 +250,10 @@ Shader "yum_food/tooner"
_Matcap1Normal("Matcap normals", 2D) = "bump" {}
_Matcap1Normal_Str("Matcap normals", Range(0, 10)) = 1
_Matcap1Normal_UV_Select("Matcap normals", Range(0, 3)) = 0
+ _Matcap1_Overwrite_Rim_Lighting_0("Overwrite RL", Float) = 0
+ _Matcap1_Overwrite_Rim_Lighting_1("Overwrite RL", Float) = 0
+ _Matcap1_Overwrite_Rim_Lighting_2("Overwrite RL", Float) = 0
+ _Matcap1_Overwrite_Rim_Lighting_3("Overwrite RL", Float) = 0
_Rim_Lighting0_Enabled("Enable rim lighting", Float) = 0
_Rim_Lighting0_Mode("Rim lighting mode", Float) = 0
@@ -491,7 +499,6 @@ Shader "yum_food/tooner"
#include "tooner_lighting.cginc"
ENDCG
}
- /*
Pass {
Tags {
"RenderType" = "Opaque"
@@ -562,7 +569,6 @@ Shader "yum_food/tooner"
#include "mochie_shadow_caster.cginc"
ENDCG
}
- */
}
CustomEditor "ToonerGUI"
}
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 34c1368..6267a2d 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -1266,7 +1266,7 @@ float4 effect(inout v2f i)
matcap_theta = atan2(matcap_uv.y - 0.5, matcap_uv.x - 0.5);
}
#endif
- float matcap_overwrite_mask = 0;
+ float4 matcap_overwrite_mask = 0;
#if defined(_MATCAP0) || defined(_MATCAP1)
{
#if defined(_MATCAP0)
@@ -1337,7 +1337,7 @@ float4 effect(inout v2f i)
albedo.rgb *= lerp(1, matcap, matcap_mask);
break;
case 2:
- matcap_overwrite_mask = max(matcap_mask, matcap_overwrite_mask);
+ matcap_overwrite_mask[0] = max(matcap_mask, matcap_overwrite_mask[0]);
albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);
matcap_emission = lerp(albedo.rgb, matcap, matcap_mask) * _Matcap0Emission;
break;
@@ -1427,7 +1427,7 @@ float4 effect(inout v2f i)
albedo.rgb *= lerp(1, matcap, matcap_mask);
break;
case 2:
- matcap_overwrite_mask = max(matcap_mask, matcap_overwrite_mask);
+ matcap_overwrite_mask[1] = max(matcap_mask, matcap_overwrite_mask[1]);
albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);
matcap_emission = lerp(albedo.rgb, matcap, matcap_mask) * _Matcap1Emission;
break;
@@ -1450,10 +1450,12 @@ float4 effect(inout v2f i)
#endif // _MATCAP1
}
#endif // _MATCAP0 || _MATCAP1
+ matcap_overwrite_mask = 1 - matcap_overwrite_mask;
// TODO get rid of the pow. It's a hack to make matcap replace mode look
// better with overlay tattoos.
- mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov, 1 - pow(matcap_overwrite_mask, 4));
+ mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov,
+ 1 - pow((1 - min(matcap_overwrite_mask[0], matcap_overwrite_mask[1])), 8));
#if defined(_DECAL0) || defined(_DECAL1) || defined(_DECAL2) || defined(_DECAL3)
float3 decal_emission = 0;
applyDecal(albedo, roughness, metallic, decal_emission, i);
@@ -1484,6 +1486,16 @@ float4 effect(inout v2f i)
#else
float matcap_mask = 1;
#endif
+#if defined(_MATCAP0)
+ if (_Matcap0_Overwrite_Rim_Lighting_0) {
+ matcap_mask *= matcap_overwrite_mask[0];
+ }
+#endif
+#if defined(_MATCAP1)
+ if (_Matcap1_Overwrite_Rim_Lighting_0) {
+ matcap_mask *= matcap_overwrite_mask[1];
+ }
+#endif
#if defined(_RIM_LIGHTING0_POLAR_MASK)
if (_Rim_Lighting0_PolarMask_Enabled) {
float pmask_theta = _Rim_Lighting0_PolarMask_Theta;
@@ -1548,6 +1560,16 @@ float4 effect(inout v2f i)
#else
float matcap_mask = 1;
#endif
+#if defined(_MATCAP0)
+ if (_Matcap0_Overwrite_Rim_Lighting_1) {
+ matcap_mask *= matcap_overwrite_mask[0];
+ }
+#endif
+#if defined(_MATCAP1)
+ if (_Matcap1_Overwrite_Rim_Lighting_1) {
+ matcap_mask *= matcap_overwrite_mask[1];
+ }
+#endif
#if defined(_RIM_LIGHTING1_POLAR_MASK)
if (_Rim_Lighting1_PolarMask_Enabled) {
float pmask_theta = _Rim_Lighting1_PolarMask_Theta;
@@ -1616,6 +1638,16 @@ float4 effect(inout v2f i)
#else
float matcap_mask = 1;
#endif
+#if defined(_MATCAP0)
+ if (_Matcap0_Overwrite_Rim_Lighting_2) {
+ matcap_mask *= matcap_overwrite_mask[0];
+ }
+#endif
+#if defined(_MATCAP1)
+ if (_Matcap1_Overwrite_Rim_Lighting_2) {
+ matcap_mask *= matcap_overwrite_mask[1];
+ }
+#endif
#if defined(_RIM_LIGHTING2_POLAR_MASK)
if (_Rim_Lighting2_PolarMask_Enabled) {
float pmask_theta = _Rim_Lighting2_PolarMask_Theta;
@@ -1684,6 +1716,16 @@ float4 effect(inout v2f i)
#else
float matcap_mask = 1;
#endif
+#if defined(_MATCAP0)
+ if (_Matcap0_Overwrite_Rim_Lighting_3) {
+ matcap_mask *= matcap_overwrite_mask[0];
+ }
+#endif
+#if defined(_MATCAP1)
+ if (_Matcap1_Overwrite_Rim_Lighting_3) {
+ matcap_mask *= matcap_overwrite_mask[1];
+ }
+#endif
#if defined(_RIM_LIGHTING3_POLAR_MASK)
if (_Rim_Lighting3_PolarMask_Enabled) {
float pmask_theta = _Rim_Lighting3_PolarMask_Theta;
@@ -1821,6 +1863,7 @@ float4 effect(inout v2f i)
#endif
#if defined(_GLITTER)
float glitter_mask = _Glitter_Mask.SampleGrad(linear_repeat_s, i.uv0, iddx, iddy);
+ glitter_mask *= min(matcap_overwrite_mask[0], matcap_overwrite_mask[1]);
float glitter = get_glitter(i.uv0, i.worldPos, normal,
_Glitter_Density, _Glitter_Amount, _Glitter_Speed,
glitter_mask, _Glitter_Brightness, _Glitter_Angle, _Glitter_Power);