Skip to content

Commit

Permalink
Merge branch 'head_unity2019'
Browse files Browse the repository at this point in the history
  • Loading branch information
whiteflare committed Jul 9, 2023
2 parents 4d43550 + c4ccf36 commit 10b8123
Show file tree
Hide file tree
Showing 106 changed files with 940 additions and 276 deletions.
134 changes: 99 additions & 35 deletions Editor/WFEditorSetting.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,80 +32,86 @@ public class WFEditorSetting : ScriptableObject
/// ShaderStripping を有効にする
/// </summary>
[Header("Shader Build Settings")]
[Tooltip("ShaderStrippingを有効にする")]
public bool enableStripping = true;

/// <summary>
/// ShaderStripping にて未使用バリアントを削除する
/// </summary>
[Tooltip("ShaderStrippingにて未使用バリアントを削除する")]
public bool stripUnusedVariant = true;

/// <summary>
/// ShaderStripping にてFallbackシェーダを削除する
/// </summary>
[Tooltip("ShaderStrippingにてFallbackシェーダを削除する")]
public bool stripFallback = true;

/// <summary>
/// ShaderStripping にてMetaパスを削除する
/// </summary>
[Tooltip("ShaderStrippingにてMetaパスを削除する")]
public bool stripMetaPass = true;

/// <summary>
/// ShaderStripping にてLODGroupを使っていないなら対象コードを削除する
/// </summary>
[Tooltip("LODGroupを使っていないならShaderStrippingにて対象コードを削除する")]
public bool stripUnusedLodFade = true;

/// <summary>
/// ビルド時に古いマテリアルが含まれていないか検査する
/// </summary>
[Tooltip("ビルド時に古いマテリアルが含まれていないか検査する")]
public bool validateSceneMaterials = true;

/// <summary>
/// アバタービルド前にマテリアルをクリンナップする
/// </summary>
[Tooltip("アバタービルド前にマテリアルをクリンナップする")]
public bool cleanupMaterialsBeforeAvatarBuild = true;

/// <summary>
/// shaderインポート時にプロジェクトをスキャンする
/// </summary>
[Header("Editor Behaviour Settings")]
[Tooltip("shaderインポート時にプロジェクトをスキャンする")]
public bool enableScanProjects = true;

/// <summary>
/// materialインポート時にマイグレーションする
/// </summary>
[Tooltip("materialインポート時にマイグレーションする")]
public bool enableMigrationWhenImport = true;

/// <summary>
/// Quest向けシーンビルド時にMobile非対応シェーダを対応シェーダに置換する
/// </summary>
[Header("Quest Build Support")]
[Tooltip("Quest向けシーンビルド時にMobile非対応シェーダを対応シェーダに置換する")]
public bool autoSwitchQuestShader = true;

public static WFEditorSetting GetOneOfSettings()
public NearClipCancelMode enableNccInVRC3Avatar = NearClipCancelMode.ForceON;

public NearClipCancelMode enableNccInVRC3World = NearClipCancelMode.ForceOFF;

private static WFEditorSetting currentSettings = null;
private static int currentPriority = 0;

public static WFEditorSetting GetOneOfSettings(bool forceReload = false)
{
if (forceReload)
{
currentSettings = null;
}
if (currentSettings != null && currentSettings.settingPriority == currentPriority)
{
return currentSettings;
}

var settings = LoadAllSettingsFromAssetDatabase();
if (settings.Length == 0)
{
// 見つからないなら一時オブジェクトを作成して返却
return ScriptableObject.CreateInstance<WFEditorSetting>();
currentSettings = CreateInstance<WFEditorSetting>();
}
// Debug.LogFormat("[WF][Settings] Load Settings: {0}", AssetDatabase.GetAssetPath(settings[0]));
return settings[0];
}

public static WFEditorSetting[] GetAllSettings()
{
return LoadAllSettingsFromAssetDatabase();
else
{
// Debug.LogFormat("[WF][Settings] Load Settings: {0}", AssetDatabase.GetAssetPath(settings[0]));
currentSettings = settings[0];
}
currentPriority = currentSettings.settingPriority;
return currentSettings;
}

private static WFEditorSetting[] LoadAllSettingsFromAssetDatabase()
Expand All @@ -122,6 +128,28 @@ private static WFEditorSetting[] LoadAllSettingsFromAssetDatabase()
}
}

public enum NearClipCancelMode
{
PerMaterial = -1,
ForceOFF = 0,
ForceON = 1,
}

