summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-10-01 12:24:10 -0700
committeryum <yum.food.vr@gmail.com>2024-10-01 12:24:10 -0700
commit77653b614a7285092973f0599a7d50a63b6d099f (patch)
treea521010f104f1c6294de7f2cb9a83c3a2ee3f0d6
parent05ced295f10887c6b809ea43dab6cdd77e1fca8f (diff)
PBR overlays can now overwrite glitter
-rw-r--r--Editor/tooner.cs7
-rw-r--r--globals.cginc4
-rw-r--r--tooner.shader4
-rw-r--r--tooner_lighting.cginc16
4 files changed, 27 insertions, 4 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index ae51ae5..537de6c 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -387,6 +387,13 @@ public class ToonerGUI : ShaderGUI {
bc,
"UV channel");
+ bc = FindProperty($"_PBR_Overlay{i}_Mask_Glitter");
+ enabled = bc.floatValue > 1E-6;
+ EditorGUI.BeginChangeCheck();
+ enabled = EditorGUILayout.Toggle("Mask glitter", enabled);
+ EditorGUI.EndChangeCheck();
+ bc.floatValue = enabled ? 1.0f : 0.0f;
+
EditorGUI.BeginChangeCheck();
bc = FindProperty($"_PBR_Overlay{i}_Sampler_Mode");
SamplerMode sampler_mode = (SamplerMode) Math.Round(bc.floatValue);
diff --git a/globals.cginc b/globals.cginc
index 630d950..fd7c029 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -133,6 +133,7 @@ float _PBR_Overlay0_Alpha_Multiplier;
float _PBR_Overlay0_UV_Select;
float _PBR_Overlay0_Sampler_Mode;
float _PBR_Overlay0_Mip_Bias;
+float _PBR_Overlay0_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY1)
@@ -164,6 +165,7 @@ float _PBR_Overlay1_Alpha_Multiplier;
float _PBR_Overlay1_UV_Select;
float _PBR_Overlay1_Sampler_Mode;
float _PBR_Overlay1_Mip_Bias;
+float _PBR_Overlay1_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY2)
@@ -195,6 +197,7 @@ float _PBR_Overlay2_Alpha_Multiplier;
float _PBR_Overlay2_UV_Select;
float _PBR_Overlay2_Sampler_Mode;
float _PBR_Overlay2_Mip_Bias;
+float _PBR_Overlay2_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY3)
@@ -226,6 +229,7 @@ float _PBR_Overlay3_Alpha_Multiplier;
float _PBR_Overlay3_UV_Select;
float _PBR_Overlay3_Sampler_Mode;
float _PBR_Overlay3_Mip_Bias;
+float _PBR_Overlay3_Mask_Glitter;
#endif
#if defined(_DECAL0)
diff --git a/tooner.shader b/tooner.shader
index ddfc5b1..eb42cdf 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -50,6 +50,7 @@ Shader "yum_food/tooner"
_PBR_Overlay0_UV_Select("UV channel", Range(0,7)) = 0
_PBR_Overlay0_Sampler_Mode("Sampler mode", Range(0,1)) = 0
_PBR_Overlay0_Mip_Bias("Mip bias", Float) = 0.0
+ _PBR_Overlay0_Mask_Glitter("Mask glitter", Float) = 0.0
_PBR_Overlay1_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay1_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
@@ -74,6 +75,7 @@ Shader "yum_food/tooner"
_PBR_Overlay1_UV_Select("UV channel", Range(0,7)) = 0
_PBR_Overlay1_Sampler_Mode("Sampler mode", Range(0,1)) = 0
_PBR_Overlay1_Mip_Bias("Mip bias", Float) = 0.0
+ _PBR_Overlay1_Mask_Glitter("Mask glitter", Float) = 0.0
_PBR_Overlay2_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay2_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
@@ -98,6 +100,7 @@ Shader "yum_food/tooner"
_PBR_Overlay2_UV_Select("UV channel", Range(0,7)) = 0
_PBR_Overlay2_Sampler_Mode("Sampler mode", Range(0,1)) = 0
_PBR_Overlay2_Mip_Bias("Mip bias", Float) = 0.0
+ _PBR_Overlay2_Mask_Glitter("Mask glitter", Float) = 0.0
_PBR_Overlay3_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay3_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
@@ -122,6 +125,7 @@ Shader "yum_food/tooner"
_PBR_Overlay3_UV_Select("UV channel", Range(0,7)) = 0
_PBR_Overlay3_Sampler_Mode("Sampler mode", Range(0,1)) = 0
_PBR_Overlay3_Mip_Bias("Mip bias", Float) = 0.0
+ _PBR_Overlay3_Mask_Glitter("Mask glitter", Float) = 0.0
_Decal0_Enable("Enable decal", Float) = 0.0
_Decal0_BaseColor("Base color", 2D) = "white" {}
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 7c2028d..23804a4 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -1009,7 +1009,8 @@ void applyDecal(inout float4 albedo,
void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
inout float roughness, inout float metallic, PbrOverlay ov,
- float mask) {
+ float mask, out float glitter_mask) {
+ glitter_mask = 1;
// Calculate alpha masks before we start mutating alpha.
#if defined(_PBR_OVERLAY0)
float a0 = saturate(ov.ov0_albedo.a * _PBR_Overlay0_Alpha_Multiplier);
@@ -1020,6 +1021,7 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
}
a0 *= mask;
a0 *= ov.ov0_mask;
+ glitter_mask *= 1 - a0 * _PBR_Overlay0_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY1)
float a1 = saturate(ov.ov1_albedo.a * _PBR_Overlay1_Alpha_Multiplier);
@@ -1030,6 +1032,7 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
}
a1 *= mask;
a1 *= ov.ov1_mask;
+ glitter_mask *= 1 - a1 * _PBR_Overlay1_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY2)
float a2 = saturate(ov.ov2_albedo.a * _PBR_Overlay2_Alpha_Multiplier);
@@ -1040,6 +1043,7 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
}
a2 *= mask;
a2 *= ov.ov2_mask;
+ glitter_mask *= 1 - a2 * _PBR_Overlay2_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY3)
float a3 = saturate(ov.ov3_albedo.a * _PBR_Overlay3_Alpha_Multiplier);
@@ -1050,6 +1054,7 @@ void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
}
a3 *= mask;
a3 *= ov.ov3_mask;
+ glitter_mask *= 1 - a3 * _PBR_Overlay3_Mask_Glitter;
#endif
#if defined(_PBR_OVERLAY0)
@@ -1654,8 +1659,10 @@ float4 effect(inout v2f i)
// TODO get rid of the pow. It's a hack to make matcap replace mode look
// better with overlay tattoos.
+ float overlay_glitter_mask;
mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov,
- 1 - pow((1 - min(matcap_overwrite_mask[0], matcap_overwrite_mask[1])), 8));
+ 1 - pow((1 - min(matcap_overwrite_mask[0], matcap_overwrite_mask[1])), 8),
+ overlay_glitter_mask);
#if defined(_DECAL0) || defined(_DECAL1) || defined(_DECAL2) || defined(_DECAL3)
float3 decal_emission = 0;
applyDecal(albedo, roughness, metallic, decal_emission, i);
@@ -2187,9 +2194,10 @@ float4 effect(inout v2f i)
#if defined(_GLITTER)
float3 glitter_color_unlit;
{
-
- float glitter_mask = _Glitter_Mask.SampleLevel(linear_repeat_s, i.uv0, /*lod=*/0);
+ float glitter_mask =
+ _Glitter_Mask.SampleLevel(linear_repeat_s, i.uv0, /*lod=*/0);
glitter_mask *= min(matcap_overwrite_mask[0], matcap_overwrite_mask[1]);
+ glitter_mask *= overlay_glitter_mask;
float glitter = get_glitter(
get_uv_by_channel(i, round(_Glitter_UV_Select)),
i.worldPos, i.centerCamPos, normal,