diff options
| author | yum <yum.food.vr@gmail.com> | 2024-08-10 13:41:58 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-08-10 13:41:58 -0700 |
| commit | 8948b000fb82cea4ce1d966a669daf68bfeb3166 (patch) | |
| tree | c607bcd235dd2abf58a0eb2986d089027d5aff22 | |
| parent | 9035231332e55f9995618f3b65ab8b05d9b52023 (diff) | |
Implement metallics in PBR overlay
| -rw-r--r-- | Editor/tooner.cs | 28 | ||||
| -rw-r--r-- | feature_macros.cginc | 4 | ||||
| -rw-r--r-- | globals.cginc | 24 | ||||
| -rw-r--r-- | tooner.shader | 4 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 87 |
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); |
