Files
com.misaki.hdrp-toon/Editor/MeterialEditor/UIScopes/RimLightScope.cs
Misaki de370f845e Changing UI style;
Updating RImeLight;
2025-02-03 23:01:57 +09:00

128 lines
7.2 KiB
C#

using Misaki.ShaderGUI;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Misaki.HdrpToon.Editor
{
public class RimLightScope : MaterialUIScope<ShaderGUIExpandable>
{
private static class Properties
{
public static MaterialProperty rimLightColor;
public static MaterialProperty rimLightStrength;
public static MaterialProperty rimLightLevel;
public static MaterialProperty colorBlendingMode;
public static MaterialProperty adjustRimLightArea;
public static MaterialProperty rimLightFeatherOff;
public static MaterialProperty lightDirection;
public static MaterialProperty lightDirectionRimLightLevel;
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 rimLightStrengthText =
new("Rim Light Strength", "Specifies Rim Light strength.");
public static readonly GUIContent rimLightLevelText =
new("Rim Light Level", "Specifies Rim Light power intensity.");
public static readonly GUIContent colorBlendingModeText =
new("Color Blending Mode", "Rim light color blending mode. Multiply or Add.");
public static readonly GUIContent adjustRimLightAreaText =
new("Adjust Rim Light Area", "Increasing this value narrows the area of influence of Rim Light.");
public static readonly GUIContent rimLightFeatherOffText =
new("Rim Light Feather Off", "Disable Rim light feather.");
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 lightDirectionRimLightLevelText =
new("Light Direction Rim Light Level",
"Specifies intensity of Rim Light in the light source direction,");
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("_RimLightColor");
Properties.rimLightStrength = FindProperty("_RimLightStrength");
Properties.rimLightLevel = FindProperty("_RimLightLevel");
Properties.colorBlendingMode = FindProperty("_Is_BlendAddToRimColor");
Properties.adjustRimLightArea = FindProperty("_RimLight_InsideMask");
Properties.rimLightFeatherOff = FindProperty("_RimLight_FeatherOff");
Properties.lightDirection = FindProperty("_LightDirection_MaskOn");
Properties.lightDirectionRimLightLevel = FindProperty("_Tweak_LightDirection_MaskLevel");
Properties.invertedDirectionRimLight = FindProperty("_Add_Antipodean_RimLight");
Properties.invertedRimLightColor = FindProperty("_Ap_RimLightColor");
Properties.inversedRimLightLevel = FindProperty("_Ap_RimLight_Power");
Properties.invertedRimLightFeatherOff = FindProperty("_Ap_RimLight_FeatherOff");
Properties.rimLightMaskMap = FindProperty("_Set_RimLightMask");
Properties.rimLightMaskLevel = FindProperty("_Tweak_RimLightMaskLevel");
}
protected override void DrawContent()
{
editor.ShaderProperty(Properties.rimLightColor, Styles.rimLightColorText);
editor.ShaderProperty(Properties.rimLightStrength, Styles.rimLightStrengthText);
editor.ShaderProperty(Properties.rimLightLevel, Styles.rimLightLevelText);
editor.ShaderProperty(Properties.colorBlendingMode, Styles.colorBlendingModeText);
editor.ShaderProperty(Properties.adjustRimLightArea, Styles.adjustRimLightAreaText);
editor.ShaderProperty(Properties.rimLightFeatherOff, Styles.rimLightFeatherOffText);
editor.ShaderProperty(Properties.lightDirection, Styles.lightDirectionText);
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);
}
}
}