diff options
| author | yum <yum.food.vr@gmail.com> | 2024-11-26 02:43:54 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-11-26 02:43:54 -0800 |
| commit | 625b8130fd394b1af29e1bee43cb236190666ee5 (patch) | |
| tree | 14632a1df08bdbaccc6cabc76960a2b77119aa5b | |
| parent | 8bc2ce35d518a37cc07fba23613d85822c9c0ea6 (diff) | |
Add multiply mode to pbr overlays
| -rw-r--r-- | Editor/tooner.cs | 5 | ||||
| -rw-r--r-- | feature_macros.cginc | 4 | ||||
| -rw-r--r-- | pbr.cginc | 4 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 8 |
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 @@ -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 } |
