summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-11-26 02:43:54 -0800
committeryum <yum.food.vr@gmail.com>2024-11-26 02:43:54 -0800
commit625b8130fd394b1af29e1bee43cb236190666ee5 (patch)
tree14632a1df08bdbaccc6cabc76960a2b77119aa5b
parent8bc2ce35d518a37cc07fba23613d85822c9c0ea6 (diff)
Add multiply mode to pbr overlays
-rw-r--r--Editor/tooner.cs5
-rw-r--r--feature_macros.cginc4
-rw-r--r--pbr.cginc4
-rw-r--r--tooner_lighting.cginc8
4 files changed, 19 insertions, 2 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 18aeaf7..3a158c8 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -322,7 +322,8 @@ public class ToonerGUI : ShaderGUI {
AlphaBlend,
Add,
Min,
- Max
+ Max,
+ Multiply
};
void DoPBROverlay() {
@@ -367,6 +368,7 @@ public class ToonerGUI : ShaderGUI {
SetKeyword($"_PBR_OVERLAY{i}_MIX_ADD", mode == PbrAlbedoMixMode.Add);
SetKeyword($"_PBR_OVERLAY{i}_MIX_MIN", mode == PbrAlbedoMixMode.Min);
SetKeyword($"_PBR_OVERLAY{i}_MIX_MAX", mode == PbrAlbedoMixMode.Max);
+ SetKeyword($"_PBR_OVERLAY{i}_MIX_MULTIPLY", mode == PbrAlbedoMixMode.Multiply);
bc = FindProperty($"_PBR_Overlay{i}_Constrain_By_Alpha");
enabled = bc.floatValue > 1E-6;
@@ -501,6 +503,7 @@ public class ToonerGUI : ShaderGUI {
SetKeyword($"_PBR_OVERLAY{i}_MIX_ADD", false);
SetKeyword($"_PBR_OVERLAY{i}_MIX_MIN", false);
SetKeyword($"_PBR_OVERLAY{i}_MIX_MAX", false);
+ SetKeyword($"_PBR_OVERLAY{i}_MIX_MULTIPLY", false);
SetKeyword($"_PBR_OVERLAY{i}_EMISSION_MAP", false);
SetKeyword($"_PBR_OVERLAY{i}_NORMAL_MAP", false);
SetKeyword($"_PBR_OVERLAY{i}_METALLIC_MAP", false);
diff --git a/feature_macros.cginc b/feature_macros.cginc
index ec4c546..c0637c4 100644
--- a/feature_macros.cginc
+++ b/feature_macros.cginc
@@ -103,6 +103,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_ADD
#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_MIN
#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_MAX
+#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_MULTIPLY
#pragma shader_feature_local _ _PBR_OVERLAY0_SAMPLER_LINEAR_REPEAT
#pragma shader_feature_local _ _PBR_OVERLAY0_SAMPLER_LINEAR_CLAMP
#pragma shader_feature_local _ _PBR_OVERLAY0_SAMPLER_POINT_REPEAT
@@ -122,6 +123,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_ADD
#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_MIN
#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_MAX
+#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_MULTIPLY
#pragma shader_feature_local _ _PBR_OVERLAY1_SAMPLER_LINEAR_REPEAT
#pragma shader_feature_local _ _PBR_OVERLAY1_SAMPLER_LINEAR_CLAMP
#pragma shader_feature_local _ _PBR_OVERLAY1_SAMPLER_POINT_REPEAT
@@ -141,6 +143,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_ADD
#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_MIN
#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_MAX
+#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_MULTIPLY
#pragma shader_feature_local _ _PBR_OVERLAY2_SAMPLER_LINEAR_REPEAT
#pragma shader_feature_local _ _PBR_OVERLAY2_SAMPLER_LINEAR_CLAMP
#pragma shader_feature_local _ _PBR_OVERLAY2_SAMPLER_POINT_REPEAT
@@ -160,6 +163,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY3_MIX_ADD
#pragma shader_feature_local _ _PBR_OVERLAY3_MIX_MIN
#pragma shader_feature_local _ _PBR_OVERLAY3_MIX_MAX
+#pragma shader_feature_local _ _PBR_OVERLAY3_MIX_MULTIPLY
#pragma shader_feature_local _ _PBR_OVERLAY3_SAMPLER_LINEAR_REPEAT
#pragma shader_feature_local _ _PBR_OVERLAY3_SAMPLER_LINEAR_CLAMP
#pragma shader_feature_local _ _PBR_OVERLAY3_SAMPLER_POINT_REPEAT
diff --git a/pbr.cginc b/pbr.cginc
index c4eff6b..42a480e 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -276,12 +276,14 @@ float4 getLitColor(
// Do this to avoid division by 0. If both light sources are black,
// sum_brightness could be 0;
#if defined(_BRIGHTNESS_CLAMP)
- brightnesses = smooth_max(brightnesses, _Min_Brightness);
+ //brightnesses = smooth_max(brightnesses, _Min_Brightness);
+ brightnesses = max(brightnesses, _Min_Brightness);
#endif
float sum_brightness = brightnesses[0] + brightnesses[1];
float2 brightness_proportions = brightnesses / sum_brightness;
#if defined(_BRIGHTNESS_CLAMP)
sum_brightness = smooth_clamp(sum_brightness, _Min_Brightness, _Max_Brightness);
+ //sum_brightness = clamp(sum_brightness, _Min_Brightness, _Max_Brightness);
#endif
direct_light.color[2] = sum_brightness * brightness_proportions[0];
indirect_light.diffuse[2] = sum_brightness * brightness_proportions[1];
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 72b5827..cfe8f32 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -1167,6 +1167,8 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, ov.ov0_albedo), mask * ov.ov0_mask);
#elif defined(_PBR_OVERLAY0_MIX_MAX)
albedo.rgb = max(albedo.rgb, ov.ov0_albedo * mask * ov.ov0_mask);
+#elif defined(_PBR_OVERLAY0_MIX_MULTIPLY)
+ albedo.rgb = lerp(albedo.rgb, albedo.rgb * ov.ov0_albedo, mask * ov.ov0_mask);
#endif
#endif
@@ -1186,6 +1188,8 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, ov.ov1_albedo), mask * ov.ov1_mask);
#elif defined(_PBR_OVERLAY1_MIX_MAX)
albedo.rgb = max(albedo.rgb, ov.ov1_albedo * mask * ov.ov1_mask);
+#elif defined(_PBR_OVERLAY1_MIX_MULTIPLY)
+ albedo.rgb = lerp(albedo.rgb, albedo.rgb * ov.ov1_albedo, mask * ov.ov1_mask);
#endif
#endif
@@ -1205,6 +1209,8 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, ov.ov2_albedo), mask * ov.ov2_mask);
#elif defined(_PBR_OVERLAY2_MIX_MAX)
albedo.rgb = max(albedo.rgb, ov.ov2_albedo * mask * ov.ov2_mask);
+#elif defined(_PBR_OVERLAY2_MIX_MULTIPLY)
+ albedo.rgb = lerp(albedo.rgb, albedo.rgb * ov.ov2_albedo, mask * ov.ov2_mask);
#endif
#endif
@@ -1224,6 +1230,8 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, ov.ov3_albedo), mask * ov.ov3_mask);
#elif defined(_PBR_OVERLAY3_MIX_MAX)
albedo.rgb = max(albedo.rgb, ov.ov3_albedo * mask * ov.ov3_mask);
+#elif defined(_PBR_OVERLAY3_MIX_MULTIPLY)
+ albedo.rgb = lerp(albedo.rgb, albedo.rgb * ov.ov3_albedo, mask * ov.ov3_mask);
#endif
#endif
}