From 3453d1dd24c39fa2be951b9e872ef75f4ebd8839 Mon Sep 17 00:00:00 2001 From: tliks Date: Thu, 6 Feb 2025 18:30:20 +0900 Subject: [PATCH] chore: remove Optimize Material --- CHANGELOG.md | 2 + Editor/AutoConfigureTextureEditor.cs | 3 - Editor/OptimizeMaterial.meta | 8 -- Editor/OptimizeMaterial/General.cs | 117 ------------------ Editor/OptimizeMaterial/General.cs.meta | 11 -- Editor/OptimizeMaterial/OptimizeMaterial.cs | 37 ------ .../OptimizeMaterial/OptimizeMaterial.cs.meta | 11 -- Editor/OptimizeMaterial/lilToon.cs | 55 -------- Editor/OptimizeMaterial/lilToon.cs.meta | 11 -- Editor/PluginDefinition.cs | 14 --- Runtime/AutoConfigureTexture.cs | 6 +- 11 files changed, 7 insertions(+), 268 deletions(-) delete mode 100644 Editor/OptimizeMaterial.meta delete mode 100644 Editor/OptimizeMaterial/General.cs delete mode 100644 Editor/OptimizeMaterial/General.cs.meta delete mode 100644 Editor/OptimizeMaterial/OptimizeMaterial.cs delete mode 100644 Editor/OptimizeMaterial/OptimizeMaterial.cs.meta delete mode 100644 Editor/OptimizeMaterial/lilToon.cs delete mode 100644 Editor/OptimizeMaterial/lilToon.cs.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index f3410a2..756f286 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ### Deprecated ### Removed +- Optimize Material + - may fix an issue where the preview renderertexture was not displayed correctly in VirtualLens2. ### Fixed diff --git a/Editor/AutoConfigureTextureEditor.cs b/Editor/AutoConfigureTextureEditor.cs index 908d226..2e52929 100644 --- a/Editor/AutoConfigureTextureEditor.cs +++ b/Editor/AutoConfigureTextureEditor.cs @@ -10,7 +10,6 @@ public class AutoConfigureTextureEditor : Editor private SerializedProperty FormatMode; private SerializedProperty MaintainCrunch; private SerializedProperty OptimizeMipMap; - private SerializedProperty OptimizeMaterial; private SerializedProperty ResolutionReduction; private SerializedProperty IsPCOnly; private SerializedProperty Exclude; @@ -21,7 +20,6 @@ private void OnEnable() FormatMode = serializedObject.FindProperty(nameof(AutoConfigureTexture.FormatMode)); MaintainCrunch = serializedObject.FindProperty(nameof(AutoConfigureTexture.MaintainCrunch)); OptimizeMipMap = serializedObject.FindProperty(nameof(AutoConfigureTexture.OptimizeMipMap)); - OptimizeMaterial = serializedObject.FindProperty(nameof(AutoConfigureTexture.OptimizeMaterial)); ResolutionReduction = serializedObject.FindProperty(nameof(AutoConfigureTexture.ResolutionReduction)); IsPCOnly = serializedObject.FindProperty(nameof(AutoConfigureTexture.IsPCOnly)); Exclude = serializedObject.FindProperty(nameof(AutoConfigureTexture.Exclude)); @@ -41,7 +39,6 @@ public override void OnInspectorGUI() } } PropertyField(OptimizeMipMap); - PropertyField(OptimizeMaterial); PropertyField(ResolutionReduction); PropertyField(IsPCOnly); PropertyField(Exclude); diff --git a/Editor/OptimizeMaterial.meta b/Editor/OptimizeMaterial.meta deleted file mode 100644 index f95e78f..0000000 --- a/Editor/OptimizeMaterial.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5ed536e100a45a44da46c3d5f8bae088 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/OptimizeMaterial/General.cs b/Editor/OptimizeMaterial/General.cs deleted file mode 100644 index 7bbcf73..0000000 --- a/Editor/OptimizeMaterial/General.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEditor; -using UnityEngine; -using UnityEngine.Rendering; - -namespace com.aoyon.AutoConfigureTexture -{ - internal partial class OptimizeMaterial - { - internal static void OptimizeMaterials(IEnumerable materials) - { - var propMap = materials.Select(m => m.shader).Distinct().Where(s => s).ToDictionary(s => s, s => new ShaderPropertyContainer(s)); - - foreach(var m in materials) - { - RemoveUnusedProperties(m, propMap); - } - } - - // シェーダーで使われていないプロパティを除去 - private static void RemoveUnusedProperties(Material material, Dictionary propMap) - { - using var so = new SerializedObject(material); - so.Update(); - using var savedProps = so.FindProperty("m_SavedProperties"); - if(material.shader) - { - var dic = propMap[material.shader]; - DeleteUnused(savedProps, "m_TexEnvs", dic.textures); - DeleteUnused(savedProps, "m_Floats", dic.floats); - DeleteUnused(savedProps, "m_Colors", dic.vectors); - } - else - { - DeleteAll(savedProps, "m_TexEnvs"); - DeleteAll(savedProps, "m_Floats"); - DeleteAll(savedProps, "m_Colors"); - } - so.ApplyModifiedProperties(); - } - - private static void DeleteUnused(SerializedProperty prop, string name, HashSet names) - { - using var props = prop.FPR(name); - if(props.arraySize == 0) return; - int i = 0; - var size = props.arraySize; - var p = props.GetArrayElementAtIndex(i); - void DeleteUnused() - { - if(!names.Contains(p.GetStringInProperty("first"))) - { - p.DeleteCommand(); - if(i < --size) - { - p = props.GetArrayElementAtIndex(i); - DeleteUnused(); - } - } - else if(p.NextVisible(false)) - { - if(++i < size) DeleteUnused(); - } - } - DeleteUnused(); - p.Dispose(); - } - - private static void DeleteAll(SerializedProperty prop, string name) - { - using var props = prop.FPR(name); - props.arraySize = 0; - } - } - - // シェーダーのプロパティを検索して保持するクラス - internal class ShaderPropertyContainer - { - internal HashSet textures; - internal HashSet floats; - internal HashSet vectors; - - internal ShaderPropertyContainer(Shader shader) - { - textures = new HashSet(); - floats = new HashSet(); - vectors = new HashSet(); - - var count = shader.GetPropertyCount(); - - for(int i = 0; i < count; i++) - { - var t = shader.GetPropertyType(i); - var name = shader.GetPropertyName(i); - if(t == ShaderPropertyType.Texture) textures.Add(name); - else if(t == ShaderPropertyType.Color || t == ShaderPropertyType.Vector) vectors.Add(name); - else floats.Add(name); - } - } - } - - internal static partial class ObjHelper - { - internal static SerializedProperty FPR(this SerializedProperty property, string name) - { - return property.FindPropertyRelative(name); - } - - // stringValueを取得 - internal static string GetStringInProperty(this SerializedProperty serializedProperty, string name) - { - using var prop = serializedProperty.FPR(name); - return prop.stringValue; - } - } -} diff --git a/Editor/OptimizeMaterial/General.cs.meta b/Editor/OptimizeMaterial/General.cs.meta deleted file mode 100644 index f908737..0000000 --- a/Editor/OptimizeMaterial/General.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9fbfcd80a73a0fd46b0d4afc532078d4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/OptimizeMaterial/OptimizeMaterial.cs b/Editor/OptimizeMaterial/OptimizeMaterial.cs deleted file mode 100644 index 240a8b1..0000000 --- a/Editor/OptimizeMaterial/OptimizeMaterial.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEditor; -using System.Reflection; -using nadena.dev.ndmf; - -namespace com.aoyon.AutoConfigureTexture -{ - internal partial class OptimizeMaterial - { - - [InitializeOnLoadMethod] - static void Initialize() - { - } - - public static void Apply(BuildContext ctx, AutoConfigureTexture component) - { - if (component == null || (!component.OptimizeMaterial)) - return; - - var mapping = Utils.CopyAndRegisterMaterials(Utils.CollectMaterials(component.gameObject)); - - var materials = mapping.Values; - OptimizeMaterials(materials); -#if ACT_lILTOON_1_8_0 - OptimizelilToon(ctx, materials); -#endif - - var renderers = component.GetComponentsInChildren(true); - Utils.ReplaceMaterials(mapping, renderers); - } - - } -} diff --git a/Editor/OptimizeMaterial/OptimizeMaterial.cs.meta b/Editor/OptimizeMaterial/OptimizeMaterial.cs.meta deleted file mode 100644 index a87775e..0000000 --- a/Editor/OptimizeMaterial/OptimizeMaterial.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2a8a1125df80c7441866b5947f92ed5a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/OptimizeMaterial/lilToon.cs b/Editor/OptimizeMaterial/lilToon.cs deleted file mode 100644 index 6093b10..0000000 --- a/Editor/OptimizeMaterial/lilToon.cs +++ /dev/null @@ -1,55 +0,0 @@ -#if ACT_lILTOON_1_8_0 - -using System.Collections.Generic; -using System.Linq; -using UnityEditor; -using UnityEngine; -using UnityEngine.Rendering; -using nadena.dev.ndmf; -using VRC.SDK3.Avatars.Components; -#if ACT_MA -using nadena.dev.modular_avatar.core; -#endif - -namespace com.aoyon.AutoConfigureTexture -{ - internal partial class OptimizeMaterial - { - internal static void OptimizelilToon(BuildContext ctx, IEnumerable materials) - { - var controllers = new HashSet(); - controllers.UnionWith(ctx.AvatarRootObject.GetComponentsInChildren(true).Where(a => a.runtimeAnimatorController).Select(a => a.runtimeAnimatorController)); - VRChatHelper.GetAnimatorControllers(ctx.AvatarDescriptor, controllers); - MAHelper.GetAnimatorControllers(ctx.AvatarRootObject, controllers); - var props = controllers.SelectMany(c => c.animationClips).SelectMany(c => AnimationUtility.GetCurveBindings(c)).Select(b => b.propertyName).Where(n => n.Contains("material.")) - .Select(n => n=n.Substring("material.".Length)) - .Select(n => {if(n.Contains(".")) n=n.Substring(0, n.IndexOf(".")); return n;}).Distinct().ToArray(); - - foreach(var m in materials) - { - if(lilToon.lilMaterialUtils.CheckShaderIslilToon(m)) lilToon.lilMaterialUtils.RemoveUnusedTextureOnly(m, m.shader.name.Contains("Lite"), props); - } - } - } - - internal static class VRChatHelper - { - internal static void GetAnimatorControllers(VRCAvatarDescriptor descriptor, HashSet controllers) - { - controllers.UnionWith(descriptor.specialAnimationLayers.Where(l => l.animatorController).Select(l => l.animatorController)); - if(descriptor.customizeAnimationLayers) controllers.UnionWith(descriptor.baseAnimationLayers.Where(l => l.animatorController).Select(l => l.animatorController)); - } - } - - internal static class MAHelper - { - internal static void GetAnimatorControllers(GameObject root, HashSet controllers) - { -#if ACT_MA - var mergeAnimators = root.GetComponentsInChildren(true); - controllers.UnionWith(mergeAnimators.Select(ma => ma.animator)); -#endif - } - } -} -#endif diff --git a/Editor/OptimizeMaterial/lilToon.cs.meta b/Editor/OptimizeMaterial/lilToon.cs.meta deleted file mode 100644 index 125223a..0000000 --- a/Editor/OptimizeMaterial/lilToon.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a5425b76f2b23434a9bcd6e92dca1e34 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/PluginDefinition.cs b/Editor/PluginDefinition.cs index 4e9ed68..aa7bfee 100644 --- a/Editor/PluginDefinition.cs +++ b/Editor/PluginDefinition.cs @@ -14,20 +14,6 @@ public class PluginDefinition : Plugin protected override void Configure() { - - InPhase(BuildPhase.Resolving). - Run("Invoke Shader Optimization", ctx => - { - var root = ctx.AvatarRootObject; - - var components = root.GetComponentsInChildren(); - - foreach (var component in components) - { - OptimizeMaterial.Apply(ctx, component); - } - }); - InPhase(BuildPhase.Generating). Run("Attach TextureConfigurator", ctx => { diff --git a/Runtime/AutoConfigureTexture.cs b/Runtime/AutoConfigureTexture.cs index a647e2b..b3e656b 100644 --- a/Runtime/AutoConfigureTexture.cs +++ b/Runtime/AutoConfigureTexture.cs @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using System.Reflection; using UnityEngine; using VRC.SDKBase; @@ -28,9 +30,11 @@ public class AutoConfigureTexture: MonoBehaviour, IEditorOnly public FormatMode FormatMode = FormatMode.Balanced; public bool MaintainCrunch = true; public bool OptimizeMipMap = true; - public bool OptimizeMaterial = true; public Reduction ResolutionReduction = Reduction.Normal; public bool IsPCOnly = true; public List Exclude = new(); + + // 削除された機能。バージョンを下げたときの互換性用にフィールドは残すが、次のマイナーあたりで削除する。 + [Obsolete] public bool OptimizeMaterial = false; } } \ No newline at end of file