using Misaki.ShaderGUI; using System.Linq; using UnityEditor; using UnityEngine; using static Misaki.HdrpToon.UtsShaderPropertyName.RimLight; namespace Misaki.HdrpToon.Editor { public class RimLightScope : MaterialUIScope { private static class Properties { public static MaterialProperty rimLightColor; public static MaterialProperty rimLightIntensity; public static MaterialProperty screenSpaceRimLight; public static MaterialProperty rimLightLevel; public static MaterialProperty rimLightClipping; public static MaterialProperty rimLightClippingLevel; public static MaterialProperty lightBaseRimLight; public static MaterialProperty lightDirectionRimLightLevel; //public static MaterialProperty lightDirection; //public static MaterialProperty invertedDirectionRimLight; //public static MaterialProperty invertedRimLightColor; //public static MaterialProperty inversedRimLightLevel; //public static MaterialProperty invertedRimLightFeatherOff; //public static MaterialProperty rimLightMaskMap; //public static MaterialProperty rimLightMaskLevel; } private static class Styles { public static readonly GUIContent rimLightColorText = new("Rim Light Color", "Specifies the color of rim light."); public static readonly GUIContent rimLightIntensityText = new("Rim Light Strength", "Specifies Rim Light strength."); public static readonly GUIContent screenSpaceRimLightText = new("Screen Space Rim Light", "Enable to make the rim light width constant in screen space."); public static readonly GUIContent rimLightLevelText = new("Rim Light Level", "Specifies Rim Light power intensity."); public static readonly GUIContent rimLightClippingText = new("Rim Light Clipping", "Enable to Clip the rim light at specific level"); public static readonly GUIContent rimLightClippingLevelText = new("Clipping Level", "The Clipping value of the rim light."); public static readonly GUIContent lightBaseRimLightText = new("Light Base Rim Light", "Enable to let rim light calculate per light."); public static readonly GUIContent lightDirectionRimLightLevelText = new("Light Direction Level", "Specifies intensity of Rim Light in the light source direction,"); //public static readonly GUIContent lightDirectionText = // new("Light Direction", // "When Enabled, rim light is generated only in the direction of the light source."); //public static readonly GUIContent invertedDirectionRimLightText = // new("Inverted Direction Rim Light", "Rim light from inverted/antipodean direction."); //public static readonly GUIContent invertedRimLightColorText = // new("Inverted Rim Light Color", "Specifies the color of inverted/antipodean rim light."); //public static readonly GUIContent inversedRimLightLevelText = // new("Inversed Rim Light Level", "Specifies Inverted/Antipodean Rim Light Level."); //public static readonly GUIContent invertedRimLightFeatherOffText = // new("Inverted Rim Light Feather Off", "Disable Inverted Rim light feather."); //public static readonly GUIContent rimLightMaskMapText = new("Rim Light Mask", // "Rim Light Mask : Texture(linear). The white part of the texture is displayed as Rim Light, and the black part is masked and not displayed."); //public static readonly GUIContent rimLightMaskLevelText = // new("Rim Light Mask Level", // "-1 gives 0% for the Rim Light effect, 0 gives 100% for the Rim Light and Mask effect, 1 gives 100% for the Rim Light and 0% for the Mask effect."); } protected override ShaderGUIExpandable ExpandableBit => ShaderGUIExpandable.Rimlight; protected override GUIContent Header => EditorGUIUtility.TrTextContent("Rim Light Settings"); protected override bool ShowSection => editor.GetMaterials().All(mat => mat.HasFeature(SurfaceFeature.RimLight)); public override void LoadMaterialProperties() { Properties.rimLightColor = FindProperty(RIM_LIGHT_COLOR); Properties.rimLightIntensity = FindProperty(RIM_LIGHT_INTENSITY); Properties.screenSpaceRimLight = FindProperty(SCREEN_SPACE_RIM_LIGHT); Properties.rimLightLevel = FindProperty(RIM_LIGHT_LEVEL); Properties.rimLightClipping = FindProperty(RIM_LIGHT_CLIPPING); Properties.rimLightClippingLevel = FindProperty(RIM_LIGHT_CLIPPING_LEVEL); Properties.lightBaseRimLight = FindProperty(LIGHT_BASE_RIM_LIGHT); Properties.lightDirectionRimLightLevel = FindProperty(LIGHT_DIRECTION_RIM_LIGHT_LEVEL); //Properties.lightDirection = FindProperty(LIGHT_DIRECTION); //Properties.invertedDirectionRimLight = FindProperty(INVERTED_DIRECTION_RIM_LIGHT); //Properties.invertedRimLightColor = FindProperty(INVERTED_RIM_LIGHT_COLOR); //Properties.inversedRimLightLevel = FindProperty(INVERSED_RIM_LIGHT_LEVEL); //Properties.invertedRimLightFeatherOff = FindProperty(INVERTED_RIM_LIGHT_FEATHER_OFF); //Properties.rimLightMaskMap = FindProperty(RIM_LIGHT_MASK_MAP); //Properties.rimLightMaskLevel = FindProperty(RIM_LIGHT_MASK_LEVEL); } protected override void DrawContent() { editor.ShaderProperty(Properties.rimLightColor, Styles.rimLightColorText); editor.ShaderProperty(Properties.rimLightIntensity, Styles.rimLightIntensityText); editor.ShaderProperty(Properties.screenSpaceRimLight, Styles.screenSpaceRimLightText); editor.ShaderProperty(Properties.rimLightLevel, Styles.rimLightLevelText); if (!Properties.screenSpaceRimLight.GetBooleanValue()) { editor.ShaderProperty(Properties.rimLightClipping, Styles.rimLightClippingText); if (Properties.rimLightClipping.GetBooleanValue()) { using var clippingLevelIndentLevelScope = new EditorGUI.IndentLevelScope(); editor.ShaderProperty(Properties.rimLightClippingLevel, Styles.rimLightClippingLevelText); } } EditorGUILayout.Space(); editor.ShaderProperty(Properties.lightBaseRimLight, Styles.lightBaseRimLightText); if (Properties.lightBaseRimLight.GetBooleanValue()) { editor.ShaderProperty(Properties.lightDirectionRimLightLevel, Styles.lightDirectionRimLightLevelText); } //using (var lightDisabledGroup = new EditorGUI.DisabledScope(!Properties.lightDirection.GetBooleanValue())) //{ // using var lightIndentLevelScope = new EditorGUI.IndentLevelScope(); // editor.ShaderProperty(Properties.lightDirectionRimLightLevel, Styles.lightDirectionRimLightLevelText); // editor.ShaderProperty(Properties.invertedDirectionRimLight, Styles.invertedDirectionRimLightText); // using var invertedDirectionDisabledGroup = new EditorGUI.DisabledScope(!Properties.invertedDirectionRimLight.GetBooleanValue()); // using var invertedDirectionIndentLevelScope = new EditorGUI.IndentLevelScope(); // editor.ShaderProperty(Properties.invertedRimLightColor, Styles.invertedRimLightColorText); // editor.ShaderProperty(Properties.inversedRimLightLevel, Styles.inversedRimLightLevelText); // editor.ShaderProperty(Properties.invertedRimLightFeatherOff, Styles.invertedRimLightFeatherOffText); //} //EditorGUILayout.Space(); //editor.TexturePropertySingleLine(Styles.rimLightMaskMapText, Properties.rimLightMaskMap); //editor.ShaderProperty(Properties.rimLightMaskLevel, Styles.rimLightMaskLevelText); } } }