143 lines
8.0 KiB
C#
143 lines
8.0 KiB
C#
using Misaki.ShaderGUI;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
using static Misaki.HdrpToon.UtsShaderPropertyName.RimLight;
|
|
|
|
namespace Misaki.HdrpToon.Editor
|
|
{
|
|
public class RimLightScope : MaterialUIScope<ShaderGUIExpandable>
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
} |