#if !LILTOON_VRCSDK3_AVATARS && !LILTOON_VRCSDK3_WORLDS && VRC_SDK_VRCSDK3 #if UDON #define LILTOON_VRCSDK3_WORLDS #else #define LILTOON_VRCSDK3_AVATARS #endif #endif #if UNITY_EDITOR using UnityEditor; using UnityEngine; using UnityEngine.Rendering; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Reflection; using Object = UnityEngine.Object; namespace lilToon { public partial class lilToonInspector { #region private void DrawPresetGUI() { if(isLite) EditorGUILayout.LabelField(GetLoc("sPresetsNotAvailable"), wrapLabel); else DrawPreset(); } private void DrawSettingsGUI() { var applyButton = new GUIStyle(GUI.skin.button); applyButton.normal.textColor = Color.red; applyButton.fontStyle = FontStyle.Bold; bool isLocked = File.Exists(lilDirectoryManager.GetSettingLockPath()); EditorGUI.BeginChangeCheck(); ToggleGUI(GetLoc("sSettingLock"), ref isLocked); if(EditorGUI.EndChangeCheck()) { if(isLocked) lilToonSetting.SaveLockedSetting(shaderSetting); else lilToonSetting.DeleteLockedSetting(); } #if LILTOON_VRCSDK3_AVATARS EditorGUI.BeginChangeCheck(); GUI.enabled = !isLocked; ToggleGUI(GetLoc("sShaderSettingOptimizeInTestBuild"), ref shaderSetting.isOptimizeInTestBuild); GUI.enabled = true; if(EditorGUI.EndChangeCheck()) lilToonSetting.SaveShaderSetting(shaderSetting); #endif EditorGUI.BeginChangeCheck(); ToggleGUI("Optimize in NDMF (Apply on Play)", ref shaderSetting.isOptimizeInNDMF); ToggleGUI(GetLoc("sShaderSettingOptimizeInEditor"), ref shaderSetting.isDebugOptimize); ToggleGUI("Migrate materials in startup", ref shaderSetting.isMigrateInStartUp); edSet.isShowShaderSetting = lilEditorGUI.Foldout(GetLoc("sShaderSetting"), edSet.isShowShaderSetting); lilEditorGUI.DrawHelpButton(GetLoc("sAnchorShaderSetting")); if(edSet.isShowShaderSetting) { EditorGUILayout.BeginVertical(customBox); GUI.enabled = !isLocked; ToggleGUI(GetLoc("sSettingClippingCanceller"), ref shaderSetting.LIL_FEATURE_CLIPPING_CANCELLER); GUI.enabled = true; EditorGUILayout.EndVertical(); } edSet.isShowOptimizationSetting = lilEditorGUI.Foldout(GetLoc("sSettingBuildSizeOptimization"), edSet.isShowOptimizationSetting); if(edSet.isShowOptimizationSetting) { EditorGUILayout.BeginVertical(customBox); EditorGUILayout.HelpBox(GetLoc("sHelpShaderSetting"),MessageType.Info); ShaderSettingOptimizationGUI(); EditorGUILayout.EndVertical(); } if(EditorGUI.EndChangeCheck()) { if(shaderSetting.isDebugOptimize) { lilToonSetting.ApplyShaderSettingOptimized(); } else { lilToonSetting.TurnOnAllShaderSetting(ref shaderSetting); lilToonSetting.ApplyShaderSetting(shaderSetting); } } edSet.isShowDefaultValueSetting = lilEditorGUI.Foldout(GetLoc("sSettingDefaultValue"), edSet.isShowDefaultValueSetting); if(edSet.isShowDefaultValueSetting) { EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginVertical(customBox); ShaderSettingDefaultValueGUI(); EditorGUILayout.EndVertical(); if(EditorGUI.EndChangeCheck()) lilToonSetting.SaveShaderSetting(shaderSetting); } } #endregion //------------------------------------------------------------------------------------------------------------------------------ // Shader Setting GUI #region private static void ShaderSettingOptimizationGUI() { GUI.enabled = !File.Exists(lilDirectoryManager.GetSettingLockPath()); var RP = lilRenderPipelineReader.GetRP(); if(RP == lilRenderPipeline.BRP) { ToggleGUI(GetLoc("sSettingApplyShadowFA"), ref shaderSetting.LIL_OPTIMIZE_APPLY_SHADOW_FA); ToggleGUI(GetLoc("sSettingUseForwardAdd"), ref shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD); ToggleGUI(GetLoc("sSettingUseForwardAddShadow"), ref shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD_SHADOW); } ToggleGUI(GetLoc("sSettingUseLightmap"), ref shaderSetting.LIL_OPTIMIZE_USE_LIGHTMAP); if(RP == lilRenderPipeline.BRP) ToggleGUI("Fix for Deffered", ref shaderSetting.LIL_OPTIMIZE_DEFFERED); GUI.enabled = true; } private static void ShaderSettingDefaultValueGUI() { EditorGUILayout.LabelField("[GameObject] Fix lighting", EditorStyles.boldLabel); EditorGUI.indentLevel++; shaderSetting.defaultAsUnlit = EditorGUILayout.Slider(GetLoc("sAsUnlit"), shaderSetting.defaultAsUnlit, 0.0f, 1.0f); shaderSetting.defaultVertexLightStrength = EditorGUILayout.Slider(GetLoc("sVertexLightStrength"), shaderSetting.defaultVertexLightStrength, 0.0f, 1.0f); shaderSetting.defaultLightMinLimit = EditorGUILayout.Slider(GetLoc("sLightMinLimit"), shaderSetting.defaultLightMinLimit, 0.0f, 1.0f); shaderSetting.defaultLightMaxLimit = EditorGUILayout.Slider(GetLoc("sLightMaxLimit"), shaderSetting.defaultLightMaxLimit, 0.0f, 10.0f); shaderSetting.defaultMonochromeLighting = EditorGUILayout.Slider(GetLoc("sMonochromeLighting"), shaderSetting.defaultMonochromeLighting, 0.0f, 1.0f); shaderSetting.defaultBeforeExposureLimit = EditorGUILayout.FloatField(GetLoc("sBeforeExposureLimit"), shaderSetting.defaultBeforeExposureLimit); shaderSetting.defaultlilDirectionalLightStrength = EditorGUILayout.Slider(GetLoc("sDirectionalLightStrength"), shaderSetting.defaultlilDirectionalLightStrength, 0.0f, 1.0f); EditorGUI.indentLevel--; EditorGUILayout.LabelField("[Model] Setup from FBX", EditorStyles.boldLabel); EditorGUI.indentLevel++; shaderSetting.presetFace = (lilToonPreset)EditorGUILayout.ObjectField("Face", shaderSetting.presetFace, typeof(lilToonPreset), false); shaderSetting.presetSkin = (lilToonPreset)EditorGUILayout.ObjectField("Skin", shaderSetting.presetSkin, typeof(lilToonPreset), false); shaderSetting.presetHair = (lilToonPreset)EditorGUILayout.ObjectField("Hair", shaderSetting.presetHair, typeof(lilToonPreset), false); shaderSetting.presetCloth = (lilToonPreset)EditorGUILayout.ObjectField("Cloth", shaderSetting.presetCloth, typeof(lilToonPreset), false); EditorGUI.indentLevel--; EditorGUILayout.LabelField("[Shader] LightMode Override", EditorStyles.boldLabel); EditorGUI.indentLevel++; GUI.enabled = !File.Exists(lilDirectoryManager.GetSettingLockPath()); shaderSetting.mainLightModeName = EditorGUILayout.TextField("Main", shaderSetting.mainLightModeName); shaderSetting.outlineLightModeName = EditorGUILayout.TextField("Outline", shaderSetting.outlineLightModeName); shaderSetting.preLightModeName = EditorGUILayout.TextField("Transparent backface", shaderSetting.preLightModeName); shaderSetting.furLightModeName = EditorGUILayout.TextField("Fur", shaderSetting.furLightModeName); shaderSetting.furPreLightModeName = EditorGUILayout.TextField("Fur Pre", shaderSetting.furPreLightModeName); shaderSetting.gemPreLightModeName = EditorGUILayout.TextField("Gem Pre", shaderSetting.gemPreLightModeName); if(lilEditorGUI.EditorButton("Apply")) lilToonSetting.ApplyShaderSetting(shaderSetting); GUI.enabled = true; EditorGUI.indentLevel--; } #endregion //------------------------------------------------------------------------------------------------------------------------------ // Presets #region private static void DrawPreset() { GUILayout.Label(GetLoc("sPresets"), boldLabel); if(presets == null) presets = lilToonPreset.LoadPresets(); ShowPresets(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); if(lilEditorGUI.EditorButton(GetLoc("sPresetRefresh"))) presets = lilToonPreset.LoadPresets(); if(lilEditorGUI.EditorButton(GetLoc("sPresetSave"))) EditorWindow.GetWindow("[lilToon] Preset Window"); GUILayout.EndHorizontal(); } private static void ShowPresets() { string[] sCategorys = { GetLoc("sPresetCategorySkin"), GetLoc("sPresetCategoryHair"), GetLoc("sPresetCategoryCloth"), GetLoc("sPresetCategoryNature"), GetLoc("sPresetCategoryInorganic"), GetLoc("sPresetCategoryEffect"), GetLoc("sPresetCategoryOther") }; for(int i=0; i<(int)lilPresetCategory.Other+1; i++) { edSet.isShowCategorys[i] = lilEditorGUI.Foldout(sCategorys[i], edSet.isShowCategorys[i]); if(edSet.isShowCategorys[i]) { for(int j=0; j obj is Material); foreach(var obj in objs) { lilToonPreset.ApplyPreset((Material)obj, presets[j], isMulti); } } } } } } } #endregion } } #endif