class WFEditorSettingReloader : AssetPostprocessor
{
public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath)
{
foreach (var path in importedAssets)
{
if (string.IsNullOrWhiteSpace(path))
continue;
if (AssetDatabase.LoadAssetAtPath<WFEditorSetting>(path) == null)
continue;
WFEditorSetting.GetOneOfSettings(true);
}
}
}

[CustomEditor(typeof(WFEditorSetting))]
class WFEditorSettingEditor : Editor
{
Expand All @@ -136,6 +164,8 @@ class WFEditorSettingEditor : Editor
SerializedProperty p_cleanupMaterialsBeforeAvatarBuild;
SerializedProperty p_enableMigrationWhenImport;
SerializedProperty p_autoSwitchQuestShader;
SerializedProperty p_enableNccInVRC3Avatar;
SerializedProperty p_enableNccInVRC3World;

private void OnEnable()
{
Expand All @@ -157,52 +187,86 @@ private void OnEnable()

// Quest Build Support
this.p_autoSwitchQuestShader = serializedObject.FindProperty(nameof(WFEditorSetting.autoSwitchQuestShader));

// EnableNCC
this.p_enableNccInVRC3Avatar = serializedObject.FindProperty(nameof(WFEditorSetting.enableNccInVRC3Avatar));
this.p_enableNccInVRC3World = serializedObject.FindProperty(nameof(WFEditorSetting.enableNccInVRC3World));
}

public override void OnInspectorGUI()
{
if (target == WFEditorSetting.GetOneOfSettings())
{
var msg = WFI18N.Translate("WFEditorSetting", "This is the current setting used.");
EditorGUILayout.HelpBox(msg, MessageType.Info);
}
else
{
var msg = WFI18N.Translate("WFEditorSetting", "This is not the setting used now.");
EditorGUILayout.HelpBox(msg, MessageType.Warning);
}
EditorGUILayout.Space();

serializedObject.Update();
EditorGUI.BeginChangeCheck();

// 優先度

EditorGUILayout.PropertyField(p_settingPriority);
EditorGUILayout.PropertyField(p_settingPriority, toDisplay(p_settingPriority));

// Shader Build Settings

EditorGUILayout.PropertyField(p_enableStripping);
EditorGUILayout.PropertyField(p_enableStripping, toDisplay(p_enableStripping));
using (new EditorGUI.DisabledGroupScope(!p_enableStripping.boolValue))
using (new EditorGUI.IndentLevelScope())
{
EditorGUILayout.PropertyField(p_stripUnusedVariant);
EditorGUILayout.PropertyField(p_stripUnusedLodFade);
EditorGUILayout.PropertyField(p_stripFallback);
EditorGUILayout.PropertyField(p_stripMetaPass);
EditorGUILayout.PropertyField(p_stripUnusedVariant, toDisplay(p_stripUnusedVariant));
EditorGUILayout.PropertyField(p_stripUnusedLodFade, toDisplay(p_stripUnusedLodFade));
EditorGUILayout.PropertyField(p_stripFallback, toDisplay(p_stripFallback));
EditorGUILayout.PropertyField(p_stripMetaPass, toDisplay(p_stripMetaPass));
}
EditorGUILayout.PropertyField(p_validateSceneMaterials);
EditorGUILayout.PropertyField(p_cleanupMaterialsBeforeAvatarBuild);
EditorGUILayout.PropertyField(p_validateSceneMaterials, toDisplay(p_validateSceneMaterials));
EditorGUILayout.PropertyField(p_cleanupMaterialsBeforeAvatarBuild, toDisplay(p_cleanupMaterialsBeforeAvatarBuild));

// Editor Behaviour Settings

EditorGUILayout.PropertyField(p_enableScanProjects);
EditorGUILayout.PropertyField(p_enableMigrationWhenImport);
EditorGUILayout.PropertyField(p_enableScanProjects, toDisplay(p_enableScanProjects));
EditorGUILayout.PropertyField(p_enableMigrationWhenImport, toDisplay(p_enableMigrationWhenImport));

// Quest Build Support

EditorGUILayout.PropertyField(p_autoSwitchQuestShader);

if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
}
EditorGUILayout.PropertyField(p_autoSwitchQuestShader, toDisplay(p_autoSwitchQuestShader));

// Common Material Settings

EditorGUILayout.Space();
GUI.Label(EditorGUILayout.GetControlRect(), "Common Material Settings", EditorStyles.boldLabel);

EditorGUILayout.LabelField(WFI18N.Translate("WFEditorSetting", "Cancel Near Clipping"));
using (new EditorGUI.IndentLevelScope())
{
EditorGUILayout.PropertyField(p_enableNccInVRC3Avatar, new GUIContent("For VRCSDK3 Avatar"));
EditorGUILayout.PropertyField(p_enableNccInVRC3World, new GUIContent("For VRCSDK3 World"));
}

if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
}

