using UnityEngine; using UnityEngine.Rendering; // Include material common properties names using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties; namespace UnityEditor.Rendering.HighDefinition { /// /// Common GUI for Lit ShaderGraphs. /// public class LightingShaderGraphGUI : HDShaderGUI { // For surface option shader graph we only want all unlit features but alpha clip and back then front rendering const SurfaceOptionUIBlock.Features surfaceOptionFeatures = SurfaceOptionUIBlock.Features.Lit | SurfaceOptionUIBlock.Features.ShowDepthOffsetOnly; MaterialUIBlockList m_UIBlocks = new MaterialUIBlockList { new SurfaceOptionUIBlock(MaterialUIBlock.ExpandableBit.Base, features: surfaceOptionFeatures), new ShaderGraphUIBlock(MaterialUIBlock.ExpandableBit.ShaderGraph), new AdvancedOptionsUIBlock(MaterialUIBlock.ExpandableBit.Advance, ~AdvancedOptionsUIBlock.Features.SpecularOcclusion) }; /// List of UI Blocks used to render the material inspector. protected MaterialUIBlockList uiBlocks => m_UIBlocks; /// /// Implement your custom GUI in this function. To display a UI similar to HDRP shaders, use a MaterialUIBlockList. /// /// The current material editor. /// The list of properties the material has. protected override void OnMaterialGUI(MaterialEditor materialEditor, MaterialProperty[] props) { using (var changed = new EditorGUI.ChangeCheckScope()) { m_UIBlocks.OnGUI(materialEditor, props); ApplyKeywordsAndPassesIfNeeded(changed.changed, m_UIBlocks.materials); } } /// /// Sets up the keywords and passes for a Lit Shader Graph material. /// /// The target material. public static void SetupLightingKeywordsAndPass(Material material) { SynchronizeShaderGraphProperties(material); BaseLitGUI.SetupBaseLitKeywords(material); BaseLitGUI.SetupBaseLitMaterialPass(material); bool receiveSSR = false; if (material.GetSurfaceType() == SurfaceType.Transparent) receiveSSR = material.HasProperty(kReceivesSSRTransparent) ? material.GetFloat(kReceivesSSRTransparent) != 0 : false; else receiveSSR = material.HasProperty(kReceivesSSR) ? material.GetFloat(kReceivesSSR) != 0 : false; bool useSplitLighting = material.HasProperty(kUseSplitLighting) ? material.GetInt(kUseSplitLighting) != 0 : false; BaseLitGUI.SetupStencil(material, receiveSSR, useSplitLighting); if (material.HasProperty(kAddPrecomputedVelocity)) CoreUtils.SetKeyword(material, "_ADD_PRECOMPUTED_VELOCITY", material.GetInt(kAddPrecomputedVelocity) != 0); if (HDSpeedTree8MaterialUpgrader.IsHDSpeedTree8Material(material)) HDSpeedTree8MaterialUpgrader.RestoreHDSpeedTree8Keywords(material); } /// /// Sets up the keywords and passes for the current selected material. /// /// The selected material. protected override void SetupMaterialKeywordsAndPass(Material material) => SetupLightingKeywordsAndPass(material); } }