1393 lines
86 KiB
C#
1393 lines
86 KiB
C#
#if UNITY_EDITOR
|
|
using lilToon;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
public class lilToonSetting : ScriptableObject
|
|
{
|
|
public bool LIL_FEATURE_ANIMATE_MAIN_UV = true;
|
|
public bool LIL_FEATURE_MAIN_TONE_CORRECTION = true;
|
|
public bool LIL_FEATURE_MAIN_GRADATION_MAP = true;
|
|
public bool LIL_FEATURE_MAIN2ND = true;
|
|
public bool LIL_FEATURE_MAIN3RD = true;
|
|
public bool LIL_FEATURE_DECAL = true;
|
|
public bool LIL_FEATURE_ANIMATE_DECAL = true;
|
|
public bool LIL_FEATURE_LAYER_DISSOLVE = true;
|
|
public bool LIL_FEATURE_ALPHAMASK = true;
|
|
public bool LIL_FEATURE_SHADOW = true;
|
|
public bool LIL_FEATURE_RECEIVE_SHADOW = true;
|
|
public bool LIL_FEATURE_SHADOW_3RD = true;
|
|
public bool LIL_FEATURE_SHADOW_LUT = true;
|
|
public bool LIL_FEATURE_EMISSION_1ST = true;
|
|
public bool LIL_FEATURE_EMISSION_2ND = true;
|
|
public bool LIL_FEATURE_ANIMATE_EMISSION_UV = true;
|
|
public bool LIL_FEATURE_ANIMATE_EMISSION_MASK_UV = true;
|
|
public bool LIL_FEATURE_EMISSION_GRADATION = true;
|
|
public bool LIL_FEATURE_NORMAL_1ST = true;
|
|
public bool LIL_FEATURE_NORMAL_2ND = true;
|
|
public bool LIL_FEATURE_ANISOTROPY = true;
|
|
public bool LIL_FEATURE_REFLECTION = true;
|
|
public bool LIL_FEATURE_MATCAP = true;
|
|
public bool LIL_FEATURE_MATCAP_2ND = true;
|
|
public bool LIL_FEATURE_RIMLIGHT = true;
|
|
public bool LIL_FEATURE_RIMLIGHT_DIRECTION = true;
|
|
public bool LIL_FEATURE_GLITTER = true;
|
|
public bool LIL_FEATURE_BACKLIGHT = true;
|
|
public bool LIL_FEATURE_PARALLAX = true;
|
|
public bool LIL_FEATURE_POM = false;
|
|
public bool LIL_FEATURE_CLIPPING_CANCELLER = false;
|
|
public bool LIL_FEATURE_DISTANCE_FADE = true;
|
|
public bool LIL_FEATURE_AUDIOLINK = true;
|
|
public bool LIL_FEATURE_AUDIOLINK_VERTEX = true;
|
|
public bool LIL_FEATURE_AUDIOLINK_LOCAL = true;
|
|
public bool LIL_FEATURE_DISSOLVE = true;
|
|
public bool LIL_FEATURE_ENCRYPTION = false;
|
|
public bool LIL_FEATURE_ANIMATE_OUTLINE_UV = true;
|
|
public bool LIL_FEATURE_OUTLINE_TONE_CORRECTION = true;
|
|
public bool LIL_FEATURE_OUTLINE_RECEIVE_SHADOW = true;
|
|
public bool LIL_FEATURE_FUR_COLLISION = true;
|
|
|
|
public bool LIL_FEATURE_MainGradationTex = true;
|
|
public bool LIL_FEATURE_MainColorAdjustMask = true;
|
|
public bool LIL_FEATURE_Main2ndTex = true;
|
|
public bool LIL_FEATURE_Main2ndBlendMask = true;
|
|
public bool LIL_FEATURE_Main2ndDissolveMask = true;
|
|
public bool LIL_FEATURE_Main2ndDissolveNoiseMask = true;
|
|
public bool LIL_FEATURE_Main3rdTex = true;
|
|
public bool LIL_FEATURE_Main3rdBlendMask = true;
|
|
public bool LIL_FEATURE_Main3rdDissolveMask = true;
|
|
public bool LIL_FEATURE_Main3rdDissolveNoiseMask = true;
|
|
public bool LIL_FEATURE_AlphaMask = true;
|
|
public bool LIL_FEATURE_BumpMap = true;
|
|
public bool LIL_FEATURE_Bump2ndMap = true;
|
|
public bool LIL_FEATURE_Bump2ndScaleMask = true;
|
|
public bool LIL_FEATURE_AnisotropyTangentMap = true;
|
|
public bool LIL_FEATURE_AnisotropyScaleMask = true;
|
|
public bool LIL_FEATURE_AnisotropyShiftNoiseMask = true;
|
|
public bool LIL_FEATURE_ShadowBorderMask = true;
|
|
public bool LIL_FEATURE_ShadowBlurMask = true;
|
|
public bool LIL_FEATURE_ShadowStrengthMask = true;
|
|
public bool LIL_FEATURE_ShadowColorTex = true;
|
|
public bool LIL_FEATURE_Shadow2ndColorTex = true;
|
|
public bool LIL_FEATURE_Shadow3rdColorTex = true;
|
|
public bool LIL_FEATURE_BacklightColorTex = true;
|
|
public bool LIL_FEATURE_SmoothnessTex = true;
|
|
public bool LIL_FEATURE_MetallicGlossMap = true;
|
|
public bool LIL_FEATURE_ReflectionColorTex = true;
|
|
public bool LIL_FEATURE_ReflectionCubeTex = true;
|
|
public bool LIL_FEATURE_MatCapTex = true;
|
|
public bool LIL_FEATURE_MatCapBlendMask = true;
|
|
public bool LIL_FEATURE_MatCapBumpMap = true;
|
|
public bool LIL_FEATURE_MatCap2ndTex = true;
|
|
public bool LIL_FEATURE_MatCap2ndBlendMask = true;
|
|
public bool LIL_FEATURE_MatCap2ndBumpMap = true;
|
|
public bool LIL_FEATURE_RimColorTex = true;
|
|
public bool LIL_FEATURE_GlitterColorTex = true;
|
|
public bool LIL_FEATURE_GlitterShapeTex = true;
|
|
public bool LIL_FEATURE_EmissionMap = true;
|
|
public bool LIL_FEATURE_EmissionBlendMask = true;
|
|
public bool LIL_FEATURE_EmissionGradTex = true;
|
|
public bool LIL_FEATURE_Emission2ndMap = true;
|
|
public bool LIL_FEATURE_Emission2ndBlendMask = true;
|
|
public bool LIL_FEATURE_Emission2ndGradTex = true;
|
|
public bool LIL_FEATURE_ParallaxMap = true;
|
|
public bool LIL_FEATURE_AudioLinkMask = true;
|
|
public bool LIL_FEATURE_AudioLinkLocalMap = true;
|
|
public bool LIL_FEATURE_DissolveMask = true;
|
|
public bool LIL_FEATURE_DissolveNoiseMask = true;
|
|
public bool LIL_FEATURE_OutlineTex = true;
|
|
public bool LIL_FEATURE_OutlineWidthMask = true;
|
|
public bool LIL_FEATURE_OutlineVectorTex = true;
|
|
public bool LIL_FEATURE_FurNoiseMask = true;
|
|
public bool LIL_FEATURE_FurMask = true;
|
|
public bool LIL_FEATURE_FurLengthMask = true;
|
|
public bool LIL_FEATURE_FurVectorTex = true;
|
|
|
|
public bool LIL_OPTIMIZE_APPLY_SHADOW_FA = true;
|
|
public bool LIL_OPTIMIZE_USE_FORWARDADD = true;
|
|
public bool LIL_OPTIMIZE_USE_FORWARDADD_SHADOW = false;
|
|
public bool LIL_OPTIMIZE_USE_VERTEXLIGHT = true;
|
|
public bool LIL_OPTIMIZE_USE_LIGHTMAP = false;
|
|
|
|
public bool isLocked = false;
|
|
public bool isDebugOptimize = false;
|
|
public bool isOptimizeInTestBuild = false;
|
|
|
|
public float defaultAsUnlit = 0.0f;
|
|
public float defaultVertexLightStrength = 0.0f;
|
|
public float defaultLightMinLimit = 0.05f;
|
|
public float defaultLightMaxLimit = 1.0f;
|
|
public float defaultBeforeExposureLimit = 10000.0f;
|
|
public float defaultMonochromeLighting = 0.0f;
|
|
public float defaultlilDirectionalLightStrength = 1.0f;
|
|
|
|
public string mainLightModeName = "";
|
|
public string outlineLightModeName = "";
|
|
public string preLightModeName = "";
|
|
public string furLightModeName = "";
|
|
public string furPreLightModeName = "";
|
|
public string gemPreLightModeName = "";
|
|
|
|
public lilToonPreset presetSkin;
|
|
public lilToonPreset presetFace;
|
|
public lilToonPreset presetHair;
|
|
public lilToonPreset presetCloth;
|
|
|
|
// Lock
|
|
internal static void SaveLockedSetting(lilToonSetting shaderSetting)
|
|
{
|
|
string path = lilDirectoryManager.GetSettingLockPath();
|
|
File.WriteAllText(path, JsonUtility.ToJson(shaderSetting, true));
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
internal static void LoadLockedSetting(ref lilToonSetting shaderSetting)
|
|
{
|
|
var lockedSetting = CreateInstance<lilToonSetting>();
|
|
string path = lilDirectoryManager.GetSettingLockPath();
|
|
if(File.Exists(path))
|
|
{
|
|
JsonUtility.FromJsonOverwrite(File.ReadAllText(path), lockedSetting);
|
|
shaderSetting.LIL_OPTIMIZE_APPLY_SHADOW_FA = lockedSetting.LIL_OPTIMIZE_APPLY_SHADOW_FA;
|
|
shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD = lockedSetting.LIL_OPTIMIZE_USE_FORWARDADD;
|
|
shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD_SHADOW = lockedSetting.LIL_OPTIMIZE_USE_FORWARDADD_SHADOW;
|
|
shaderSetting.LIL_OPTIMIZE_USE_LIGHTMAP = lockedSetting.LIL_OPTIMIZE_USE_LIGHTMAP;
|
|
shaderSetting.isDebugOptimize = lockedSetting.isDebugOptimize;
|
|
shaderSetting.isOptimizeInTestBuild = lockedSetting.isOptimizeInTestBuild;
|
|
shaderSetting.mainLightModeName = lockedSetting.mainLightModeName;
|
|
shaderSetting.outlineLightModeName = lockedSetting.outlineLightModeName;
|
|
shaderSetting.preLightModeName = lockedSetting.preLightModeName;
|
|
shaderSetting.furLightModeName = lockedSetting.furLightModeName;
|
|
shaderSetting.furPreLightModeName = lockedSetting.furPreLightModeName;
|
|
shaderSetting.gemPreLightModeName = lockedSetting.gemPreLightModeName;
|
|
}
|
|
}
|
|
|
|
internal static void DeleteLockedSetting()
|
|
{
|
|
string path = lilDirectoryManager.GetSettingLockPath();
|
|
if(File.Exists(path)) AssetDatabase.DeleteAsset(path);
|
|
}
|
|
|
|
// Save and Load
|
|
public static void SaveShaderSetting(lilToonSetting shaderSetting)
|
|
{
|
|
string shaderSettingPath = lilDirectoryManager.GetShaderSettingPath();
|
|
StreamWriter sw = new StreamWriter(shaderSettingPath, false);
|
|
sw.Write(JsonUtility.ToJson(shaderSetting, true));
|
|
sw.Close();
|
|
}
|
|
|
|
internal static void LoadShaderSetting(ref lilToonSetting shaderSetting)
|
|
{
|
|
string shaderSettingPath = lilDirectoryManager.GetShaderSettingPath();
|
|
if(shaderSetting == null) shaderSetting = CreateInstance<lilToonSetting>();
|
|
if(File.Exists(shaderSettingPath)) JsonUtility.FromJsonOverwrite(File.ReadAllText(shaderSettingPath), shaderSetting);
|
|
LoadLockedSetting(ref shaderSetting);
|
|
}
|
|
|
|
internal static void InitializeShaderSetting(ref lilToonSetting shaderSetting)
|
|
{
|
|
if(shaderSetting != null) return;
|
|
LoadShaderSetting(ref shaderSetting);
|
|
if(shaderSetting == null)
|
|
{
|
|
foreach(string guid in AssetDatabase.FindAssets("t:lilToonSetting"))
|
|
{
|
|
string path = lilDirectoryManager.GUIDToPath(guid);
|
|
var shaderSettingOld = AssetDatabase.LoadAssetAtPath<lilToonSetting>(path);
|
|
shaderSetting = Instantiate(shaderSettingOld);
|
|
if(shaderSetting != null)
|
|
{
|
|
Debug.Log("[lilToon] Migrate settings from: " + path);
|
|
TurnOnAllShaderSetting(ref shaderSetting);
|
|
ApplyShaderSetting(shaderSetting);
|
|
AssetDatabase.Refresh();
|
|
return;
|
|
}
|
|
}
|
|
shaderSetting = CreateInstance<lilToonSetting>();
|
|
SaveShaderSetting(shaderSetting);
|
|
AssetDatabase.Refresh();
|
|
}
|
|
}
|
|
|
|
public static void TurnOffAllShaderSetting(ref lilToonSetting shaderSetting)
|
|
{
|
|
if(shaderSetting == null) return;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV = false;
|
|
shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION = false;
|
|
shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP = false;
|
|
shaderSetting.LIL_FEATURE_MAIN2ND = false;
|
|
shaderSetting.LIL_FEATURE_MAIN3RD = false;
|
|
shaderSetting.LIL_FEATURE_DECAL = false;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_DECAL = false;
|
|
shaderSetting.LIL_FEATURE_LAYER_DISSOLVE = false;
|
|
shaderSetting.LIL_FEATURE_ALPHAMASK = false;
|
|
shaderSetting.LIL_FEATURE_SHADOW = false;
|
|
shaderSetting.LIL_FEATURE_SHADOW_3RD = false;
|
|
shaderSetting.LIL_FEATURE_SHADOW_LUT = false;
|
|
shaderSetting.LIL_FEATURE_RECEIVE_SHADOW = false;
|
|
shaderSetting.LIL_FEATURE_EMISSION_1ST = false;
|
|
shaderSetting.LIL_FEATURE_EMISSION_2ND = false;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV = false;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV = false;
|
|
shaderSetting.LIL_FEATURE_EMISSION_GRADATION = false;
|
|
shaderSetting.LIL_FEATURE_NORMAL_1ST = false;
|
|
shaderSetting.LIL_FEATURE_NORMAL_2ND = false;
|
|
shaderSetting.LIL_FEATURE_ANISOTROPY = false;
|
|
shaderSetting.LIL_FEATURE_REFLECTION = false;
|
|
shaderSetting.LIL_FEATURE_MATCAP = false;
|
|
shaderSetting.LIL_FEATURE_MATCAP_2ND = false;
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT = false;
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION = false;
|
|
shaderSetting.LIL_FEATURE_GLITTER = false;
|
|
shaderSetting.LIL_FEATURE_BACKLIGHT = false;
|
|
shaderSetting.LIL_FEATURE_PARALLAX = false;
|
|
shaderSetting.LIL_FEATURE_POM = false;
|
|
//shaderSetting.LIL_FEATURE_CLIPPING_CANCELLER = false;
|
|
shaderSetting.LIL_FEATURE_DISTANCE_FADE = false;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK = false;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX = false;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL = false;
|
|
shaderSetting.LIL_FEATURE_DISSOLVE = false;
|
|
shaderSetting.LIL_FEATURE_ENCRYPTION = lilDirectoryManager.ExistsEncryption();
|
|
shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV = false;
|
|
shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION = false;
|
|
shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW = false;
|
|
shaderSetting.LIL_FEATURE_FUR_COLLISION = false;
|
|
|
|
shaderSetting.LIL_FEATURE_MainGradationTex = false;
|
|
shaderSetting.LIL_FEATURE_MainColorAdjustMask = false;
|
|
shaderSetting.LIL_FEATURE_Main2ndTex = false;
|
|
shaderSetting.LIL_FEATURE_Main2ndBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveMask = false;
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask = false;
|
|
shaderSetting.LIL_FEATURE_Main3rdTex = false;
|
|
shaderSetting.LIL_FEATURE_Main3rdBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveMask = false;
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask = false;
|
|
shaderSetting.LIL_FEATURE_AlphaMask = false;
|
|
shaderSetting.LIL_FEATURE_BumpMap = false;
|
|
shaderSetting.LIL_FEATURE_Bump2ndMap = false;
|
|
shaderSetting.LIL_FEATURE_Bump2ndScaleMask = false;
|
|
shaderSetting.LIL_FEATURE_AnisotropyTangentMap = false;
|
|
shaderSetting.LIL_FEATURE_AnisotropyScaleMask = false;
|
|
shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask = false;
|
|
shaderSetting.LIL_FEATURE_ShadowBorderMask = false;
|
|
shaderSetting.LIL_FEATURE_ShadowBlurMask = false;
|
|
shaderSetting.LIL_FEATURE_ShadowStrengthMask = false;
|
|
shaderSetting.LIL_FEATURE_ShadowColorTex = false;
|
|
shaderSetting.LIL_FEATURE_Shadow2ndColorTex = false;
|
|
shaderSetting.LIL_FEATURE_Shadow3rdColorTex = false;
|
|
shaderSetting.LIL_FEATURE_BacklightColorTex = false;
|
|
shaderSetting.LIL_FEATURE_SmoothnessTex = false;
|
|
shaderSetting.LIL_FEATURE_MetallicGlossMap = false;
|
|
shaderSetting.LIL_FEATURE_ReflectionColorTex = false;
|
|
shaderSetting.LIL_FEATURE_ReflectionCubeTex = false;
|
|
shaderSetting.LIL_FEATURE_MatCapTex = false;
|
|
shaderSetting.LIL_FEATURE_MatCapBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_MatCapBumpMap = false;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndTex = false;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBumpMap = false;
|
|
shaderSetting.LIL_FEATURE_RimColorTex = false;
|
|
shaderSetting.LIL_FEATURE_GlitterColorTex = false;
|
|
shaderSetting.LIL_FEATURE_GlitterShapeTex = false;
|
|
shaderSetting.LIL_FEATURE_EmissionMap = false;
|
|
shaderSetting.LIL_FEATURE_EmissionBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_EmissionGradTex = false;
|
|
shaderSetting.LIL_FEATURE_Emission2ndMap = false;
|
|
shaderSetting.LIL_FEATURE_Emission2ndBlendMask = false;
|
|
shaderSetting.LIL_FEATURE_Emission2ndGradTex = false;
|
|
shaderSetting.LIL_FEATURE_ParallaxMap = false;
|
|
shaderSetting.LIL_FEATURE_AudioLinkMask = false;
|
|
shaderSetting.LIL_FEATURE_AudioLinkLocalMap = false;
|
|
shaderSetting.LIL_FEATURE_DissolveMask = false;
|
|
shaderSetting.LIL_FEATURE_DissolveNoiseMask = false;
|
|
shaderSetting.LIL_FEATURE_OutlineTex = false;
|
|
shaderSetting.LIL_FEATURE_OutlineWidthMask = false;
|
|
shaderSetting.LIL_FEATURE_OutlineVectorTex = false;
|
|
shaderSetting.LIL_FEATURE_FurNoiseMask = false;
|
|
shaderSetting.LIL_FEATURE_FurMask = false;
|
|
shaderSetting.LIL_FEATURE_FurLengthMask = false;
|
|
shaderSetting.LIL_FEATURE_FurVectorTex = false;
|
|
shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT = false;
|
|
EditorUtility.SetDirty(shaderSetting);
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
public static void TurnOnAllShaderSetting(ref lilToonSetting shaderSetting)
|
|
{
|
|
if(shaderSetting == null) return;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV = true;
|
|
shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION = true;
|
|
shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP = true;
|
|
shaderSetting.LIL_FEATURE_MAIN2ND = true;
|
|
shaderSetting.LIL_FEATURE_MAIN3RD = true;
|
|
shaderSetting.LIL_FEATURE_DECAL = true;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_DECAL = true;
|
|
shaderSetting.LIL_FEATURE_LAYER_DISSOLVE = true;
|
|
shaderSetting.LIL_FEATURE_ALPHAMASK = true;
|
|
shaderSetting.LIL_FEATURE_SHADOW = true;
|
|
shaderSetting.LIL_FEATURE_SHADOW_3RD = true;
|
|
shaderSetting.LIL_FEATURE_SHADOW_LUT = true;
|
|
shaderSetting.LIL_FEATURE_RECEIVE_SHADOW = true;
|
|
shaderSetting.LIL_FEATURE_EMISSION_1ST = true;
|
|
shaderSetting.LIL_FEATURE_EMISSION_2ND = true;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV = true;
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV = true;
|
|
shaderSetting.LIL_FEATURE_EMISSION_GRADATION = true;
|
|
shaderSetting.LIL_FEATURE_NORMAL_1ST = true;
|
|
shaderSetting.LIL_FEATURE_NORMAL_2ND = true;
|
|
shaderSetting.LIL_FEATURE_ANISOTROPY = true;
|
|
shaderSetting.LIL_FEATURE_REFLECTION = true;
|
|
shaderSetting.LIL_FEATURE_MATCAP = true;
|
|
shaderSetting.LIL_FEATURE_MATCAP_2ND = true;
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT = true;
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION = true;
|
|
shaderSetting.LIL_FEATURE_GLITTER = true;
|
|
shaderSetting.LIL_FEATURE_BACKLIGHT = true;
|
|
shaderSetting.LIL_FEATURE_PARALLAX = true;
|
|
shaderSetting.LIL_FEATURE_POM = true;
|
|
//shaderSetting.LIL_FEATURE_CLIPPING_CANCELLER = true;
|
|
shaderSetting.LIL_FEATURE_DISTANCE_FADE = true;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK = true;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX = true;
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL = true;
|
|
shaderSetting.LIL_FEATURE_DISSOLVE = true;
|
|
shaderSetting.LIL_FEATURE_ENCRYPTION = lilDirectoryManager.ExistsEncryption();
|
|
shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV = true;
|
|
shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION = true;
|
|
shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW = true;
|
|
shaderSetting.LIL_FEATURE_FUR_COLLISION = true;
|
|
shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT = true;
|
|
|
|
if(!lilShaderAPI.IsTextureLimitedAPI())
|
|
{
|
|
shaderSetting.LIL_FEATURE_MainGradationTex = true;
|
|
shaderSetting.LIL_FEATURE_MainColorAdjustMask = true;
|
|
shaderSetting.LIL_FEATURE_Main2ndTex = true;
|
|
shaderSetting.LIL_FEATURE_Main2ndBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveMask = true;
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask = true;
|
|
shaderSetting.LIL_FEATURE_Main3rdTex = true;
|
|
shaderSetting.LIL_FEATURE_Main3rdBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveMask = true;
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask = true;
|
|
shaderSetting.LIL_FEATURE_AlphaMask = true;
|
|
shaderSetting.LIL_FEATURE_BumpMap = true;
|
|
shaderSetting.LIL_FEATURE_Bump2ndMap = true;
|
|
shaderSetting.LIL_FEATURE_Bump2ndScaleMask = true;
|
|
shaderSetting.LIL_FEATURE_AnisotropyTangentMap = true;
|
|
shaderSetting.LIL_FEATURE_AnisotropyScaleMask = true;
|
|
shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask = true;
|
|
shaderSetting.LIL_FEATURE_ShadowBorderMask = true;
|
|
shaderSetting.LIL_FEATURE_ShadowBlurMask = true;
|
|
shaderSetting.LIL_FEATURE_ShadowStrengthMask = true;
|
|
shaderSetting.LIL_FEATURE_ShadowColorTex = true;
|
|
shaderSetting.LIL_FEATURE_Shadow2ndColorTex = true;
|
|
shaderSetting.LIL_FEATURE_Shadow3rdColorTex = true;
|
|
shaderSetting.LIL_FEATURE_BacklightColorTex = true;
|
|
shaderSetting.LIL_FEATURE_SmoothnessTex = true;
|
|
shaderSetting.LIL_FEATURE_MetallicGlossMap = true;
|
|
shaderSetting.LIL_FEATURE_ReflectionColorTex = true;
|
|
shaderSetting.LIL_FEATURE_ReflectionCubeTex = true;
|
|
shaderSetting.LIL_FEATURE_MatCapTex = true;
|
|
shaderSetting.LIL_FEATURE_MatCapBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_MatCapBumpMap = true;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndTex = true;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBumpMap = true;
|
|
shaderSetting.LIL_FEATURE_RimColorTex = true;
|
|
shaderSetting.LIL_FEATURE_GlitterColorTex = true;
|
|
shaderSetting.LIL_FEATURE_GlitterShapeTex = true;
|
|
shaderSetting.LIL_FEATURE_EmissionMap = true;
|
|
shaderSetting.LIL_FEATURE_EmissionBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_EmissionGradTex = true;
|
|
shaderSetting.LIL_FEATURE_Emission2ndMap = true;
|
|
shaderSetting.LIL_FEATURE_Emission2ndBlendMask = true;
|
|
shaderSetting.LIL_FEATURE_Emission2ndGradTex = true;
|
|
shaderSetting.LIL_FEATURE_ParallaxMap = true;
|
|
shaderSetting.LIL_FEATURE_AudioLinkMask = true;
|
|
shaderSetting.LIL_FEATURE_AudioLinkLocalMap = true;
|
|
shaderSetting.LIL_FEATURE_DissolveMask = true;
|
|
shaderSetting.LIL_FEATURE_DissolveNoiseMask = true;
|
|
shaderSetting.LIL_FEATURE_OutlineTex = true;
|
|
shaderSetting.LIL_FEATURE_OutlineWidthMask = true;
|
|
shaderSetting.LIL_FEATURE_OutlineVectorTex = true;
|
|
shaderSetting.LIL_FEATURE_FurNoiseMask = true;
|
|
shaderSetting.LIL_FEATURE_FurMask = true;
|
|
shaderSetting.LIL_FEATURE_FurLengthMask = true;
|
|
shaderSetting.LIL_FEATURE_FurVectorTex = true;
|
|
}
|
|
}
|
|
|
|
internal static void ApplyShaderSetting(lilToonSetting shaderSetting, string reportTitle = null)
|
|
{
|
|
SaveShaderSetting(shaderSetting);
|
|
string shaderSettingString = BuildShaderSettingString(shaderSetting, true);
|
|
|
|
string shaderFolderPath = lilDirectoryManager.GetShaderFolderPath();
|
|
var folders = new List<string>{shaderFolderPath};
|
|
string baseShaderFolderPath = lilDirectoryManager.GetBaseShaderFolderPath();
|
|
foreach(string shaderGuid in AssetDatabase.FindAssets("", new[] {baseShaderFolderPath}))
|
|
{
|
|
string baseShaderPath = lilDirectoryManager.GUIDToPath(shaderGuid);
|
|
if(!baseShaderPath.Contains(".lilinternal")) continue;
|
|
string shaderPath = shaderFolderPath + Path.AltDirectorySeparatorChar + Path.GetFileNameWithoutExtension(baseShaderPath) + ".shader";
|
|
File.WriteAllText(shaderPath, lilShaderContainer.UnpackContainer(baseShaderPath));
|
|
}
|
|
foreach(string shaderGuid in AssetDatabase.FindAssets("t:shader"))
|
|
{
|
|
string shaderPath = lilDirectoryManager.GUIDToPath(shaderGuid);
|
|
if(!shaderPath.Contains(".lilcontainer")) continue;
|
|
string folder = Path.GetDirectoryName(shaderPath);
|
|
if(!folders.Contains(folder)) folders.Add(folder);
|
|
}
|
|
foreach(string folder in folders)
|
|
{
|
|
AssetDatabase.ImportAsset(folder, ImportAssetOptions.ImportRecursive);
|
|
}
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
if(!string.IsNullOrEmpty(reportTitle))
|
|
{
|
|
Debug.Log(reportTitle + Environment.NewLine + shaderSettingString);
|
|
}
|
|
}
|
|
|
|
internal static void ApplyShaderSetting(lilToonSetting shaderSetting, string reportTitle, List<Shader> shaders, bool doOptimize = false)
|
|
{
|
|
if(shaders == null || shaders.Count() == 0)
|
|
{
|
|
ApplyShaderSetting(shaderSetting, reportTitle);
|
|
return;
|
|
}
|
|
|
|
SaveShaderSetting(shaderSetting);
|
|
string shaderSettingString = BuildShaderSettingString(shaderSetting, true);
|
|
|
|
string baseShaderFolderPath = lilDirectoryManager.GetBaseShaderFolderPath();
|
|
var shaderPathes = new List<string>();
|
|
foreach(Shader shader in shaders)
|
|
{
|
|
string shaderPath = AssetDatabase.GetAssetPath(shader);
|
|
if(string.IsNullOrEmpty(shaderPath)) continue;
|
|
if(!shaderPathes.Contains(shaderPath)) shaderPathes.Add(shaderPath);
|
|
if(shaderPath.Contains(".lilcontainer")) continue;
|
|
|
|
string baseShaderPath = baseShaderFolderPath + Path.AltDirectorySeparatorChar + Path.GetFileNameWithoutExtension(shaderPath) + ".lilinternal";
|
|
if(File.Exists(baseShaderPath)) File.WriteAllText(shaderPath, lilShaderContainer.UnpackContainer(baseShaderPath, null, doOptimize));
|
|
}
|
|
foreach(string shaderPath in shaderPathes)
|
|
{
|
|
AssetDatabase.ImportAsset(shaderPath, ImportAssetOptions.ForceSynchronousImport);
|
|
}
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
if(!string.IsNullOrEmpty(reportTitle))
|
|
{
|
|
Debug.Log(reportTitle + Environment.NewLine + shaderSettingString);
|
|
}
|
|
}
|
|
|
|
public static string BuildShaderSettingString(lilToonSetting shaderSetting, bool isFile)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
if(isFile)
|
|
{
|
|
sb.AppendLine("#ifndef LIL_SETTING_INCLUDED");
|
|
sb.AppendLine("#define LIL_SETTING_INCLUDED");
|
|
sb.AppendLine("");
|
|
}
|
|
if(shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV) sb.AppendLine("#define LIL_FEATURE_ANIMATE_MAIN_UV");
|
|
if(shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION) sb.AppendLine("#define LIL_FEATURE_MAIN_TONE_CORRECTION");
|
|
if(shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP) sb.AppendLine("#define LIL_FEATURE_MAIN_GRADATION_MAP");
|
|
if(shaderSetting.LIL_FEATURE_MAIN2ND) sb.AppendLine("#define LIL_FEATURE_MAIN2ND");
|
|
if(shaderSetting.LIL_FEATURE_MAIN3RD) sb.AppendLine("#define LIL_FEATURE_MAIN3RD");
|
|
if(shaderSetting.LIL_FEATURE_MAIN2ND || shaderSetting.LIL_FEATURE_MAIN3RD)
|
|
{
|
|
if(shaderSetting.LIL_FEATURE_DECAL) sb.AppendLine("#define LIL_FEATURE_DECAL");
|
|
if(shaderSetting.LIL_FEATURE_ANIMATE_DECAL) sb.AppendLine("#define LIL_FEATURE_ANIMATE_DECAL");
|
|
if(shaderSetting.LIL_FEATURE_LAYER_DISSOLVE) sb.AppendLine("#define LIL_FEATURE_LAYER_DISSOLVE");
|
|
}
|
|
|
|
if(shaderSetting.LIL_FEATURE_ALPHAMASK) sb.AppendLine("#define LIL_FEATURE_ALPHAMASK");
|
|
|
|
if(shaderSetting.LIL_FEATURE_SHADOW)
|
|
{
|
|
sb.AppendLine("#define LIL_FEATURE_SHADOW");
|
|
if(shaderSetting.LIL_FEATURE_RECEIVE_SHADOW) sb.AppendLine("#define LIL_FEATURE_RECEIVE_SHADOW");
|
|
if(shaderSetting.LIL_FEATURE_SHADOW_3RD) sb.AppendLine("#define LIL_FEATURE_SHADOW_3RD");
|
|
if(shaderSetting.LIL_FEATURE_SHADOW_LUT) sb.AppendLine("#define LIL_FEATURE_SHADOW_LUT");
|
|
}
|
|
|
|
if(shaderSetting.LIL_FEATURE_EMISSION_1ST) sb.AppendLine("#define LIL_FEATURE_EMISSION_1ST");
|
|
if(shaderSetting.LIL_FEATURE_EMISSION_2ND) sb.AppendLine("#define LIL_FEATURE_EMISSION_2ND");
|
|
if(shaderSetting.LIL_FEATURE_EMISSION_1ST || shaderSetting.LIL_FEATURE_EMISSION_2ND)
|
|
{
|
|
if(shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV) sb.AppendLine("#define LIL_FEATURE_ANIMATE_EMISSION_UV");
|
|
if(shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV) sb.AppendLine("#define LIL_FEATURE_ANIMATE_EMISSION_MASK_UV");
|
|
if(shaderSetting.LIL_FEATURE_EMISSION_GRADATION) sb.AppendLine("#define LIL_FEATURE_EMISSION_GRADATION");
|
|
}
|
|
if(shaderSetting.LIL_FEATURE_NORMAL_1ST) sb.AppendLine("#define LIL_FEATURE_NORMAL_1ST");
|
|
if(shaderSetting.LIL_FEATURE_NORMAL_2ND) sb.AppendLine("#define LIL_FEATURE_NORMAL_2ND");
|
|
if(shaderSetting.LIL_FEATURE_ANISOTROPY) sb.AppendLine("#define LIL_FEATURE_ANISOTROPY");
|
|
if(shaderSetting.LIL_FEATURE_REFLECTION) sb.AppendLine("#define LIL_FEATURE_REFLECTION");
|
|
if(shaderSetting.LIL_FEATURE_MATCAP) sb.AppendLine("#define LIL_FEATURE_MATCAP");
|
|
if(shaderSetting.LIL_FEATURE_MATCAP_2ND) sb.AppendLine("#define LIL_FEATURE_MATCAP_2ND");
|
|
if(shaderSetting.LIL_FEATURE_RIMLIGHT)
|
|
{
|
|
sb.AppendLine("#define LIL_FEATURE_RIMLIGHT");
|
|
if(shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION) sb.AppendLine("#define LIL_FEATURE_RIMLIGHT_DIRECTION");
|
|
}
|
|
if(shaderSetting.LIL_FEATURE_GLITTER) sb.AppendLine("#define LIL_FEATURE_GLITTER");
|
|
if(shaderSetting.LIL_FEATURE_BACKLIGHT) sb.AppendLine("#define LIL_FEATURE_BACKLIGHT");
|
|
if(shaderSetting.LIL_FEATURE_PARALLAX)
|
|
{
|
|
sb.AppendLine("#define LIL_FEATURE_PARALLAX");
|
|
if(shaderSetting.LIL_FEATURE_POM) sb.AppendLine("#define LIL_FEATURE_POM");
|
|
}
|
|
if(shaderSetting.LIL_FEATURE_CLIPPING_CANCELLER) sb.AppendLine("#define LIL_FEATURE_CLIPPING_CANCELLER");
|
|
if(shaderSetting.LIL_FEATURE_DISTANCE_FADE) sb.AppendLine("#define LIL_FEATURE_DISTANCE_FADE");
|
|
if(shaderSetting.LIL_FEATURE_AUDIOLINK)
|
|
{
|
|
sb.AppendLine("#define LIL_FEATURE_AUDIOLINK");
|
|
if(shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX) sb.AppendLine("#define LIL_FEATURE_AUDIOLINK_VERTEX");
|
|
if(shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL) sb.AppendLine("#define LIL_FEATURE_AUDIOLINK_LOCAL");
|
|
}
|
|
if(shaderSetting.LIL_FEATURE_DISSOLVE) sb.AppendLine("#define LIL_FEATURE_DISSOLVE");
|
|
if(shaderSetting.LIL_FEATURE_ENCRYPTION) sb.AppendLine("#define LIL_FEATURE_ENCRYPTION");
|
|
if(shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION) sb.AppendLine("#define LIL_FEATURE_OUTLINE_TONE_CORRECTION");
|
|
if(shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW) sb.AppendLine("#define LIL_FEATURE_OUTLINE_RECEIVE_SHADOW");
|
|
if(shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV) sb.AppendLine("#define LIL_FEATURE_ANIMATE_OUTLINE_UV");
|
|
if(shaderSetting.LIL_FEATURE_FUR_COLLISION) sb.AppendLine("#define LIL_FEATURE_FUR_COLLISION");
|
|
|
|
if(shaderSetting.LIL_FEATURE_MainGradationTex) sb.AppendLine("#define LIL_FEATURE_MainGradationTex");
|
|
if(shaderSetting.LIL_FEATURE_MainColorAdjustMask) sb.AppendLine("#define LIL_FEATURE_MainColorAdjustMask");
|
|
if(shaderSetting.LIL_FEATURE_Main2ndTex) sb.AppendLine("#define LIL_FEATURE_Main2ndTex");
|
|
if(shaderSetting.LIL_FEATURE_Main2ndBlendMask) sb.AppendLine("#define LIL_FEATURE_Main2ndBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_Main2ndDissolveMask) sb.AppendLine("#define LIL_FEATURE_Main2ndDissolveMask");
|
|
if(shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask) sb.AppendLine("#define LIL_FEATURE_Main2ndDissolveNoiseMask");
|
|
if(shaderSetting.LIL_FEATURE_Main3rdTex) sb.AppendLine("#define LIL_FEATURE_Main3rdTex");
|
|
if(shaderSetting.LIL_FEATURE_Main3rdBlendMask) sb.AppendLine("#define LIL_FEATURE_Main3rdBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_Main3rdDissolveMask) sb.AppendLine("#define LIL_FEATURE_Main3rdDissolveMask");
|
|
if(shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask) sb.AppendLine("#define LIL_FEATURE_Main3rdDissolveNoiseMask");
|
|
if(shaderSetting.LIL_FEATURE_AlphaMask) sb.AppendLine("#define LIL_FEATURE_AlphaMask");
|
|
if(shaderSetting.LIL_FEATURE_BumpMap) sb.AppendLine("#define LIL_FEATURE_BumpMap");
|
|
if(shaderSetting.LIL_FEATURE_Bump2ndMap) sb.AppendLine("#define LIL_FEATURE_Bump2ndMap");
|
|
if(shaderSetting.LIL_FEATURE_Bump2ndScaleMask) sb.AppendLine("#define LIL_FEATURE_Bump2ndScaleMask");
|
|
if(shaderSetting.LIL_FEATURE_AnisotropyTangentMap) sb.AppendLine("#define LIL_FEATURE_AnisotropyTangentMap");
|
|
if(shaderSetting.LIL_FEATURE_AnisotropyScaleMask) sb.AppendLine("#define LIL_FEATURE_AnisotropyScaleMask");
|
|
if(shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask) sb.AppendLine("#define LIL_FEATURE_AnisotropyShiftNoiseMask");
|
|
if(shaderSetting.LIL_FEATURE_ShadowBorderMask) sb.AppendLine("#define LIL_FEATURE_ShadowBorderMask");
|
|
if(shaderSetting.LIL_FEATURE_ShadowBlurMask) sb.AppendLine("#define LIL_FEATURE_ShadowBlurMask");
|
|
if(shaderSetting.LIL_FEATURE_ShadowStrengthMask) sb.AppendLine("#define LIL_FEATURE_ShadowStrengthMask");
|
|
if(shaderSetting.LIL_FEATURE_ShadowColorTex) sb.AppendLine("#define LIL_FEATURE_ShadowColorTex");
|
|
if(shaderSetting.LIL_FEATURE_Shadow2ndColorTex) sb.AppendLine("#define LIL_FEATURE_Shadow2ndColorTex");
|
|
if(shaderSetting.LIL_FEATURE_Shadow3rdColorTex) sb.AppendLine("#define LIL_FEATURE_Shadow3rdColorTex");
|
|
if(shaderSetting.LIL_FEATURE_BacklightColorTex) sb.AppendLine("#define LIL_FEATURE_BacklightColorTex");
|
|
if(shaderSetting.LIL_FEATURE_SmoothnessTex) sb.AppendLine("#define LIL_FEATURE_SmoothnessTex");
|
|
if(shaderSetting.LIL_FEATURE_MetallicGlossMap) sb.AppendLine("#define LIL_FEATURE_MetallicGlossMap");
|
|
if(shaderSetting.LIL_FEATURE_ReflectionColorTex) sb.AppendLine("#define LIL_FEATURE_ReflectionColorTex");
|
|
if(shaderSetting.LIL_FEATURE_ReflectionCubeTex) sb.AppendLine("#define LIL_FEATURE_ReflectionCubeTex");
|
|
if(shaderSetting.LIL_FEATURE_MatCapTex) sb.AppendLine("#define LIL_FEATURE_MatCapTex");
|
|
if(shaderSetting.LIL_FEATURE_MatCapBlendMask) sb.AppendLine("#define LIL_FEATURE_MatCapBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_MatCapBumpMap) sb.AppendLine("#define LIL_FEATURE_MatCapBumpMap");
|
|
if(shaderSetting.LIL_FEATURE_MatCap2ndTex) sb.AppendLine("#define LIL_FEATURE_MatCap2ndTex");
|
|
if(shaderSetting.LIL_FEATURE_MatCap2ndBlendMask) sb.AppendLine("#define LIL_FEATURE_MatCap2ndBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_MatCap2ndBumpMap) sb.AppendLine("#define LIL_FEATURE_MatCap2ndBumpMap");
|
|
if(shaderSetting.LIL_FEATURE_RimColorTex) sb.AppendLine("#define LIL_FEATURE_RimColorTex");
|
|
if(shaderSetting.LIL_FEATURE_GlitterColorTex) sb.AppendLine("#define LIL_FEATURE_GlitterColorTex");
|
|
if(shaderSetting.LIL_FEATURE_GlitterShapeTex) sb.AppendLine("#define LIL_FEATURE_GlitterShapeTex");
|
|
if(shaderSetting.LIL_FEATURE_EmissionMap) sb.AppendLine("#define LIL_FEATURE_EmissionMap");
|
|
if(shaderSetting.LIL_FEATURE_EmissionBlendMask) sb.AppendLine("#define LIL_FEATURE_EmissionBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_EmissionGradTex) sb.AppendLine("#define LIL_FEATURE_EmissionGradTex");
|
|
if(shaderSetting.LIL_FEATURE_Emission2ndMap) sb.AppendLine("#define LIL_FEATURE_Emission2ndMap");
|
|
if(shaderSetting.LIL_FEATURE_Emission2ndBlendMask) sb.AppendLine("#define LIL_FEATURE_Emission2ndBlendMask");
|
|
if(shaderSetting.LIL_FEATURE_Emission2ndGradTex) sb.AppendLine("#define LIL_FEATURE_Emission2ndGradTex");
|
|
if(shaderSetting.LIL_FEATURE_ParallaxMap) sb.AppendLine("#define LIL_FEATURE_ParallaxMap");
|
|
if(shaderSetting.LIL_FEATURE_AudioLinkMask) sb.AppendLine("#define LIL_FEATURE_AudioLinkMask");
|
|
if(shaderSetting.LIL_FEATURE_AudioLinkLocalMap) sb.AppendLine("#define LIL_FEATURE_AudioLinkLocalMap");
|
|
if(shaderSetting.LIL_FEATURE_DissolveMask) sb.AppendLine("#define LIL_FEATURE_DissolveMask");
|
|
if(shaderSetting.LIL_FEATURE_DissolveNoiseMask) sb.AppendLine("#define LIL_FEATURE_DissolveNoiseMask");
|
|
if(shaderSetting.LIL_FEATURE_OutlineTex) sb.AppendLine("#define LIL_FEATURE_OutlineTex");
|
|
if(shaderSetting.LIL_FEATURE_OutlineWidthMask) sb.AppendLine("#define LIL_FEATURE_OutlineWidthMask");
|
|
if(shaderSetting.LIL_FEATURE_OutlineVectorTex) sb.AppendLine("#define LIL_FEATURE_OutlineVectorTex");
|
|
if(shaderSetting.LIL_FEATURE_FurNoiseMask) sb.AppendLine("#define LIL_FEATURE_FurNoiseMask");
|
|
if(shaderSetting.LIL_FEATURE_FurMask) sb.AppendLine("#define LIL_FEATURE_FurMask");
|
|
if(shaderSetting.LIL_FEATURE_FurLengthMask) sb.AppendLine("#define LIL_FEATURE_FurLengthMask");
|
|
if(shaderSetting.LIL_FEATURE_FurVectorTex) sb.AppendLine("#define LIL_FEATURE_FurVectorTex");
|
|
|
|
if(shaderSetting.LIL_OPTIMIZE_APPLY_SHADOW_FA) sb.AppendLine("#define LIL_OPTIMIZE_APPLY_SHADOW_FA");
|
|
if(shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD) sb.AppendLine("#define LIL_OPTIMIZE_USE_FORWARDADD");
|
|
if(shaderSetting.LIL_OPTIMIZE_USE_FORWARDADD_SHADOW) sb.AppendLine("#define LIL_OPTIMIZE_USE_FORWARDADD_SHADOW");
|
|
if(shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT) sb.AppendLine("#define LIL_OPTIMIZE_USE_VERTEXLIGHT");
|
|
if(shaderSetting.LIL_OPTIMIZE_USE_LIGHTMAP) sb.AppendLine("#define LIL_OPTIMIZE_USE_LIGHTMAP");
|
|
if(isFile)
|
|
{
|
|
sb.AppendLine("");
|
|
sb.AppendLine("#endif");
|
|
}
|
|
|
|
if(!isFile)
|
|
{
|
|
if(!shaderSetting.LIL_FEATURE_REFLECTION) sb.AppendLine("#pragma lil_skip_variants_reflections");
|
|
if(!shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT) sb.AppendLine("#pragma lil_skip_variants_addlight");
|
|
if(!shaderSetting.LIL_OPTIMIZE_USE_LIGHTMAP) sb.AppendLine("#pragma lil_skip_variants_lightmaps");
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
public static string BuildShaderSettingString(bool isFile)
|
|
{
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
return BuildShaderSettingString(shaderSetting, isFile);
|
|
}
|
|
|
|
public static string BuildShaderSettingString(bool isFile, ref bool useBaseShadow, ref bool useOutlineShadow)
|
|
{
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
useBaseShadow = (shaderSetting.LIL_FEATURE_SHADOW && shaderSetting.LIL_FEATURE_RECEIVE_SHADOW) || shaderSetting.LIL_FEATURE_BACKLIGHT;
|
|
useOutlineShadow = shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW;
|
|
string shaderSettingString = BuildShaderSettingString(shaderSetting, isFile);
|
|
return shaderSettingString;
|
|
}
|
|
|
|
internal static void ApplyShaderSettingOptimized(List<Shader> shaders = null)
|
|
{
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
TurnOffAllShaderSetting(ref shaderSetting);
|
|
|
|
// Get materials
|
|
foreach(string guid in AssetDatabase.FindAssets("t:material"))
|
|
{
|
|
Material material = AssetDatabase.LoadAssetAtPath<Material>(lilDirectoryManager.GUIDToPath(guid));
|
|
SetupShaderSettingFromMaterial(material, ref shaderSetting);
|
|
}
|
|
|
|
// Get animations
|
|
foreach(string guid in AssetDatabase.FindAssets("t:animationclip"))
|
|
{
|
|
AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(lilDirectoryManager.GUIDToPath(guid));
|
|
SetupShaderSettingFromAnimationClip(clip, ref shaderSetting);
|
|
}
|
|
|
|
// Apply
|
|
ApplyShaderSetting(shaderSetting, "[lilToon] PreprocessBuild", shaders);
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
internal static void GetOptimizedSetting(Material[] materials, AnimationClip[] clips, out string usedShaders, out string optimizedHLSL, out string shaderSettingText)
|
|
{
|
|
usedShaders = null;
|
|
optimizedHLSL = null;
|
|
shaderSettingText = null;
|
|
|
|
var shaders = GetShaderListFromGameObject(materials, clips);
|
|
if(shaders.Count() == 0) return;
|
|
|
|
var shaderNames = new List<string>();
|
|
foreach(Shader shader in shaders) shaderNames.Add(shader.name);
|
|
usedShaders = string.Join(Environment.NewLine, shaderNames.ToArray());
|
|
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
TurnOffAllShaderSetting(ref shaderSetting);
|
|
|
|
optimizedHLSL = lilOptimizer.GetOptimizedText(materials, clips);
|
|
|
|
// Get materials
|
|
foreach(var material in materials)
|
|
{
|
|
SetupShaderSettingFromMaterial(material, ref shaderSetting);
|
|
}
|
|
|
|
// Get animations
|
|
foreach(var clip in clips)
|
|
{
|
|
SetupShaderSettingFromAnimationClip(clip, ref shaderSetting, true);
|
|
}
|
|
|
|
shaderSettingText = BuildShaderSettingString(shaderSetting, false);
|
|
}
|
|
|
|
internal static void SetShaderSettingBeforeBuild(Material[] materials, AnimationClip[] clips)
|
|
{
|
|
try
|
|
{
|
|
if(!ShouldOptimization()) return;
|
|
var shaders = GetShaderListFromGameObject(materials, clips);
|
|
if(shaders.Count() == 0) return;
|
|
|
|
var shaderNames = new List<string>();
|
|
foreach(Shader shader in shaders) shaderNames.Add(shader.name);
|
|
File.WriteAllText(lilDirectoryManager.postBuildTempPath, string.Join(",", shaderNames.ToArray()));
|
|
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
TurnOffAllShaderSetting(ref shaderSetting);
|
|
|
|
lilOptimizer.OptimizeInputHLSL(materials, clips);
|
|
|
|
// Get materials
|
|
foreach(var material in materials)
|
|
{
|
|
SetupShaderSettingFromMaterial(material, ref shaderSetting);
|
|
}
|
|
|
|
// Get animations
|
|
foreach(var clip in clips)
|
|
{
|
|
SetupShaderSettingFromAnimationClip(clip, ref shaderSetting, true);
|
|
}
|
|
|
|
// Apply
|
|
ApplyShaderSetting(shaderSetting, "[lilToon] PreprocessBuild", shaders, true);
|
|
AssetDatabase.Refresh();
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
Debug.LogException(e);
|
|
Debug.Log("[lilToon] SetShaderSettingBeforeBuild() failed");
|
|
}
|
|
}
|
|
|
|
internal static void SetShaderSettingBeforeBuild()
|
|
{
|
|
try
|
|
{
|
|
if(!ShouldOptimization()) return;
|
|
var shaders = GetShaderListFromProject();
|
|
|
|
var shaderNames = new List<string>();
|
|
foreach(Shader shader in shaders) shaderNames.Add(shader.name);
|
|
File.WriteAllText(lilDirectoryManager.postBuildTempPath, string.Join(",", shaderNames.ToArray()));
|
|
|
|
ApplyShaderSettingOptimized(shaders);
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
Debug.LogException(e);
|
|
Debug.Log("[lilToon] Optimization failed");
|
|
}
|
|
}
|
|
|
|
internal static void SetShaderSettingAfterBuild()
|
|
{
|
|
try
|
|
{
|
|
if(!File.Exists(lilDirectoryManager.postBuildTempPath)) return;
|
|
string[] shaderNames = File.ReadAllText(lilDirectoryManager.postBuildTempPath).Split(',');
|
|
File.Delete(lilDirectoryManager.postBuildTempPath);
|
|
if(!ShouldOptimization()) return;
|
|
if(File.Exists(lilDirectoryManager.forceOptimizeBuildTempPath)) File.Delete(lilDirectoryManager.forceOptimizeBuildTempPath);
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
|
|
lilOptimizer.ResetInputHLSL();
|
|
|
|
var shaders = new List<Shader>();
|
|
if(shaderNames.Length > 0)
|
|
{
|
|
foreach(string shaderName in shaderNames)
|
|
{
|
|
Shader usePassShader = Shader.Find(shaderName);
|
|
if(usePassShader != null) shaders.Add(usePassShader);
|
|
}
|
|
}
|
|
if(shaderSetting.isDebugOptimize)
|
|
{
|
|
ApplyShaderSettingOptimized();
|
|
}
|
|
else
|
|
{
|
|
TurnOnAllShaderSetting(ref shaderSetting);
|
|
ApplyShaderSetting(shaderSetting, "[lilToon] PostprocessBuild", shaders, false);
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
Debug.LogException(e);
|
|
Debug.Log("[lilToon] SetShaderSettingAfterBuild() failed");
|
|
}
|
|
}
|
|
|
|
internal static void SetupShaderSettingFromMaterial(Material material, ref lilToonSetting shaderSetting)
|
|
{
|
|
if(material == null || material.shader == null) return;
|
|
if(material.shader.name.Contains("Lite") || material.shader.name.Contains("Multi")) return;
|
|
if(!lilMaterialUtils.CheckShaderIslilToon(material.shader)) return;
|
|
|
|
if(!shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV && material.HasProperty("_MainTex_ScrollRotate") && material.GetVector("_MainTex_ScrollRotate") != lilConstants.defaultScrollRotate)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANIMATE_MAIN_UV : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_SHADOW && material.HasProperty("_UseShadow") && material.GetFloat("_UseShadow") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_SHADOW : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_SHADOW = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_RECEIVE_SHADOW && material.HasProperty("_UseShadow") && material.GetFloat("_UseShadow") != 0.0f && (
|
|
(material.HasProperty("_ShadowReceive") && material.GetFloat("_ShadowReceive") > 0.0f) ||
|
|
(material.HasProperty("_Shadow2ndReceive") && material.GetFloat("_Shadow2ndReceive") > 0.0f) ||
|
|
(material.HasProperty("_Shadow3rdReceive") && material.GetFloat("_Shadow3rdReceive") > 0.0f))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_RECEIVE_SHADOW : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_RECEIVE_SHADOW = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_DISTANCE_FADE && material.HasProperty("_DistanceFade") && material.GetVector("_DistanceFade").z != lilConstants.defaultDistanceFadeParams.z)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_DISTANCE_FADE : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_DISTANCE_FADE = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_SHADOW_3RD && material.HasProperty("_Shadow3rdColor") && material.GetColor("_Shadow3rdColor").a != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_SHADOW_3RD : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_SHADOW_3RD = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_SHADOW_LUT && material.HasProperty("_ShadowColorType") && material.GetFloat("_ShadowColorType") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_SHADOW_LUT : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_SHADOW_LUT = true;
|
|
}
|
|
|
|
if(material.shader.name.Contains("Fur"))
|
|
{
|
|
if(!shaderSetting.LIL_FEATURE_FUR_COLLISION && material.HasProperty("_FurTouchStrength") && material.GetFloat("_FurTouchStrength") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_FUR_COLLISION : " + AssetDatabase.GetAssetPath(material));
|
|
Debug.Log("[lilToon] LIL_OPTIMIZE_USE_VERTEXLIGHT : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_FUR_COLLISION = true;
|
|
shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT = true;
|
|
}
|
|
}
|
|
|
|
if(!shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION && material.HasProperty("_MainTexHSVG") && material.GetVector("_MainTexHSVG") != lilConstants.defaultHSVG)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MAIN_TONE_CORRECTION : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP && material.HasProperty("_MainGradationStrength") && material.GetFloat("_MainGradationStrength") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MAIN_GRADATION_MAP : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_MAIN2ND && material.HasProperty("_UseMain2ndTex") && material.GetFloat("_UseMain2ndTex") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MAIN2ND : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MAIN2ND = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_MAIN3RD && material.HasProperty("_UseMain3rdTex") && material.GetFloat("_UseMain3rdTex") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MAIN3RD : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MAIN3RD = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_DECAL && (
|
|
(material.HasProperty("_Main2ndTexIsDecal") && material.GetFloat("_Main2ndTexIsDecal") != 0.0f) ||
|
|
(material.HasProperty("_Main3rdTexIsDecal") && material.GetFloat("_Main3rdTexIsDecal") != 0.0f))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_DECAL : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_DECAL = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_ANIMATE_DECAL && (
|
|
(material.HasProperty("_Main2ndTexDecalAnimation") && material.GetVector("_Main2ndTexDecalAnimation") != lilConstants.defaultDecalAnim) ||
|
|
(material.HasProperty("_Main3rdTexDecalAnimation") && material.GetVector("_Main3rdTexDecalAnimation") != lilConstants.defaultDecalAnim))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANIMATE_DECAL : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANIMATE_DECAL = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_LAYER_DISSOLVE && (
|
|
(material.HasProperty("_Main2ndDissolveParams") && material.GetVector("_Main2ndDissolveParams").x != lilConstants.defaultDissolveParams.x) ||
|
|
(material.HasProperty("_Main3rdDissolveParams") && material.GetVector("_Main3rdDissolveParams").x != lilConstants.defaultDissolveParams.x))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_LAYER_DISSOLVE : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_LAYER_DISSOLVE = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_ALPHAMASK && material.HasProperty("_AlphaMaskMode") && material.GetFloat("_AlphaMaskMode") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ALPHAMASK : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ALPHAMASK = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_EMISSION_1ST && material.HasProperty("_UseEmission") && material.GetFloat("_UseEmission") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_EMISSION_1ST : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_EMISSION_1ST = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_EMISSION_2ND && material.HasProperty("_UseEmission2nd") && material.GetFloat("_UseEmission2nd") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_EMISSION_2ND : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_EMISSION_2ND = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV && (
|
|
(material.HasProperty("_EmissionMap_ScrollRotate") && material.GetVector("_EmissionMap_ScrollRotate") != lilConstants.defaultScrollRotate) ||
|
|
(material.HasProperty("_Emission2ndMap_ScrollRotate") && material.GetVector("_Emission2ndMap_ScrollRotate") != lilConstants.defaultScrollRotate))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANIMATE_EMISSION_UV : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV && (
|
|
(material.HasProperty("_EmissionBlendMask_ScrollRotate") && material.GetVector("_EmissionBlendMask_ScrollRotate") != lilConstants.defaultScrollRotate) ||
|
|
(material.HasProperty("_Emission2ndBlendMask_ScrollRotate") && material.GetVector("_Emission2ndBlendMask_ScrollRotate") != lilConstants.defaultScrollRotate))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANIMATE_EMISSION_MASK_UV : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_EMISSION_GRADATION && (
|
|
(material.HasProperty("_EmissionUseGrad") && material.GetFloat("_EmissionUseGrad") != 0.0f) ||
|
|
(material.HasProperty("_Emission2ndUseGrad") && material.GetFloat("_Emission2ndUseGrad") != 0.0f))
|
|
)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_EMISSION_GRADATION : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_EMISSION_GRADATION = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_NORMAL_1ST && material.HasProperty("_UseBumpMap") && material.GetFloat("_UseBumpMap") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_NORMAL_1ST : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_NORMAL_1ST = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_NORMAL_2ND && material.HasProperty("_UseBump2ndMap") && material.GetFloat("_UseBump2ndMap") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_NORMAL_2ND : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_NORMAL_2ND = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_ANISOTROPY && material.HasProperty("_UseAnisotropy") && material.GetFloat("_UseAnisotropy") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANISOTROPY : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANISOTROPY = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_REFLECTION && material.HasProperty("_UseReflection") && material.GetFloat("_UseReflection") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_REFLECTION : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_REFLECTION = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_MATCAP && material.HasProperty("_UseMatCap") && material.GetFloat("_UseMatCap") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MATCAP : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MATCAP = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_MATCAP_2ND && material.HasProperty("_UseMatCap2nd") && material.GetFloat("_UseMatCap2nd") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_MATCAP_2ND : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_MATCAP_2ND = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_RIMLIGHT && material.HasProperty("_UseRim") && material.GetFloat("_UseRim") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_RIMLIGHT : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION && material.HasProperty("_RimDirStrength") && material.GetFloat("_RimDirStrength") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_RIMLIGHT_DIRECTION : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_GLITTER && material.HasProperty("_UseGlitter") && material.GetFloat("_UseGlitter") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_GLITTER : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_GLITTER = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_BACKLIGHT && material.HasProperty("_UseBacklight") && material.GetFloat("_UseBacklight") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_BACKLIGHT : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_BACKLIGHT = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_PARALLAX && material.HasProperty("_UseParallax") && material.GetFloat("_UseParallax") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_PARALLAX : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_PARALLAX = true;
|
|
if(!shaderSetting.LIL_FEATURE_POM && material.HasProperty("_UsePOM") && material.GetFloat("_UsePOM") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_POM : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_POM = true;
|
|
}
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_AUDIOLINK && material.HasProperty("_UseAudioLink") && material.GetFloat("_UseAudioLink") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_AUDIOLINK : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX && material.HasProperty("_AudioLink2Vertex") && material.GetFloat("_AudioLink2Vertex") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_AUDIOLINK_VERTEX : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL && material.HasProperty("_AudioLinkAsLocal") && material.GetFloat("_AudioLinkAsLocal") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_AUDIOLINK_LOCAL : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_DISSOLVE && material.HasProperty("_DissolveParams") && material.GetVector("_DissolveParams").x != lilConstants.defaultDissolveParams.x)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_DISSOLVE : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_DISSOLVE = true;
|
|
}
|
|
|
|
// Outline
|
|
if(material.shader.name.Contains("Outline"))
|
|
{
|
|
if(!shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV && material.HasProperty("_OutlineTex_ScrollRotate") && material.GetVector("_OutlineTex_ScrollRotate") != lilConstants.defaultScrollRotate)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_ANIMATE_OUTLINE_UV : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION && material.HasProperty("_OutlineTexHSVG") && material.GetVector("_OutlineTexHSVG") != lilConstants.defaultHSVG)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_OUTLINE_TONE_CORRECTION : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION = true;
|
|
}
|
|
if(!shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW && material.HasProperty("_OutlineLitShadowReceive") && material.GetFloat("_OutlineLitShadowReceive") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_FEATURE_OUTLINE_RECEIVE_SHADOW : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW = true;
|
|
}
|
|
}
|
|
|
|
if(!shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT && material.HasProperty("_VertexLightStrength") && material.GetFloat("_VertexLightStrength") != 0.0f)
|
|
{
|
|
Debug.Log("[lilToon] LIL_OPTIMIZE_USE_VERTEXLIGHT : " + AssetDatabase.GetAssetPath(material));
|
|
shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT = true;
|
|
}
|
|
|
|
// Texture
|
|
CheckTextures(ref shaderSetting, material);
|
|
}
|
|
|
|
private static void SetupShaderSettingFromAnimationClip(AnimationClip clip, ref lilToonSetting shaderSetting, bool shouldCheckMaterial = false)
|
|
{
|
|
if(clip == null) return;
|
|
|
|
if(shouldCheckMaterial)
|
|
{
|
|
foreach(EditorCurveBinding binding in AnimationUtility.GetObjectReferenceCurveBindings(clip))
|
|
{
|
|
foreach(ObjectReferenceKeyframe frame in AnimationUtility.GetObjectReferenceCurve(clip, binding))
|
|
{
|
|
if(frame.value is Material)
|
|
{
|
|
SetupShaderSettingFromMaterial((Material)frame.value, ref shaderSetting);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach(EditorCurveBinding binding in AnimationUtility.GetCurveBindings(clip))
|
|
{
|
|
string propname = binding.propertyName;
|
|
if(string.IsNullOrEmpty(propname) || !propname.Contains("material.")) continue;
|
|
|
|
shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV = shaderSetting.LIL_FEATURE_ANIMATE_MAIN_UV || propname.Contains("_MainTex_ScrollRotate");
|
|
shaderSetting.LIL_FEATURE_SHADOW = shaderSetting.LIL_FEATURE_SHADOW || propname.Contains("_UseShadow");
|
|
shaderSetting.LIL_FEATURE_RECEIVE_SHADOW = shaderSetting.LIL_FEATURE_RECEIVE_SHADOW || propname.Contains("_ShadowReceive") || propname.Contains("_Shadow2ndReceive") || propname.Contains("_Shadow3rdReceive");
|
|
shaderSetting.LIL_FEATURE_DISTANCE_FADE = shaderSetting.LIL_FEATURE_DISTANCE_FADE || propname.Contains("_DistanceFade");
|
|
shaderSetting.LIL_FEATURE_SHADOW_3RD = shaderSetting.LIL_FEATURE_SHADOW_3RD || propname.Contains("_Shadow3rdColor");
|
|
shaderSetting.LIL_FEATURE_SHADOW_LUT = shaderSetting.LIL_FEATURE_SHADOW_LUT || propname.Contains("_ShadowColorType");
|
|
|
|
shaderSetting.LIL_FEATURE_FUR_COLLISION = shaderSetting.LIL_FEATURE_FUR_COLLISION || propname.Contains("_FurTouchStrength");
|
|
|
|
shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION = shaderSetting.LIL_FEATURE_MAIN_TONE_CORRECTION || propname.Contains("_MainTexHSVG");
|
|
shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP = shaderSetting.LIL_FEATURE_MAIN_GRADATION_MAP || propname.Contains("_MainGradationStrength");
|
|
shaderSetting.LIL_FEATURE_MAIN2ND = shaderSetting.LIL_FEATURE_MAIN2ND || propname.Contains("_UseMain2ndTex");
|
|
shaderSetting.LIL_FEATURE_MAIN3RD = shaderSetting.LIL_FEATURE_MAIN3RD || propname.Contains("_UseMain3rdTex");
|
|
shaderSetting.LIL_FEATURE_DECAL = shaderSetting.LIL_FEATURE_DECAL || propname.Contains("_Main2ndTexIsDecal") || propname.Contains("_Main3rdTexIsDecal");
|
|
shaderSetting.LIL_FEATURE_ANIMATE_DECAL = shaderSetting.LIL_FEATURE_ANIMATE_DECAL || propname.Contains("_Main2ndTexDecalAnimation") || propname.Contains("_Main3rdTexDecalAnimation");
|
|
shaderSetting.LIL_FEATURE_LAYER_DISSOLVE = shaderSetting.LIL_FEATURE_LAYER_DISSOLVE || propname.Contains("_Main2ndDissolveParams") || propname.Contains("_Main3rdDissolveParams");
|
|
shaderSetting.LIL_FEATURE_ALPHAMASK = shaderSetting.LIL_FEATURE_ALPHAMASK || propname.Contains("_AlphaMaskMode");
|
|
shaderSetting.LIL_FEATURE_EMISSION_1ST = shaderSetting.LIL_FEATURE_EMISSION_1ST || propname.Contains("_UseEmission");
|
|
shaderSetting.LIL_FEATURE_EMISSION_2ND = shaderSetting.LIL_FEATURE_EMISSION_2ND || propname.Contains("_UseEmission2nd");
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV = shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_UV || propname.Contains("_EmissionMap_ScrollRotate") || propname.Contains("_Emission2ndMap_ScrollRotate");
|
|
shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV = shaderSetting.LIL_FEATURE_ANIMATE_EMISSION_MASK_UV || propname.Contains("_EmissionBlendMask_ScrollRotate") || propname.Contains("_Emission2ndBlendMask_ScrollRotate");
|
|
shaderSetting.LIL_FEATURE_EMISSION_GRADATION = shaderSetting.LIL_FEATURE_EMISSION_GRADATION || propname.Contains("_EmissionUseGrad");
|
|
shaderSetting.LIL_FEATURE_NORMAL_1ST = shaderSetting.LIL_FEATURE_NORMAL_1ST || propname.Contains("_UseBumpMap");
|
|
shaderSetting.LIL_FEATURE_NORMAL_2ND = shaderSetting.LIL_FEATURE_NORMAL_2ND || propname.Contains("_UseBump2ndMap");
|
|
shaderSetting.LIL_FEATURE_ANISOTROPY = shaderSetting.LIL_FEATURE_ANISOTROPY || propname.Contains("_UseAnisotropy");
|
|
shaderSetting.LIL_FEATURE_REFLECTION = shaderSetting.LIL_FEATURE_REFLECTION || propname.Contains("_UseReflection");
|
|
shaderSetting.LIL_FEATURE_MATCAP = shaderSetting.LIL_FEATURE_MATCAP || propname.Contains("_UseMatCap");
|
|
shaderSetting.LIL_FEATURE_MATCAP_2ND = shaderSetting.LIL_FEATURE_MATCAP_2ND || propname.Contains("_UseMatCap2nd");
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT = shaderSetting.LIL_FEATURE_RIMLIGHT || propname.Contains("_UseRim");
|
|
shaderSetting.LIL_FEATURE_GLITTER = shaderSetting.LIL_FEATURE_GLITTER || propname.Contains("_UseGlitter");
|
|
shaderSetting.LIL_FEATURE_BACKLIGHT = shaderSetting.LIL_FEATURE_BACKLIGHT || propname.Contains("_UseBacklight");
|
|
shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION = shaderSetting.LIL_FEATURE_RIMLIGHT_DIRECTION || propname.Contains("_RimDirStrength");
|
|
shaderSetting.LIL_FEATURE_PARALLAX = shaderSetting.LIL_FEATURE_PARALLAX || propname.Contains("_UseParallax");
|
|
shaderSetting.LIL_FEATURE_POM = shaderSetting.LIL_FEATURE_POM || propname.Contains("_UsePOM");
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK = shaderSetting.LIL_FEATURE_AUDIOLINK || propname.Contains("_UseAudioLink");
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX = shaderSetting.LIL_FEATURE_AUDIOLINK_VERTEX || propname.Contains("_AudioLink2Vertex");
|
|
shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL = shaderSetting.LIL_FEATURE_AUDIOLINK_LOCAL || propname.Contains("_AudioLinkAsLocal");
|
|
shaderSetting.LIL_FEATURE_DISSOLVE = shaderSetting.LIL_FEATURE_DISSOLVE || propname.Contains("_DissolveParams");
|
|
|
|
shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV = shaderSetting.LIL_FEATURE_ANIMATE_OUTLINE_UV || propname.Contains("_OutlineTex_ScrollRotate");
|
|
shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION = shaderSetting.LIL_FEATURE_OUTLINE_TONE_CORRECTION || propname.Contains("_OutlineTexHSVG");
|
|
shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW = shaderSetting.LIL_FEATURE_OUTLINE_RECEIVE_SHADOW || propname.Contains("_OutlineLitShadowReceive");
|
|
|
|
shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT = shaderSetting.LIL_OPTIMIZE_USE_VERTEXLIGHT || shaderSetting.LIL_FEATURE_FUR_COLLISION || propname.Contains("_VertexLightStrength");
|
|
|
|
// Texture
|
|
CheckTextures(ref shaderSetting, propname);
|
|
}
|
|
}
|
|
|
|
internal static void CheckTextures(ref lilToonSetting shaderSetting)
|
|
{
|
|
// Get materials
|
|
foreach(string guid in AssetDatabase.FindAssets("t:material"))
|
|
{
|
|
Material material = AssetDatabase.LoadAssetAtPath<Material>(lilDirectoryManager.GUIDToPath(guid));
|
|
CheckTextures(ref shaderSetting, material);
|
|
}
|
|
|
|
// Get animations
|
|
foreach(string guid in AssetDatabase.FindAssets("t:animationclip"))
|
|
{
|
|
AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(lilDirectoryManager.GUIDToPath(guid));
|
|
foreach(EditorCurveBinding binding in AnimationUtility.GetCurveBindings(clip))
|
|
{
|
|
string propname = binding.propertyName;
|
|
if(string.IsNullOrEmpty(propname) || !propname.Contains("material.")) continue;
|
|
|
|
CheckTextures(ref shaderSetting, propname);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static void CheckTextures(ref lilToonSetting shaderSetting, Material material)
|
|
{
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MainGradationTex , "_MainGradationTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MainColorAdjustMask , "_MainColorAdjustMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main2ndTex , "_Main2ndTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main2ndBlendMask , "_Main2ndBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main2ndDissolveMask , "_Main2ndDissolveMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask , "_Main2ndDissolveNoiseMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main3rdTex , "_Main3rdTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main3rdBlendMask , "_Main3rdBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main3rdDissolveMask , "_Main3rdDissolveMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask , "_Main3rdDissolveNoiseMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AlphaMask , "_AlphaMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_BumpMap , "_BumpMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Bump2ndMap , "_Bump2ndMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Bump2ndScaleMask , "_Bump2ndScaleMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AnisotropyTangentMap , "_AnisotropyTangentMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AnisotropyScaleMask , "_AnisotropyScaleMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask , "_AnisotropyShiftNoiseMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ShadowBorderMask , "_ShadowBorderMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ShadowBlurMask , "_ShadowBlurMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ShadowStrengthMask , "_ShadowStrengthMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ShadowColorTex , "_ShadowColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Shadow2ndColorTex , "_Shadow2ndColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Shadow3rdColorTex , "_Shadow3rdColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_BacklightColorTex , "_BacklightColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_SmoothnessTex , "_SmoothnessTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MetallicGlossMap , "_MetallicGlossMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ReflectionColorTex , "_ReflectionColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ReflectionCubeTex , "_ReflectionCubeTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCapTex , "_MatCapTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCapBlendMask , "_MatCapBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCapBumpMap , "_MatCapBumpMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCap2ndTex , "_MatCap2ndTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCap2ndBlendMask , "_MatCap2ndBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_MatCap2ndBumpMap , "_MatCap2ndBumpMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_RimColorTex , "_RimColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_GlitterColorTex , "_GlitterColorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_GlitterShapeTex , "_GlitterShapeTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_EmissionMap , "_EmissionMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_EmissionBlendMask , "_EmissionBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_EmissionGradTex , "_EmissionGradTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Emission2ndMap , "_Emission2ndMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Emission2ndBlendMask , "_Emission2ndBlendMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_Emission2ndGradTex , "_Emission2ndGradTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_ParallaxMap , "_ParallaxMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AudioLinkMask , "_AudioLinkMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_AudioLinkLocalMap , "_AudioLinkLocalMap", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_DissolveMask , "_DissolveMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_DissolveNoiseMask , "_DissolveNoiseMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_OutlineTex , "_OutlineTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_OutlineWidthMask , "_OutlineWidthMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_OutlineVectorTex , "_OutlineVectorTex", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_FurNoiseMask , "_FurNoiseMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_FurMask , "_FurMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_FurLengthMask , "_FurLengthMask", material);
|
|
CheckTexture(ref shaderSetting.LIL_FEATURE_FurVectorTex , "_FurVectorTex", material);
|
|
}
|
|
|
|
internal static void CheckTextures(ref lilToonSetting shaderSetting, string propname)
|
|
{
|
|
shaderSetting.LIL_FEATURE_MainGradationTex = shaderSetting.LIL_FEATURE_MainGradationTex || propname.Contains("_MainGradationTex");
|
|
shaderSetting.LIL_FEATURE_MainColorAdjustMask = shaderSetting.LIL_FEATURE_MainColorAdjustMask || propname.Contains("_MainColorAdjustMask");
|
|
shaderSetting.LIL_FEATURE_Main2ndTex = shaderSetting.LIL_FEATURE_Main2ndTex || propname.Contains("_Main2ndTex");
|
|
shaderSetting.LIL_FEATURE_Main2ndBlendMask = shaderSetting.LIL_FEATURE_Main2ndBlendMask || propname.Contains("_Main2ndBlendMask");
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveMask = shaderSetting.LIL_FEATURE_Main2ndDissolveMask || propname.Contains("_Main2ndDissolveMask");
|
|
shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask = shaderSetting.LIL_FEATURE_Main2ndDissolveNoiseMask || propname.Contains("_Main2ndDissolveNoiseMask");
|
|
shaderSetting.LIL_FEATURE_Main3rdTex = shaderSetting.LIL_FEATURE_Main3rdTex || propname.Contains("_Main3rdTex");
|
|
shaderSetting.LIL_FEATURE_Main3rdBlendMask = shaderSetting.LIL_FEATURE_Main3rdBlendMask || propname.Contains("_Main3rdBlendMask");
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveMask = shaderSetting.LIL_FEATURE_Main3rdDissolveMask || propname.Contains("_Main3rdDissolveMask");
|
|
shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask = shaderSetting.LIL_FEATURE_Main3rdDissolveNoiseMask || propname.Contains("_Main3rdDissolveNoiseMask");
|
|
shaderSetting.LIL_FEATURE_AlphaMask = shaderSetting.LIL_FEATURE_AlphaMask || propname.Contains("_AlphaMask");
|
|
shaderSetting.LIL_FEATURE_BumpMap = shaderSetting.LIL_FEATURE_BumpMap || propname.Contains("_BumpMap");
|
|
shaderSetting.LIL_FEATURE_Bump2ndMap = shaderSetting.LIL_FEATURE_Bump2ndMap || propname.Contains("_Bump2ndMap");
|
|
shaderSetting.LIL_FEATURE_Bump2ndScaleMask = shaderSetting.LIL_FEATURE_Bump2ndScaleMask || propname.Contains("_Bump2ndScaleMask");
|
|
shaderSetting.LIL_FEATURE_AnisotropyTangentMap = shaderSetting.LIL_FEATURE_AnisotropyTangentMap || propname.Contains("_AnisotropyTangentMap");
|
|
shaderSetting.LIL_FEATURE_AnisotropyScaleMask = shaderSetting.LIL_FEATURE_AnisotropyScaleMask || propname.Contains("_AnisotropyScaleMask");
|
|
shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask = shaderSetting.LIL_FEATURE_AnisotropyShiftNoiseMask || propname.Contains("_AnisotropyShiftNoiseMask");
|
|
shaderSetting.LIL_FEATURE_ShadowBorderMask = shaderSetting.LIL_FEATURE_ShadowBorderMask || propname.Contains("_ShadowBorderMask");
|
|
shaderSetting.LIL_FEATURE_ShadowBlurMask = shaderSetting.LIL_FEATURE_ShadowBlurMask || propname.Contains("_ShadowBlurMask");
|
|
shaderSetting.LIL_FEATURE_ShadowStrengthMask = shaderSetting.LIL_FEATURE_ShadowStrengthMask || propname.Contains("_ShadowStrengthMask");
|
|
shaderSetting.LIL_FEATURE_ShadowColorTex = shaderSetting.LIL_FEATURE_ShadowColorTex || propname.Contains("_ShadowColorTex");
|
|
shaderSetting.LIL_FEATURE_Shadow2ndColorTex = shaderSetting.LIL_FEATURE_Shadow2ndColorTex || propname.Contains("_Shadow2ndColorTex");
|
|
shaderSetting.LIL_FEATURE_Shadow3rdColorTex = shaderSetting.LIL_FEATURE_Shadow3rdColorTex || propname.Contains("_Shadow3rdColorTex");
|
|
shaderSetting.LIL_FEATURE_BacklightColorTex = shaderSetting.LIL_FEATURE_BacklightColorTex || propname.Contains("_BacklightColorTex");
|
|
shaderSetting.LIL_FEATURE_SmoothnessTex = shaderSetting.LIL_FEATURE_SmoothnessTex || propname.Contains("_SmoothnessTex");
|
|
shaderSetting.LIL_FEATURE_MetallicGlossMap = shaderSetting.LIL_FEATURE_MetallicGlossMap || propname.Contains("_MetallicGlossMap");
|
|
shaderSetting.LIL_FEATURE_ReflectionColorTex = shaderSetting.LIL_FEATURE_ReflectionColorTex || propname.Contains("_ReflectionColorTex");
|
|
shaderSetting.LIL_FEATURE_ReflectionCubeTex = shaderSetting.LIL_FEATURE_ReflectionCubeTex || propname.Contains("_ReflectionCubeTex");
|
|
shaderSetting.LIL_FEATURE_MatCapTex = shaderSetting.LIL_FEATURE_MatCapTex || propname.Contains("_MatCapTex");
|
|
shaderSetting.LIL_FEATURE_MatCapBlendMask = shaderSetting.LIL_FEATURE_MatCapBlendMask || propname.Contains("_MatCapBlendMask");
|
|
shaderSetting.LIL_FEATURE_MatCapBumpMap = shaderSetting.LIL_FEATURE_MatCapBumpMap || propname.Contains("_MatCapBumpMap");
|
|
shaderSetting.LIL_FEATURE_MatCap2ndTex = shaderSetting.LIL_FEATURE_MatCap2ndTex || propname.Contains("_MatCap2ndTex");
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBlendMask = shaderSetting.LIL_FEATURE_MatCap2ndBlendMask || propname.Contains("_MatCap2ndBlendMask");
|
|
shaderSetting.LIL_FEATURE_MatCap2ndBumpMap = shaderSetting.LIL_FEATURE_MatCap2ndBumpMap || propname.Contains("_MatCap2ndBumpMap");
|
|
shaderSetting.LIL_FEATURE_RimColorTex = shaderSetting.LIL_FEATURE_RimColorTex || propname.Contains("_RimColorTex");
|
|
shaderSetting.LIL_FEATURE_GlitterColorTex = shaderSetting.LIL_FEATURE_GlitterColorTex || propname.Contains("_GlitterColorTex");
|
|
shaderSetting.LIL_FEATURE_GlitterShapeTex = shaderSetting.LIL_FEATURE_GlitterShapeTex || propname.Contains("_GlitterShapeTex");
|
|
shaderSetting.LIL_FEATURE_EmissionMap = shaderSetting.LIL_FEATURE_EmissionMap || propname.Contains("_EmissionMap");
|
|
shaderSetting.LIL_FEATURE_EmissionBlendMask = shaderSetting.LIL_FEATURE_EmissionBlendMask || propname.Contains("_EmissionBlendMask");
|
|
shaderSetting.LIL_FEATURE_EmissionGradTex = shaderSetting.LIL_FEATURE_EmissionGradTex || propname.Contains("_EmissionGradTex");
|
|
shaderSetting.LIL_FEATURE_Emission2ndMap = shaderSetting.LIL_FEATURE_Emission2ndMap || propname.Contains("_Emission2ndMap");
|
|
shaderSetting.LIL_FEATURE_Emission2ndBlendMask = shaderSetting.LIL_FEATURE_Emission2ndBlendMask || propname.Contains("_Emission2ndBlendMask");
|
|
shaderSetting.LIL_FEATURE_Emission2ndGradTex = shaderSetting.LIL_FEATURE_Emission2ndGradTex || propname.Contains("_Emission2ndGradTex");
|
|
shaderSetting.LIL_FEATURE_ParallaxMap = shaderSetting.LIL_FEATURE_ParallaxMap || propname.Contains("_ParallaxMap");
|
|
shaderSetting.LIL_FEATURE_AudioLinkMask = shaderSetting.LIL_FEATURE_AudioLinkMask || propname.Contains("_AudioLinkMask");
|
|
shaderSetting.LIL_FEATURE_AudioLinkLocalMap = shaderSetting.LIL_FEATURE_AudioLinkLocalMap || propname.Contains("_AudioLinkLocalMap");
|
|
shaderSetting.LIL_FEATURE_DissolveMask = shaderSetting.LIL_FEATURE_DissolveMask || propname.Contains("_DissolveMask");
|
|
shaderSetting.LIL_FEATURE_DissolveNoiseMask = shaderSetting.LIL_FEATURE_DissolveNoiseMask || propname.Contains("_DissolveNoiseMask");
|
|
shaderSetting.LIL_FEATURE_OutlineTex = shaderSetting.LIL_FEATURE_OutlineTex || propname.Contains("_OutlineTex");
|
|
shaderSetting.LIL_FEATURE_OutlineWidthMask = shaderSetting.LIL_FEATURE_OutlineWidthMask || propname.Contains("_OutlineWidthMask");
|
|
shaderSetting.LIL_FEATURE_OutlineVectorTex = shaderSetting.LIL_FEATURE_OutlineVectorTex || propname.Contains("_OutlineVectorTex");
|
|
shaderSetting.LIL_FEATURE_FurNoiseMask = shaderSetting.LIL_FEATURE_FurNoiseMask || propname.Contains("_FurNoiseMask");
|
|
shaderSetting.LIL_FEATURE_FurMask = shaderSetting.LIL_FEATURE_FurMask || propname.Contains("_FurMask");
|
|
shaderSetting.LIL_FEATURE_FurLengthMask = shaderSetting.LIL_FEATURE_FurLengthMask || propname.Contains("_FurLengthMask");
|
|
shaderSetting.LIL_FEATURE_FurVectorTex = shaderSetting.LIL_FEATURE_FurVectorTex || propname.Contains("_FurVectorTex");
|
|
}
|
|
|
|
private static void CheckTexture(ref bool LIL_FEATURE_Tex, string propname, Material material)
|
|
{
|
|
if(LIL_FEATURE_Tex || !material.HasProperty(propname) || material.GetTexture(propname) == null) return;
|
|
Debug.Log("[lilToon] " + propname + " : " + AssetDatabase.GetAssetPath(material));
|
|
LIL_FEATURE_Tex = true;
|
|
}
|
|
|
|
internal static void ForceOptimization()
|
|
{
|
|
if(File.Exists(lilDirectoryManager.forceOptimizeBuildTempPath)) return;
|
|
File.Create(lilDirectoryManager.forceOptimizeBuildTempPath);
|
|
}
|
|
|
|
internal static bool ShouldOptimization()
|
|
{
|
|
if(File.Exists(lilDirectoryManager.postBuildTempPath)) return false;
|
|
if(File.Exists(lilDirectoryManager.forceOptimizeBuildTempPath)) return true;
|
|
|
|
lilToonSetting shaderSetting = null;
|
|
InitializeShaderSetting(ref shaderSetting);
|
|
#if VRC_SDK_VRCSDK3 && !UDON
|
|
return shaderSetting.isOptimizeInTestBuild && !shaderSetting.isDebugOptimize;
|
|
#else
|
|
return !shaderSetting.isDebugOptimize;
|
|
#endif
|
|
}
|
|
|
|
private static List<Shader> GetShaderListFromProject()
|
|
{
|
|
var shaders = new List<Shader>();
|
|
|
|
foreach(string guid in AssetDatabase.FindAssets("t:material"))
|
|
{
|
|
Material material = AssetDatabase.LoadAssetAtPath<Material>(lilDirectoryManager.GUIDToPath(guid));
|
|
if(lilMaterialUtils.CheckShaderIslilToon(material)) shaders.Add(material.shader);
|
|
}
|
|
|
|
return GetTrueShaderLists(shaders);
|
|
}
|
|
|
|
private static List<Shader> GetShaderListFromGameObject(Material[] materials, AnimationClip[] clips)
|
|
{
|
|
var shaders = new List<Shader>();
|
|
|
|
foreach(var material in materials)
|
|
{
|
|
if(lilMaterialUtils.CheckShaderIslilToon(material)) shaders.Add(material.shader);
|
|
}
|
|
|
|
foreach(var clip in clips)
|
|
{
|
|
CheckAnimationClip(clip, shaders);
|
|
}
|
|
|
|
return GetTrueShaderLists(shaders);
|
|
}
|
|
|
|
private static List<Shader> GetTrueShaderLists(List<Shader> shaders)
|
|
{
|
|
shaders = shaders.Distinct().ToList();
|
|
for(int i = 0; i < shaders.Count(); i++)
|
|
{
|
|
string path = AssetDatabase.GetAssetPath(shaders[i]);
|
|
if(string.IsNullOrEmpty(path)) continue;
|
|
TextReader sr;
|
|
if(path.Contains(".lilcontainer"))
|
|
{
|
|
sr = new StringReader(lilShaderContainer.UnpackContainer(path));
|
|
}
|
|
else
|
|
{
|
|
sr = new StreamReader(path);
|
|
}
|
|
string line;
|
|
while((line = sr.ReadLine()) != null)
|
|
{
|
|
if(!line.Contains("UsePass")) continue;
|
|
int first = line.IndexOf('"') + 1;
|
|
int second = line.IndexOf('"', first);
|
|
if(line.Substring(0, first).Contains("//")) continue;
|
|
string shaderName = line.Substring(first, second - first);
|
|
int passNameSep = shaderName.LastIndexOf('/');
|
|
shaderName = shaderName.Substring(0, passNameSep);
|
|
Shader usePassShader = Shader.Find(shaderName);
|
|
if(usePassShader != null) shaders.Add(usePassShader);
|
|
}
|
|
sr.Close();
|
|
}
|
|
return shaders.Distinct().ToList();
|
|
}
|
|
|
|
private static void CheckAnimationClip(AnimationClip clip, List<Shader> shaders)
|
|
{
|
|
foreach(EditorCurveBinding binding in AnimationUtility.GetObjectReferenceCurveBindings(clip))
|
|
{
|
|
foreach(ObjectReferenceKeyframe frame in AnimationUtility.GetObjectReferenceCurve(clip, binding))
|
|
{
|
|
if(frame.value is Material && lilMaterialUtils.CheckShaderIslilToon((Material)frame.value))
|
|
{
|
|
shaders.Add(((Material)frame.value).shader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif |