summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-08-10 13:41:58 -0700
committeryum <yum.food.vr@gmail.com>2024-08-10 13:41:58 -0700
commit8948b000fb82cea4ce1d966a669daf68bfeb3166 (patch)
treec607bcd235dd2abf58a0eb2986d089027d5aff22
parent9035231332e55f9995618f3b65ab8b05d9b52023 (diff)
Implement metallics in PBR overlay
-rw-r--r--Editor/tooner.cs28
-rw-r--r--feature_macros.cginc4
-rw-r--r--globals.cginc24
-rw-r--r--tooner.shader4
-rw-r--r--tooner_lighting.cginc87
5 files changed, 117 insertions, 30 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 252dce9..01ab5a2 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -235,16 +235,26 @@ public class ToonerGUI : ShaderGUI {
}
SetKeyword($"_PBR_OVERLAY{i}_NORMAL_MAP", bct.textureValue);
- bc = FindProperty($"_PBR_Overlay{i}_Metallic");
- bct = FindProperty($"_PBR_Overlay{i}_MetallicTex");
- editor.TexturePropertySingleLine(
- MakeLabel(bct, "Metallic (RGBA)"),
- bct,
- bc);
- if (bct.textureValue) {
- editor.TextureScaleOffsetProperty(bct);
+ bc = FindProperty($"_PBR_Overlay{i}_Metallic_Enable");
+ enabled = bc.floatValue > 1E-6;
+ EditorGUI.BeginChangeCheck();
+ enabled = EditorGUILayout.Toggle("Enable metallic", enabled);
+ EditorGUI.EndChangeCheck();
+ bc.floatValue = enabled ? 1.0f : 0.0f;
+ SetKeyword($"_PBR_OVERLAY{i}_METALLIC", enabled);
+
+ if (enabled) {
+ bc = FindProperty($"_PBR_Overlay{i}_Metallic");
+ bct = FindProperty($"_PBR_Overlay{i}_MetallicTex");
+ editor.TexturePropertySingleLine(
+ MakeLabel(bct, "Metallic (RGBA)"),
+ bct,
+ bc);
+ if (bct.textureValue) {
+ editor.TextureScaleOffsetProperty(bct);
+ }
+ SetKeyword($"_PBR_OVERLAY{i}_METALLIC_MAP", bct.textureValue);
}
- SetKeyword($"_PBR_OVERLAY{i}_METALLIC_MAP", bct.textureValue);
bc = FindProperty($"_PBR_Overlay{i}_Roughness_Enable");
enabled = bc.floatValue > 1E-6;
diff --git a/feature_macros.cginc b/feature_macros.cginc
index 7012703..22e248c 100644
--- a/feature_macros.cginc
+++ b/feature_macros.cginc
@@ -39,6 +39,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY0_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_ROUGHNESS
#pragma shader_feature_local _ _PBR_OVERLAY0_ROUGHNESS_MAP
+#pragma shader_feature_local _ _PBR_OVERLAY0_METALLIC
#pragma shader_feature_local _ _PBR_OVERLAY0_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_MASK
#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_ALPHA_BLEND
@@ -53,6 +54,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY1_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_ROUGHNESS
#pragma shader_feature_local _ _PBR_OVERLAY1_ROUGHNESS_MAP
+#pragma shader_feature_local _ _PBR_OVERLAY1_METALLIC
#pragma shader_feature_local _ _PBR_OVERLAY1_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_MASK
#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_ALPHA_BLEND
@@ -67,6 +69,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY2_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_ROUGHNESS
#pragma shader_feature_local _ _PBR_OVERLAY2_ROUGHNESS_MAP
+#pragma shader_feature_local _ _PBR_OVERLAY2_METALLIC
#pragma shader_feature_local _ _PBR_OVERLAY2_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_MASK
#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_ALPHA_BLEND
@@ -81,6 +84,7 @@
#pragma shader_feature_local _ _PBR_OVERLAY3_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_ROUGHNESS
#pragma shader_feature_local _ _PBR_OVERLAY3_ROUGHNESS_MAP
+#pragma shader_feature_local _ _PBR_OVERLAY3_METALLIC
#pragma shader_feature_local _ _PBR_OVERLAY3_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_MASK
#pragma shader_feature_local _ _PBR_OVERLAY3_MIX_ALPHA_BLEND
diff --git a/globals.cginc b/globals.cginc
index bbc7a52..f709ff2 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -83,7 +83,11 @@ float4 _RoughnessTex_ST;
#if defined(_PBR_OVERLAY0)
float4 _PBR_Overlay0_BaseColor;
+#if defined(_PBR_OVERLAY0_METALLIC)
float _PBR_Overlay0_Metallic;
+texture2D _PBR_Overlay0_MetallicTex;
+float4 _PBR_Overlay0_MetallicTex_ST;
+#endif
#if defined(_PBR_OVERLAY0_ROUGHNESS)
float _PBR_Overlay0_Roughness;
texture2D _PBR_Overlay0_RoughnessTex;
@@ -96,8 +100,6 @@ texture2D _PBR_Overlay0_EmissionTex;
float4 _PBR_Overlay0_EmissionTex_ST;
texture2D _PBR_Overlay0_NormalTex;
float4 _PBR_Overlay0_NormalTex_ST;
-texture2D _PBR_Overlay0_MetallicTex;
-float4 _PBR_Overlay0_MetallicTex_ST;
float _PBR_Overlay0_Tex_NormalStr;
texture2D _PBR_Overlay0_Mask;
float _PBR_Overlay0_Mask_Invert;
@@ -111,7 +113,11 @@ float _PBR_Overlay0_Sampler_Mode;
#if defined(_PBR_OVERLAY1)
float4 _PBR_Overlay1_BaseColor;
+#if defined(_PBR_OVERLAY1_METALLIC)
float _PBR_Overlay1_Metallic;
+texture2D _PBR_Overlay1_MetallicTex;
+float4 _PBR_Overlay1_MetallicTex_ST;
+#endif
#if defined(_PBR_OVERLAY1_ROUGHNESS)
float _PBR_Overlay1_Roughness;
texture2D _PBR_Overlay1_RoughnessTex;
@@ -124,8 +130,6 @@ texture2D _PBR_Overlay1_EmissionTex;
float4 _PBR_Overlay1_EmissionTex_ST;
texture2D _PBR_Overlay1_NormalTex;
float4 _PBR_Overlay1_NormalTex_ST;
-texture2D _PBR_Overlay1_MetallicTex;
-float4 _PBR_Overlay1_MetallicTex_ST;
float _PBR_Overlay1_Tex_NormalStr;
texture2D _PBR_Overlay1_Mask;
float _PBR_Overlay1_Mask_Invert;
@@ -139,7 +143,11 @@ float _PBR_Overlay1_Sampler_Mode;
#if defined(_PBR_OVERLAY2)
float4 _PBR_Overlay2_BaseColor;
+#if defined(_PBR_OVERLAY2_METALLIC)
float _PBR_Overlay2_Metallic;
+texture2D _PBR_Overlay2_MetallicTex;
+float4 _PBR_Overlay2_MetallicTex_ST;
+#endif
#if defined(_PBR_OVERLAY2_ROUGHNESS)
float _PBR_Overlay2_Roughness;
texture2D _PBR_Overlay2_RoughnessTex;
@@ -152,8 +160,6 @@ texture2D _PBR_Overlay2_EmissionTex;
float4 _PBR_Overlay2_EmissionTex_ST;
texture2D _PBR_Overlay2_NormalTex;
float4 _PBR_Overlay2_NormalTex_ST;
-texture2D _PBR_Overlay2_MetallicTex;
-float4 _PBR_Overlay2_MetallicTex_ST;
float _PBR_Overlay2_Tex_NormalStr;
texture2D _PBR_Overlay2_Mask;
float _PBR_Overlay2_Mask_Invert;
@@ -167,7 +173,11 @@ float _PBR_Overlay2_Sampler_Mode;
#if defined(_PBR_OVERLAY3)
float4 _PBR_Overlay3_BaseColor;
+#if defined(_PBR_OVERLAY3_METALLIC)
float _PBR_Overlay3_Metallic;
+texture2D _PBR_Overlay3_MetallicTex;
+float4 _PBR_Overlay3_MetallicTex_ST;
+#endif
#if defined(_PBR_OVERLAY3_ROUGHNESS)
float _PBR_Overlay3_Roughness;
texture2D _PBR_Overlay3_RoughnessTex;
@@ -180,8 +190,6 @@ texture2D _PBR_Overlay3_EmissionTex;
float4 _PBR_Overlay3_EmissionTex_ST;
texture2D _PBR_Overlay3_NormalTex;
float4 _PBR_Overlay3_NormalTex_ST;
-texture2D _PBR_Overlay3_MetallicTex;
-float4 _PBR_Overlay3_MetallicTex_ST;
float _PBR_Overlay3_Tex_NormalStr;
texture2D _PBR_Overlay3_Mask;
float _PBR_Overlay3_Mask_Invert;
diff --git a/tooner.shader b/tooner.shader
index 49d02bd..0c19812 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -21,6 +21,7 @@ Shader "yum_food/tooner"
_PBR_Overlay0_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay0_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
+ _PBR_Overlay0_Metallic_Enable("Metallic enable", Float) = 0
_PBR_Overlay0_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay0_Roughness_Enable("Roughness enable", Float) = 0
_PBR_Overlay0_Roughness("Roughness", Range(0, 1)) = 1
@@ -43,6 +44,7 @@ Shader "yum_food/tooner"
_PBR_Overlay1_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay1_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
+ _PBR_Overlay1_Metallic_Enable("Metallic enable", Float) = 0
_PBR_Overlay1_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay1_Roughness_Enable("Roughness enable", Float) = 0
_PBR_Overlay1_Roughness("Roughness", Range(0, 1)) = 1
@@ -65,6 +67,7 @@ Shader "yum_food/tooner"
_PBR_Overlay2_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay2_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
+ _PBR_Overlay2_Metallic_Enable("Metallic enable", Float) = 0
_PBR_Overlay2_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay2_Roughness_Enable("Roughness enable", Float) = 0
_PBR_Overlay2_Roughness("Roughness", Range(0, 1)) = 1
@@ -87,6 +90,7 @@ Shader "yum_food/tooner"
_PBR_Overlay3_Enable("Enable PBR overlay", Float) = 0.0
_PBR_Overlay3_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1)
+ _PBR_Overlay3_Metallic_Enable("Metallic enable", Float) = 0
_PBR_Overlay3_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay3_Roughness_Enable("Roughness enable", Float) = 0
_PBR_Overlay3_Roughness("Roughness", Range(0, 1)) = 1
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index a48d823..1100809 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -555,6 +555,9 @@ struct PbrOverlay {
#if defined(_PBR_OVERLAY0_ROUGHNESS)
float ov0_roughness;
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+ float ov0_metallic;
+#endif
float ov0_mask;
#endif
#if defined(_PBR_OVERLAY1)
@@ -562,6 +565,9 @@ struct PbrOverlay {
#if defined(_PBR_OVERLAY1_ROUGHNESS)
float ov1_roughness;
#endif
+#if defined(_PBR_OVERLAY1_METALLIC)
+ float ov1_metallic;
+#endif
float ov1_mask;
#endif
#if defined(_PBR_OVERLAY2)
@@ -569,6 +575,9 @@ struct PbrOverlay {
#if defined(_PBR_OVERLAY2_ROUGHNESS)
float ov2_roughness;
#endif
+#if defined(_PBR_OVERLAY2_METALLIC)
+ float ov2_metallic;
+#endif
float ov2_mask;
#endif
#if defined(_PBR_OVERLAY3)
@@ -576,11 +585,14 @@ struct PbrOverlay {
#if defined(_PBR_OVERLAY3_ROUGHNESS)
float ov3_roughness;
#endif
+#if defined(_PBR_OVERLAY3_METALLIC)
+ float ov3_metallic;
+#endif
float ov3_mask;
#endif
};
-void getOverlayAlbedoRoughness(inout PbrOverlay ov,
+void getOverlayAlbedoRoughnessMetallic(inout PbrOverlay ov,
v2f i, float iddx, float iddy)
{
#if defined(_PBR_OVERLAY0)
@@ -600,6 +612,15 @@ void getOverlayAlbedoRoughness(inout PbrOverlay ov,
#endif // _PBR_OVERLAY0_ROUGHNESS_MAP
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+#if defined(_PBR_OVERLAY0_METALLIC_MAP)
+ ov.ov0_metallic = _PBR_Overlay0_MetallicTex.SampleGrad(GET_SAMPLER_OV0, UV_SCOFF(i, _PBR_Overlay0_MetallicTex_ST, _PBR_Overlay0_UV_Select), iddx * _PBR_Overlay0_MetallicTex_ST.x, iddy * _PBR_Overlay0_MetallicTex_ST.y);
+ ov.ov0_metallic *= _PBR_Overlay0_Metallic;
+#else
+ ov.ov0_metallic = _PBR_Overlay0_Metallic;
+#endif // _PBR_OVERLAY0_METALLIC_MAP
+#endif
+
#if defined(_PBR_OVERLAY0_MASK)
ov.ov0_mask = _PBR_Overlay0_Mask.SampleGrad(GET_SAMPLER_OV0, i.uv0, iddx, iddy);
ov.ov0_mask = ((bool) round(_PBR_Overlay0_Mask_Invert)) ? 1.0 - ov.ov0_mask : ov.ov0_mask;
@@ -619,13 +640,22 @@ void getOverlayAlbedoRoughness(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY1_ROUGHNESS)
#if defined(_PBR_OVERLAY1_ROUGHNESS_MAP)
- ov.ov0_roughness = _PBR_Overlay1_RoughnessTex.SampleGrad(GET_SAMPLER_OV1, UV_SCOFF(i, _PBR_Overlay1_RoughnessTex_ST, _PBR_Overlay1_UV_Select), iddx * _PBR_Overlay1_RoughnessTex_ST.x, iddy * _PBR_Overlay1_RoughnessTex_ST.y);
- ov.ov0_roughness *= _PBR_Overlay1_Roughness;
+ ov.ov1_roughness = _PBR_Overlay1_RoughnessTex.SampleGrad(GET_SAMPLER_OV1, UV_SCOFF(i, _PBR_Overlay1_RoughnessTex_ST, _PBR_Overlay1_UV_Select), iddx * _PBR_Overlay1_RoughnessTex_ST.x, iddy * _PBR_Overlay1_RoughnessTex_ST.y);
+ ov.ov1_roughness *= _PBR_Overlay1_Roughness;
#else
- ov.ov0_roughness = _PBR_Overlay1_Roughness;
+ ov.ov1_roughness = _PBR_Overlay1_Roughness;
#endif // _PBR_OVERLAY1_ROUGHNESS_MAP
#endif
+#if defined(_PBR_OVERLAY1_METALLIC)
+#if defined(_PBR_OVERLAY1_METALLIC_MAP)
+ ov.ov1_metallic = _PBR_Overlay1_MetallicTex.SampleGrad(GET_SAMPLER_OV1, UV_SCOFF(i, _PBR_Overlay1_MetallicTex_ST, _PBR_Overlay1_UV_Select), iddx * _PBR_Overlay1_MetallicTex_ST.x, iddy * _PBR_Overlay1_MetallicTex_ST.y);
+ ov.ov1_metallic *= _PBR_Overlay1_Metallic;
+#else
+ ov.ov1_metallic = _PBR_Overlay1_Metallic;
+#endif // _PBR_OVERLAY1_METALLIC_MAP
+#endif
+
#if defined(_PBR_OVERLAY1_MASK)
ov.ov1_mask = _PBR_Overlay1_Mask.SampleGrad(GET_SAMPLER_OV1, i.uv0, iddx, iddy);
ov.ov1_mask = ((bool) round(_PBR_Overlay1_Mask_Invert)) ? 1.0 - ov.ov1_mask : ov.ov1_mask;
@@ -645,13 +675,22 @@ void getOverlayAlbedoRoughness(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY2_ROUGHNESS)
#if defined(_PBR_OVERLAY2_ROUGHNESS_MAP)
- ov.ov0_roughness = _PBR_Overlay2_RoughnessTex.SampleGrad(GET_SAMPLER_OV2, UV_SCOFF(i, _PBR_Overlay2_RoughnessTex_ST, _PBR_Overlay2_UV_Select), iddx * _PBR_Overlay2_RoughnessTex_ST.x, iddy * _PBR_Overlay2_RoughnessTex_ST.y);
- ov.ov0_roughness *= _PBR_Overlay2_Roughness;
+ ov.ov2_roughness = _PBR_Overlay2_RoughnessTex.SampleGrad(GET_SAMPLER_OV2, UV_SCOFF(i, _PBR_Overlay2_RoughnessTex_ST, _PBR_Overlay2_UV_Select), iddx * _PBR_Overlay2_RoughnessTex_ST.x, iddy * _PBR_Overlay2_RoughnessTex_ST.y);
+ ov.ov2_roughness *= _PBR_Overlay2_Roughness;
#else
- ov.ov0_roughness = _PBR_Overlay2_Roughness;
+ ov.ov2_roughness = _PBR_Overlay2_Roughness;
#endif // _PBR_OVERLAY2_ROUGHNESS_MAP
#endif
+#if defined(_PBR_OVERLAY2_METALLIC)
+#if defined(_PBR_OVERLAY2_METALLIC_MAP)
+ ov.ov2_metallic = _PBR_Overlay2_MetallicTex.SampleGrad(GET_SAMPLER_OV2, UV_SCOFF(i, _PBR_Overlay2_MetallicTex_ST, _PBR_Overlay2_UV_Select), iddx * _PBR_Overlay2_MetallicTex_ST.x, iddy * _PBR_Overlay2_MetallicTex_ST.y);
+ ov.ov2_metallic *= _PBR_Overlay2_Metallic;
+#else
+ ov.ov2_metallic = _PBR_Overlay2_Metallic;
+#endif // _PBR_OVERLAY2_METALLIC_MAP
+#endif
+
#if defined(_PBR_OVERLAY2_MASK)
ov.ov2_mask = _PBR_Overlay2_Mask.SampleGrad(GET_SAMPLER_OV2, i.uv0, iddx, iddy);
ov.ov2_mask = ((bool) round(_PBR_Overlay2_Mask_Invert)) ? 1.0 - ov.ov2_mask : ov.ov2_mask;
@@ -671,13 +710,22 @@ void getOverlayAlbedoRoughness(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY3_ROUGHNESS)
#if defined(_PBR_OVERLAY3_ROUGHNESS_MAP)
- ov.ov0_roughness = _PBR_Overlay3_RoughnessTex.SampleGrad(GET_SAMPLER_OV3, UV_SCOFF(i, _PBR_Overlay3_RoughnessTex_ST, _PBR_Overlay3_UV_Select), iddx * _PBR_Overlay3_RoughnessTex_ST.x, iddy * _PBR_Overlay3_RoughnessTex_ST.y);
- ov.ov0_roughness *= _PBR_Overlay3_Roughness;
+ ov.ov3_roughness = _PBR_Overlay3_RoughnessTex.SampleGrad(GET_SAMPLER_OV3, UV_SCOFF(i, _PBR_Overlay3_RoughnessTex_ST, _PBR_Overlay3_UV_Select), iddx * _PBR_Overlay3_RoughnessTex_ST.x, iddy * _PBR_Overlay3_RoughnessTex_ST.y);
+ ov.ov3_roughness *= _PBR_Overlay3_Roughness;
#else
- ov.ov0_roughness = _PBR_Overlay3_Roughness;
+ ov.ov3_roughness = _PBR_Overlay3_Roughness;
#endif // _PBR_OVERLAY3_ROUGHNESS_MAP
#endif
+#if defined(_PBR_OVERLAY3_METALLIC)
+#if defined(_PBR_OVERLAY3_METALLIC_MAP)
+ ov.ov3_metallic = _PBR_Overlay3_MetallicTex.SampleGrad(GET_SAMPLER_OV3, UV_SCOFF(i, _PBR_Overlay3_MetallicTex_ST, _PBR_Overlay3_UV_Select), iddx * _PBR_Overlay3_MetallicTex_ST.x, iddy * _PBR_Overlay3_MetallicTex_ST.y);
+ ov.ov3_metallic *= _PBR_Overlay3_Metallic;
+#else
+ ov.ov3_metallic = _PBR_Overlay3_Metallic;
+#endif // _PBR_OVERLAY3_METALLIC_MAP
+#endif
+
#if defined(_PBR_OVERLAY3_MASK)
ov.ov3_mask = _PBR_Overlay3_Mask.SampleGrad(GET_SAMPLER_OV3, i.uv0, iddx, iddy);
ov.ov3_mask = ((bool) round(_PBR_Overlay3_Mask_Invert)) ? 1.0 - ov.ov3_mask : ov.ov3_mask;
@@ -844,7 +892,8 @@ void applyDecal(inout float4 albedo,
#endif // _DECAL3
}
-void mixOverlayAlbedoRoughness(inout float4 albedo, inout float roughness, PbrOverlay ov) {
+void mixOverlayAlbedoRoughnessMetallic(inout float4 albedo,
+ inout float roughness, inout float metallic, PbrOverlay ov) {
// Calculate alpha masks before we start mutating alpha.
#if defined(_PBR_OVERLAY0)
float a0 = saturate(ov.ov0_albedo.a * _PBR_Overlay0_Alpha_Multiplier);
@@ -885,6 +934,9 @@ void mixOverlayAlbedoRoughness(inout float4 albedo, inout float roughness, PbrOv
#if defined(_PBR_OVERLAY0_ROUGHNESS)
roughness = lerp(roughness, ov.ov0_roughness, a0);
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+ metallic = lerp(metallic, ov.ov0_metallic, a0);
+#endif
albedo.a = max(albedo.a, a0);
#elif defined(_PBR_OVERLAY0_MIX_ADD)
albedo.rgb += ov.ov0_albedo;
@@ -901,6 +953,9 @@ void mixOverlayAlbedoRoughness(inout float4 albedo, inout float roughness, PbrOv
#if defined(_PBR_OVERLAY0_ROUGHNESS)
roughness = lerp(roughness, ov.ov1_roughness, a1);
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+ metallic = lerp(metallic, ov.ov1_metallic, a1);
+#endif
albedo.a = max(albedo.a, a1);
#elif defined(_PBR_OVERLAY1_MIX_ADD)
albedo.rgb += ov.ov1_albedo;
@@ -917,6 +972,9 @@ void mixOverlayAlbedoRoughness(inout float4 albedo, inout float roughness, PbrOv
#if defined(_PBR_OVERLAY0_ROUGHNESS)
roughness = lerp(roughness, ov.ov2_roughness, a2);
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+ metallic = lerp(metallic, ov.ov2_metallic, a2);
+#endif
albedo.a = max(albedo.a, a2);
#elif defined(_PBR_OVERLAY2_MIX_ADD)
albedo.rgb += ov.ov2_albedo;
@@ -933,6 +991,9 @@ void mixOverlayAlbedoRoughness(inout float4 albedo, inout float roughness, PbrOv
#if defined(_PBR_OVERLAY0_ROUGHNESS)
roughness = lerp(roughness, ov.ov3_roughness, a3);
#endif
+#if defined(_PBR_OVERLAY0_METALLIC)
+ metallic = lerp(metallic, ov.ov3_metallic, a3);
+#endif
albedo.a = max(albedo.a, a3);
#elif defined(_PBR_OVERLAY3_MIX_ADD)
albedo.rgb += ov.ov3_albedo;
@@ -1139,7 +1200,7 @@ float4 effect(inout v2f i)
#endif
PbrOverlay ov;
- getOverlayAlbedoRoughness(ov, i, iddx, iddy);
+ getOverlayAlbedoRoughnessMetallic(ov, i, iddx, iddy);
#if defined(_NORMAL_MAP)
// Use UVs to smoothly blend between fully detailed normals when close up and
@@ -1345,7 +1406,7 @@ float4 effect(inout v2f i)
}
#endif // _MATCAP0 || _MATCAP1
- mixOverlayAlbedoRoughness(albedo, roughness, ov);
+ mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov);
#if defined(_DECAL0) || defined(_DECAL1) || defined(_DECAL2) || defined(_DECAL3)
float3 decal_emission = 0;
applyDecal(albedo, roughness, metallic, decal_emission, i);