WFEditorPrefs.LangMode = (EditorLanguage)EditorGUILayout.EnumPopup("Editor language", WFEditorPrefs.LangMode);
}

private GUIContent toDisplay(SerializedProperty p)
{
var text = WFI18N.Translate("WFEditorSetting", p.displayName);
var tooltip = p.tooltip;
if (string.IsNullOrWhiteSpace(tooltip))
{
tooltip = text;
}
return new GUIContent(text, tooltip);
}
}
}

Expand Down
2 changes: 2 additions & 0 deletions Editor/WFEditorSettings.asset
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@ MonoBehaviour:
enableScanProjects: 1
enableMigrationWhenImport: 1
autoSwitchQuestShader: 1
enableNccInVRC3Avatar: 1
enableNccInVRC3World: 0
56 changes: 54 additions & 2 deletions Editor/WF_Common.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@

#if UNITY_EDITOR

// VRCSDK有無の判定ここから //////
#if VRC_SDK_VRCSDK3
#define ENV_VRCSDK3
#if UDON
#define ENV_VRCSDK3_WORLD
#else
#define ENV_VRCSDK3_AVATAR
#endif
#endif
// VRCSDK有無の判定ここまで //////

// #define _WF_LEGACY_FEATURE_SWITCH
// #define WF_COMMON_LOG_KEYWORD // キーワード変更時のログを出力する

Expand Down Expand Up @@ -199,10 +210,11 @@ public static bool SetupMaterial(Material mat)
var changed = false;
if (IsSupportedShader(mat))
{
changed |= SetupMaterial_DeleteKeyword(mat);
changed |= SetupMaterial_SetupKeyword(mat);
changed |= SetupMaterial_GIFrags(mat);
changed |= SetupMaterial_ClearBgPass(mat);
changed |= SetupMaterial_NearClipCancel(mat);
changed |= SetupMaterial_SetupKeyword(mat);
changed |= SetupMaterial_DeleteKeyword(mat);
}
return changed;
}
Expand Down Expand Up @@ -285,6 +297,28 @@ private static bool SetupMaterial_ClearBgPass(Material mat)
return changed;
}

private static bool SetupMaterial_NearClipCancel(Material mat)
{
bool changed = false;
#if ENV_VRCSDK3_AVATAR || ENV_VRCSDK3_WORLD
if (mat.HasProperty("_GL_NCC_Enable"))
{
var oldVal = mat.GetInt("_GL_NCC_Enable");
#if ENV_VRCSDK3_AVATAR
var newVal = (int)WFEditorSetting.GetOneOfSettings().enableNccInVRC3Avatar;
#elif ENV_VRCSDK3_WORLD
var newVal = (int)WFEditorSetting.GetOneOfSettings().enableNccInVRC3World;
#endif
if (0 <= newVal && oldVal != newVal)
{
mat.SetInt("_GL_NCC_Enable", newVal);
changed = true;
}
}
#endif
return changed;
}

#endregion

#region シェーダ切り替え
Expand Down Expand Up @@ -673,6 +707,17 @@ public static bool IsManagedUPM()
return AssetDatabase.IsValidFolder("Packages/jp.whiteflare.unlitwf");
}

public static CurrentEntironment GetCurrentEntironment()
{
#if ENV_VRCSDK3_AVATAR
return CurrentEntironment.VRCSDK3_Avatar;
#elif ENV_VRCSDK3_WORLD
return CurrentEntironment.VRCSDK3_World;
#else
return CurrentEntironment.Other;
#endif
}

public const string KWD_EDITOR_HIDE_LMAP = "_WF_EDITOR_HIDE_LMAP";

public static bool IsKwdEnableHideLmap()
Expand Down Expand Up @@ -722,6 +767,13 @@ private static void ClearSpecialProjectFlag()
#endregion
}

enum CurrentEntironment
{
VRCSDK3_Avatar,
VRCSDK3_World,
Other,
}

