From da7da66c3e8541f0e6209e0cad0bea2792c07e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Tue, 2 Jun 2020 12:36:43 +0200 Subject: [PATCH 1/3] Added clear coat setting in HD Lit target --- .../Editor/Material/Lit/ShaderGraph/HDLitData.cs | 8 ++++++++ .../Lit/ShaderGraph/HDLitSubTarget.Migration.cs | 15 +++++++++++++++ .../Material/Lit/ShaderGraph/HDLitSubTarget.cs | 5 +++-- .../Material/Lit/ShaderGraph/LitPass.template | 5 ++++- .../ShaderGraph/LitSurfaceOptionPropertyBlock.cs | 1 + .../Editor/ShaderGraph/HDFields.cs | 1 + 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs index c3e2497f874..92e2235296f 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs @@ -66,5 +66,13 @@ public bool energyConservingSpecular get => m_EnergyConservingSpecular; set => m_EnergyConservingSpecular = value; } + + [SerializeField] + bool m_CoatMask = false; + public bool coatMask + { + get => m_CoatMask; + set => m_CoatMask = value; + } } } diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs index 70352a6a493..e394f32fe2e 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs @@ -49,6 +49,7 @@ void UpgradePBRMasterNode(PBRMasterNode1 pbrMasterNode, out Dictionary(coatMaskSlotId); + if(coatMaskSlot == null) + return false; + + coatMaskSlot.owner = node; + return (coatMaskSlot.isConnected || coatMaskSlot.value > 0.0f); + } + // Set blockmap blockMap = new Dictionary(); diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.cs index 132a50d6c4a..b47aeedfc8e 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.cs @@ -84,7 +84,8 @@ public override void GetFields(ref TargetFieldContext context) // Misc context.AddField(HDFields.EnergyConservingSpecular, litData.energyConservingSpecular); - context.AddField(HDFields.CoatMask, context.blocks.Contains(HDBlockFields.SurfaceDescription.CoatMask) && context.pass.validPixelBlocks.Contains(HDBlockFields.SurfaceDescription.CoatMask)); + context.AddField(HDFields.CoatMask, context.blocks.Contains(HDBlockFields.SurfaceDescription.CoatMask) && context.pass.validPixelBlocks.Contains(HDBlockFields.SurfaceDescription.CoatMask) && litData.coatMask); + context.AddField(HDFields.ClearCoat, litData.coatMask); // Enable clear coat material feature context.AddField(HDFields.Tangent, context.blocks.Contains(HDBlockFields.SurfaceDescription.Tangent) && context.pass.validPixelBlocks.Contains(HDBlockFields.SurfaceDescription.Tangent)); context.AddField(HDFields.RayTracing, litData.rayTracing); } @@ -99,7 +100,7 @@ public override void GetActiveBlocks(ref TargetActiveBlockContext context) AddDistortionBlocks(ref context); // Common - context.AddBlock(HDBlockFields.SurfaceDescription.CoatMask); + context.AddBlock(HDBlockFields.SurfaceDescription.CoatMask, litData.coatMask); // Refraction context.AddBlock(HDBlockFields.SurfaceDescription.RefractionIndex, hasRefraction); diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitPass.template b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitPass.template index a4bd44baa9c..fd69ae98c17 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitPass.template +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitPass.template @@ -30,6 +30,7 @@ Pass $Material.Anisotropy: #define _MATERIAL_FEATURE_ANISOTROPY 1 $Material.Iridescence: #define _MATERIAL_FEATURE_IRIDESCENCE 1 $Material.SpecularColor: #define _MATERIAL_FEATURE_SPECULAR_COLOR 1 + $Material.ClearCoat: #define _MATERIAL_FEATURE_CLEAR_COAT $AmbientOcclusion: #define _AMBIENT_OCCLUSION 1 $SpecularOcclusionFromAO: #define _SPECULAR_OCCLUSION_FROM_AO 1 $SpecularOcclusionFromAOBentNormal: #define _SPECULAR_OCCLUSION_FROM_AO_BENT_NORMAL 1 @@ -207,7 +208,9 @@ Pass surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SPECULAR_COLOR; #endif - $CoatMask: surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_CLEAR_COAT; + #ifdef _MATERIAL_FEATURE_CLEAR_COAT + surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_CLEAR_COAT; + #endif #if defined (_MATERIAL_FEATURE_SPECULAR_COLOR) && defined (_ENERGY_CONSERVING_SPECULAR) // Require to have setup baseColor diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs index 560f746b117..64ef4a14559 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs @@ -34,6 +34,7 @@ protected override void CreatePropertyGUI() base.CreatePropertyGUI(); + AddProperty(coatMaskText, () => litData.coatMask, (newValue) => litData.coatMask = newValue); AddProperty(transmissionEnableText, () => litData.sssTransmission, (newValue) => litData.sssTransmission = newValue); AddProperty(refractionModelText, () => litData.refractionModel, (newValue) => litData.refractionModel = newValue); AddProperty(energyConservingSpecularColorText, () => litData.energyConservingSpecular, (newValue) => litData.energyConservingSpecular = newValue); diff --git a/com.unity.render-pipelines.high-definition/Editor/ShaderGraph/HDFields.cs b/com.unity.render-pipelines.high-definition/Editor/ShaderGraph/HDFields.cs index fae9db2cf7a..be0eb8f1caf 100644 --- a/com.unity.render-pipelines.high-definition/Editor/ShaderGraph/HDFields.cs +++ b/com.unity.render-pipelines.high-definition/Editor/ShaderGraph/HDFields.cs @@ -32,6 +32,7 @@ static class HDFields public static FieldDescriptor Transmission = new FieldDescriptor(kMaterial, "Transmission", "_MATERIAL_FEATURE_TRANSMISSION 1"); public static FieldDescriptor Translucent = new FieldDescriptor(kMaterial, "Translucent", "_MATERIAL_FEATURE_TRANSLUCENT 1"); public static FieldDescriptor Coat = new FieldDescriptor(kMaterial, "Coat", "_MATERIAL_FEATURE_COAT"); + public static FieldDescriptor ClearCoat = new FieldDescriptor(kMaterial, "ClearCoat", "_MATERIAL_FEATURE_CLEAR_COAT"); public static FieldDescriptor CoatNormal = new FieldDescriptor(kMaterial, "CoatNormal", "_MATERIAL_FEATURE_COAT_NORMALMAP"); public static FieldDescriptor DualSpecularLobe = new FieldDescriptor(kMaterial, "DualSpecularLobe", "_MATERIAL_FEATURE_DUAL_SPECULAR_LOBE"); public static FieldDescriptor Eye = new FieldDescriptor(kMaterial, "Eye", "_MATERIAL_FEATURE_EYE 1"); From 2460ad0a9a316c0ac47e3f73fa5f63939c7770b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Tue, 2 Jun 2020 12:52:45 +0200 Subject: [PATCH 2/3] Rename coatmask to clearcoat --- .../Editor/Material/Lit/ShaderGraph/HDLitData.cs | 8 ++++---- .../Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs | 4 ++-- .../Editor/Material/Lit/ShaderGraph/HDLitSubTarget.cs | 8 ++++---- .../Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs | 7 ++++++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs index 92e2235296f..798de0ea7f8 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitData.cs @@ -68,11 +68,11 @@ public bool energyConservingSpecular } [SerializeField] - bool m_CoatMask = false; - public bool coatMask + bool m_ClearCoat = false; + public bool clearCoat { - get => m_CoatMask; - set => m_CoatMask = value; + get => m_ClearCoat; + set => m_ClearCoat = value; } } } diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs index e394f32fe2e..d5ec80c88ee 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/HDLitSubTarget.Migration.cs @@ -49,7 +49,7 @@ void UpgradePBRMasterNode(PBRMasterNode1 pbrMasterNode, out Dictionary this.litData = litData; @@ -34,7 +39,7 @@ protected override void CreatePropertyGUI() base.CreatePropertyGUI(); - AddProperty(coatMaskText, () => litData.coatMask, (newValue) => litData.coatMask = newValue); + AddProperty(Styles.enableClearCoat, () => litData.clearCoat, (newValue) => litData.clearCoat = newValue); AddProperty(transmissionEnableText, () => litData.sssTransmission, (newValue) => litData.sssTransmission = newValue); AddProperty(refractionModelText, () => litData.refractionModel, (newValue) => litData.refractionModel = newValue); AddProperty(energyConservingSpecularColorText, () => litData.energyConservingSpecular, (newValue) => litData.energyConservingSpecular = newValue); From b5685126cc2daddf621d891983c4510900a14a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Tue, 2 Jun 2020 13:34:39 +0200 Subject: [PATCH 3/3] Remove "Enable" in front of clear coat setting --- .../Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs index f089140688c..02a5bee5051 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/LitSurfaceOptionPropertyBlock.cs @@ -20,7 +20,7 @@ class LitSurfaceOptionPropertyBlock : SurfaceOptionPropertyBlock class Styles { - public static GUIContent enableClearCoat = new GUIContent("Enable Clear Coat", "Enable Clear Coat"); + public static GUIContent enableClearCoat = new GUIContent("Clear Coat", "Enable Clear Coat"); } public LitSurfaceOptionPropertyBlock(SurfaceOptionPropertyBlock.Features features, HDLitData litData) : base(features)