static class WFAccessor
{
/// <summary>
Expand Down
16 changes: 16 additions & 0 deletions Editor/WF_Dictionary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ private static bool HasPropertyPrefix(Material mat, string prefix)
// 基本機能
new WFCustomKeywordSettingBool("_UseVertexColor", "_VC_ENABLE"),
new WFCustomKeywordSettingEnum("_GL_LightMode", "_GL_AUTO_ENABLE", "_GL_ONLYDIR_ENABLE", "_GL_ONLYPOINT_ENABLE", "_GL_WSDIR_ENABLE", "_GL_LSDIR_ENABLE", "_GL_WSPOS_ENABLE"),
new WFCustomKeywordSettingBool("_GL_NCC_Enable", "_GL_NCC_ENABLE"),
new WFCustomKeywordSettingBool("_TL_LineType", "_TL_EDGE_ENABLE") {
enablePropName = "_TL_Enable",
},
Expand Down Expand Up @@ -578,6 +579,7 @@ private static Dictionary<string, WFCustomKeywordSetting> ToWFCustomKeywordSetti
new WFI18NTranslation("Custom Light Pos", "カスタムライトの位置"),
new WFI18NTranslation("Disable BackLit", "逆光補正しない"),
new WFI18NTranslation("Disable ObjectBasePos", "メッシュ原点を取得しない"),
new WFI18NTranslation("Cancel Near Clipping", "カメラのニアクリップを無視"),
// Light Bake Effects
new WFI18NTranslation("LBE", "Indirect Multiplier", "間接光の倍率"),
new WFI18NTranslation("LBE", "Emission Multiplier", "Emissionの倍率"),
Expand Down Expand Up @@ -688,6 +690,20 @@ private static Dictionary<string, WFCustomKeywordSetting> ToWFCustomKeywordSetti
new WFI18NTranslation("UnlitWF.SunSourceMode.CUSTOM_LOCAL_DIR", "カスタム(ローカル方向)"),
new WFI18NTranslation("UnlitWF.SunSourceMode.CUSTOM_WORLD_POS", "カスタム(ワールド座標)"),

// WFEditorSetting
new WFI18NTranslation("WFEditorSetting", "This is the current setting used.", "これは現在有効な設定です。"),
new WFI18NTranslation("WFEditorSetting", "This is not the setting used now.", "これは現在有効の設定ではなく、他に有効な設定があります。"),
new WFI18NTranslation("WFEditorSetting", "Enable Stripping", "不要コードを除去する"),
new WFI18NTranslation("WFEditorSetting", "Strip Unused Variant", "未使用のバリアントを除去する"),
new WFI18NTranslation("WFEditorSetting", "Strip Unused Lod Fade", "未使用のLODクロスフェードを除去"),
new WFI18NTranslation("WFEditorSetting", "Strip Fallback", "Fallbackを除去"),
new WFI18NTranslation("WFEditorSetting", "Strip Meta Pass", "Metaパスを除去"),
new WFI18NTranslation("WFEditorSetting", "Validate Scene Materials", "ビルド時に古いマテリアルが含まれていないか検査する"),
new WFI18NTranslation("WFEditorSetting", "Cleanup Materials Before Avatar Build", "アバタービルド前にマテリアルをクリンナップする"),
new WFI18NTranslation("WFEditorSetting", "Enable Scan Projects", "Shaderインポート時にプロジェクトをスキャン"),
new WFI18NTranslation("WFEditorSetting", "Enable Migration When Import", "マテリアルインポート時にマテリアルを最新化"),
new WFI18NTranslation("WFEditorSetting", "Auto Switch Quest Shader", "Quest向けシェーダに自動で切り替える"),

// その他のテキスト
new WFI18NTranslation(WFMessageText.NewerVersion, "新しいバージョンがリリースされています。\n最新版: "),
new WFI18NTranslation(WFMessageText.PlzMigration, "このマテリアルは古いバージョンで作成されたようです。\n最新版に変換しますか?"),
Expand Down
1 change: 1 addition & 0 deletions Editor/WF_MaterialConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,7 @@ protected static List<Action<SelectShaderContext>> CreateConverterList()
var resetParam = ResetParameter.Create();
resetParam.materials = new Material[]{ ctx.target };
resetParam.resetColorAlpha = true;
resetParam.resetLit = true;
// resetParam.resetUnused = true;
resetParam.resetKeywords = true;
WFMaterialEditUtility.ResetPropertiesWithoutUndo(resetParam);
Expand Down
Loading

0 comments on commit 10b8123

Please sign in to comment.