Changelog

Changelog #

All notable changes to this project are documented in this page.

The format is based on Keep a Changelog.

1.8.2 - 2024-12-11 #

Added #

  • - button for prefab safe set #1368

Fixed #

  • Errors with models with UV at very edge #1363
  • Errors if exactly same AnimatorController is specified for multiple playable layers #1366
  • Errors if objects removed by some component is listed on exclusions of Trace and Optimize #1367
  • OverflowException when creating prefab #1369

1.8.1 - 2024-12-01 #

Fixed #

  • Optimize Texture may break liltoon outline mask #1357

1.8.0 - 2024-11-30 #

Added #

  • AnyState to Entry/Exit optimization in Optimize Animator #1157
    • If AAO found animator layer only with AnyState, AAO tries to convert them to Entry / Exit pattern.
      • Currently due to implementation there are some patterns that can be convert but but not converted.
      • We may relax some restriction in the future.
    • Because we have to check for each condition if we use AnyState but we can check for only one (in best case) with entry/exit, this generally reduces cost for checking an parameter in a state.
    • Combined with Entry / Exit to 1D BlendTree optimization, which is implemented in previous release, your AnyState layer may be optimized to 1D BlendTree.
  • Optimize Texture in Trace nad Optimize #1181 #1184 #1193 #1215 #1225 #1235 #1268 #1278 #1313 #1328 #1338 #1334 #1346
    • Avatar Optimizer will pack texture and tries to reduce the VRAM usage.
    • Currently liltoon is only supported.
  • Copy Enablement Animation to Merge Skinned Mesh #1173
    • This feature copies activeness / enablement animation from merge target renderers to the merged renderer.
    • This feature is not enabled by default. You have to enable it in the inspector.
    • This feature supports copying activeness animation of activeSelf of the GameObjects or ancestors of the GameObjects. However, this feature does not work if multiple GameObjects (or both GameObject and Renderer itself) are animated.
    • In addition, this feature will be animate the enabled of the merged renderer, so you must not animate the enabled of the merged renderer.
      • If animations are unsupported, AAO will show an error message and abort the build.
  • Support Read/Write disabled Meshes with Av3Emulator Enabled #1185
    • Previously, AAO cannot process meshes with Read/Write disabled if AAO is triggered by Av3Emulator.
    • Since this release, AAO can process meshes with Read/Write disabled if AAO is triggered by Av3Emulator.
    • In addition, AAO now supports non-Float32 vertex buffers.
      • We still use Float32 internally so Int32 data might lose precision a little.
      • However, AFAIK there is no real-world problem with this so we implemented this way.
      • If you found such a case, please report it.
    • This change make AAO incompatible with Unity without Graphics.
      • If you’re building your avatar with batchmode with -nographics, please remove -nographics.
  • Asset Description for Avatar Modify Support bundled in an avatar, Shinano #1189
  • API to get in advance whether a polygon will be removed #1177
  • Rename BlendShape component to rename BlendShapes #1245 #1296
    • This can be used to avoid blendShape name conflicts in Merge Skinned Mesh
  • Invert option for Remove Mesh in Box #1257
    • You now can remove polygons outside of the box instead of inside the box.
    • Along with this new feature, we renamed Remove Mesh in Box to Remove Mesh By Box to make it more clear.
      • This doesn’t change the class name of the component since it’s already a part of the public API.
  • Remove Mesh By UV Tile, a new way to remove polygons #1263
    • You now easily remove some polygons of models configured for UV Tile Discard.
    • This component removes polygons like UV Tile Discard with Vertex Discard Mode.
  • Automatically remove unnecessary material properties based on shader #1041
    • This feature is added to Remove Unused Objects in Trace and Optimize.
    • When you changed shader for an material, properties for previously used shaders might be remain
    • This may increase your avatar size by unexpectedly including unused textures
  • Right-click menu option to create a new GameObject with a specified component #1290
  • Automatically Merge Blendshape #1300 #1324
    • This is new automatic optimization in Trace and Optimize
    • This is a part of “Optimize BlendShape” optimization.
    • AAO 1.8.0 introduced BlendShape support for Merge Skinned Mesh, but new default mode “Rename to avoid conflicts” would increase number of BlendShape.
    • This feature is added to relax this problem by automatically merging multiple BlendShapes of one Mesh.
    • With this feature, you can use rename mode without performance loss.
  • Fix mode for PhysBone Limits in Merge PhysBone #665 #1336 #1345
    • In addition to existing Copy and Override, we added Fix mode.
    • This mode will try to correct roll axis by rotating bone.
    • This feature allows you to configure the mode for PhysBone Limits in Merge PhysBone.
    • This is useful if all configuration is same but roll axis is different.
  • Automatically merging meshes which have BlendShapes #1308
    • In previous version of Avatar Optimizer, meshes which have BlendShapes are not automatically merged.
    • This was because BlendShape manipulation load is proportional to the number of vertices in Unity 2019.
    • However, in Unity 2020 and later, BlendShape manipulation load is mostly proportional to the number of moving vertices.
    • This means that increasing the number of vertices in a mesh which has BlendShapes does not increase the load of BlendShape manipulation much.
    • Therefore, we decided to automatically merge such meshes.
  • Improved OSC Gimmick Support #1306 #1351
    • We added two information for OSC Gimmick in Asset Description.
    • By defining parameters read / written by OSC Gimmick, your OSC Gimmick no longer breaks.
  • Automatically Merge Material Slot #1334
    • If you have multile material slots with same material, it will be merged automatically.

Changed #

  • Skip Enablement Mismatched Renderers is now disabled by default #1169
    • You still can enable it in the Inspector.
    • This change does not affect the behavior of previously added components.
  • Use UInt16 index buffer if possible even when total vertex count is more than 2^16 #1178 #1255
    • With baseVertex in index buffer, we can use UInt16 index buffer even if total vertex count is more than 2^16.
    • Of course, if one submeh references wide range of vertices, we cannot use UInt16 index buffer so we still use UInt32 index buffer in such a case.
  • Reimplement Preview system with NDMF Preview System #1131 #1195 #1218 #1270
    • This will prevent issues relates to Animation Mode bug.
    • This allows you to preview Remove Mesh components without selecting Mesh OR while in Animation Mode.
  • Improved Prefab Safe Set, which are used in MergePhysBone, MergeSkinnedMesh, FreezeBlendShape and more components #1212 #1219 #1221 #1236 #1287 #1294 #1348
    • This should improve compatibility with replacing base prefab, which is added in Unity 2022.
  • Allow multiple component for Remove Mesh components with API #1216 #1218
    • This allows non-destructive tools to add Remove Mesh components even if Remove Mesh component are added before.
  • Animator Parser Debug Window now supports ObjectReference animation support #1222
  • Reimplemented Animator Parser node system #1227
  • Renamed debug options internally #1228
    • This will lose previously configured debug options.
    • However, debug options are not considered as Public API as stated in documents so this is not backward incompatible changes in semver 2.0.0 section 8.
  • Performance Improvements #1234 #1243 #1240 #1288 #1304 #1307 #1314 #1325 #1327 #1326 #1341
  • Transform gizmo are now hidden while you’re editing box of Remove Mesh in Box #1259
    • This prevents mistakenly moving the Skinned Mesh Renderer while editing the box.
  • Make MergePhysBone implement INetworkID #1260
    • This allow you to configure networkid for merged PhysBone component
  • Changed locale code for simplified chinese from zh-cn to zh-hans #1264
    • This would improve compatibility with other NDMF tools.
    • Many NDMF tools uses zh-hans so previously you may see both 中文 (中国) and 中文 (简体).
    • I think zh-hans is more accurate expression so I changed so.
  • Improve RemoveMeshByMask compability with Tex Trans Tool #1269
  • Support for Shaders that depends on vertex index #1275 #1281 #1285
    • Avatar Optimizer will not automatically merge meshes that are using vertex index
    • since merging them may change vertex order, which changes vertex index
  • BlendShape support for Merge Skinned Mesh #1286 #1299
    • You now can successfully merge Meshes with BlendShape with Merge Skinned Mesh.
    • Actually, previous version does not have proper consideration for BlendShape.
    • This version introduces options to select BlendShape behavior in Merge Skinned Mesh.
  • Renamed “Automatically Freeze BlendShape” to “Optimize BlendShape” #1300

Removed #

  • Unity 2019 Support #1146
    • For 2019 users, please use 1.7.x.

Fixed #

  • Avatar Optimizer does not support Additive Reference Pose #1208
  • Typo in menu for creating Asset Description #1213
  • maxSquish cannot be configured for mergePB#1231
  • Avatar Descriptor can be removed by Avatar Optimizer in extreamely rare case #1242
  • Material property animation with weight 0 layer might be broken with AutoMergeSkinnedMesh #1248 #1253
  • Remove Mesh in Box does not work for meshes without Bones #1256
  • NullReferenceException in GetBlendShape if Mesh is not specified for SkinnedMeshRenderer #1267
  • Animation for target renderer of Merge Skinned Mesh might be overridden by animation for source renderer #1276
  • BlendShape with same name is impclitly merged in Merge Skinned Mesh #1286
    • Now you can rename BlendShape to avoid conflicts.
  • NRE if specified expression parameters is None #1303
    • This error only happens if you don’t use Modular Avatar since Modular Avatar will assign parameters asset.
  • Show version name on NDMF Console #1309
  • Fix non-VRChat project support #1310
  • ‘shader’ doesn’t have a float or range property ‘prop’ error #1312
  • Error if all components are on inactive GameObject #1318
  • Animation bindings for BoxCollider generated by VRCStation will be removed #1331
    • This might break the GogoLoco or other flying avatar that supports Quest / Android.
  • NRE if some playabke layer is missing from AvatarDesciptor #1350

1.7.13 - 2024-10-01 #

Fixed #

  • Null Reference Exception with newly created VRCAnimatorPlayAudio #1199
  • Particle System that uses local scale will be broken #1197
  • Avatars with Visame Skinned Mesh disabled will not able to upload #1202
  • Default value for RemoveMeshInBox is not correct in Play mode #1217
    • This fix will make Initialize method set default value for boxes.

1.7.12 - 2024-08-27 #

Changed #

  • Rewritten Check for Update system #1151

Fixed #

  • VRCConstraints with Target might be removed unexpectedly #1150
  • FinalIK Gimmicks with IKExecutionOrder is broken #1153
  • Broken validation for MergePhysBone merging PhysBones with specified target #1160

1.7.11 - 2024-08-08 #

Added #

  • VRCSDK 3.7.0 support #1140
    • This includes VRCConstraints support

Fixed #

  • Some Humanoid Bones might be removed #1137
    • Repeated AddPathDependency is broken.
  • Render is broken if all weighted bone is none and some other non-weight bone is not none #1138

1.7.10 - 2024-08-02 #

Added #

  • Experimental VRCConstraints support #1129 #1130
    • This only works for VRCSDK 3.6.2-constraints.3 3.6.2-constraints.4 and not works with other versions including future versions.

Fixed #

  • AutoMergeSkinnedMesh is broken if all merging meshes has no SubMeshes #1127

1.7.9 - 2024-07-25 #

Fixed #

  • Index out of bounds error with remove mesh by mask with negative UV #1123

1.7.8 - 2024-07-22 #

Fixed #

  • Index out of bounds error with remove mesh by mask #1119
  • NRE with Generic Avatar #1122

1.7.7 - 2024-07-08 #

Added #

  • Add Traditional Chinese #1102

Fixed #

  • VRCAnimatorPlayAudio support is broken #1114

1.7.6 - 2024-06-17 #

Fixed #

  • BlendTree with NormalizedBlendValues Broken with MergeBlendTree #1096
  • Remove Zero Sized Polygon may remove small polygons #1098

1.7.5 - 2024-06-10 #

Added #

  • Warnings for bad API Usages #1091

Changed #

  • Ignore floating point precision error in Merge PhysBone #1086
  • Animation Warning of Merge Skinned Mesh will not generated if source Renderer is not animated #1087
  • Expression Parameters are now considered as a part of Avatar Dynamics Parameter destination #1089
  • Relax condition for scaled evenly check #1092
    • Trace and Optimize will merge more bones than before.

Removed #

  • Write to Asset on Play menu item which is no-op #1085
  • Particle Syatem with Mesh Renderer shape will be broken #1093

Fixed #

  • Merge BlendTree Layer will break some BlendTrees that have overriden by other layers #1084

1.7.4 - 2024-05-17 #

Fixed #

  • Some rare material swap animation can cause exception #1067
  • Invalid AABB error message from UnityEngine if there are no source for Merge Skinned Mesh #1068

1.7.3 - 2024-05-10 #

Added #

  • Declare VRCSDK 3.6.x compatibility #1060

Fixed #

  • Mesh preview may cause empty mesh on enter play mode if reload scene is disabled #1064
  • MMD Compatibility can be broken with Merge BlendTree Layers #1065

1.7.2 - 2024-05-09 #

Fixed #

  • Entry/Exit to BlendTree broken with None motion in default state 1057
  • An error with MergePhysBone #1061
  • Animators depends on the WD=off behavior can be broken #1062

1.7.1 - 2024-05-07 #

Added #

  • Implement mask texture editor #1044
  • Add Simplified Chinese translation #1055

Changed #

  • Improved behavior with Read/Write Off #1045
    • Because of Unity limitation, AAO cannot process meshes with R/W off on Start so it will be error.
    • However, on Awake, we can read them so AAO should process them.
    • Since this version, AAO will process meshes with R/W off on Awake.
    • This reduces the number of errors on the apply on play.
    • If you’re using Av3Emulator, you still see the error.
    • In addition, in such case, we’ll show Auto Fix button on the error message.
    • If you press the button, AAO will fix the error by changing the mesh to read/write enabled.
  • Advanced Options section has benn renamed to Debug Options #1052
    • This express the purpose of the section more clearly.
  • Added Advanced Optimizations and moved Remove Zero sized Polygons to it #1052
    • The Remove Zero sized Polygons can break some shaders or animations so it’s not enabled by default.
    • To make it more clear, we moved it to Advanced Optimizations.

Fixed #

  • Material Slot animations for multi-material multi-pass rendering are broken #1042
    • Previously we only preserves animations for the number of submeshes instead of material slots.
  • Relax Bounds condition for Automatic Merge Skinned Mesh #1043
    • Previously, AAO doesn’t merge Skinned Meshes if bounds are different accurately.
    • Since this version, AAO will merge meshes if bounds are the same with precision to the last 6 digits of decimal point.
  • Entry/Exit to BlendTree broken with None state 1048
  • Particle System with bone-rigged Skinned Mesh Renderer will be broken #1054

1.7.0 - 2024-04-30 #

Added #

  • Animator Optimizer #854
    • Most features of Animator Optimizer is not available in Unity 2019.
    • Animator Optimizer optimizes your Animator Controller without behaviour Changes
    • Current Optimizer includes the following optimization
  • Asset Description #847
    • Asset Description is the file to provide information of your assets for Avatar Optimizer.
    • Please see documentation for more details.
  • Warning for material animation in Merge Skinned Mesh #769
    • Merge Skinned Mesh does not support animating material properties differently. (In other words, it can be broken.)
    • Since this version, AAO will warn for such a case.
    • If you animated all materials from same animations, your animation will not be warned.
  • API for declaring dependency relationship to the name of the component #943
    • You can use this API to not change the name of the GameObject.
  • Configuring Clamp BlendShapes (Deprecated) #957
    • Since VRCSDK 3.5.1, VRCSDK sets Clamp BlendShapes (Deprecated) to true on assembly reload.
    • This is not a good setting for AAO in EditMode since AAO does not support clamping BlendShapes.
    • That’s why AAO now configures Clamp BlendShapes (Deprecated) to false in edit mode and true in play mode.
    • PlayMode is usually used for testing the avatar behavior so it’s better to have the same setting as VRChat client.
    • If you want not to change this setting, please disable Tools/Avatar Optimizer/Configure Clamp BlendShape Weight.
  • Automatic Merge Skinned Mesh #952 #972 #1010 #1020 #1021
    • Trace and Optimize now automatically merges Skinned Meshes if possible.
    • Trace and Optimize will merge your mesh if the material properties or enablement of the mesh is animated similarly and has no BlendShapes.
  • Components API for Scripting Usage #976
    • You can now add AAO components from your script.
  • Animations animating missing GameObject is removed #994
    • Since this update, animations that targeting GameObjects with post-AAO paths is no longer working.
    • Please create animations that targeting GameObjects with pre-AAO paths.
  • Remove Mesh by Mask #998
    • With this component, you can remove polygons with mask texture.
    • You can use use mask for MeshDeleterWithTexture or alpha mask to remove polygons.
  • Remove Empty SubMesh in Trace and Optimize #1007
    • This removes empty SubMeshes including becomes empty by optimization.

Changed #

  • MergePhysBone now corrects curve settings #775
  • MergePhysBone now warns if chain length are not same #775
  • MergePhysBone with only one source is now error #775
    • It was not working well and not a error by a bug.
  • Animator Parser is completely rewritten #850 #968 #1011
    • New Animator Parser allow us to track animating properties animated by components removed by AAO.
  • PhysBone that swings no bones are now removed #864
    • I found such a PhysBone on Lime so I added this feature.
  • Switched Localization system to NDMF from CL4EE #873
    • Since this release, Avatar Optimizer is no longer depends on CL4EE.
    • Because VCC doesn’t remove unused packages, CL4EE may still be installed on your project.
    • If you want to remove CL4EE, please remove it manually.
  • Suppressed animated BlendShape warning of FreezeBlendShape if it’s animated to a few constants #881
    • Modern models have tons of BlendShapes to change their face shape but emotion animation of some of them animates such a BlendShapes to constant (default value).
    • That’s unnecessary (incorrect I think) and force users to remove or change the clip when user wants to face shape.
    • I see AAO users use FreezeBlendShapes for overriding such a BlendShapes on twitter.
    • I think using this way is reasonable enough so I suppressed the warning if AAO detected such a usage.
  • Changed minimum VRCSDK to 3.3.0 #882
    • VRCSDK 3.3.0 is required for stable NDMF-VRCSDK compatibility.
  • Endpoint Position settings for newly created MergePhysBone is now Copy instead of Clear #945
    • The Clear settings will increase the number of PhysBone Transforms so it’s not better as a default settings.
  • Improved activeness animation warning in Merge Skinned Mesh #948
    • Reduced false-positive warnings
      • Previously, AAO warns if activeness warning is applied to different GameObjects.
      • However, this can be false-positive if animation is applied to different GameObjects with same timing.
      • Since this version, AAO will not warn if the activeness is animated in same animation clip with same curve.
    • Combined warning per Merge Skinned Mesh component.
      • Previously, AAO warns for each source Renderers.
      • Since this version, AAO creates one warning for each Merge Skinned Mesh component.
  • Add error for Cloth component in Merge Skinned Mesh component #949
    • The Cloth component is not supported by Merge Skinned Mesh component.
    • In previous versions, AAO will keep the source Skinned Mesh Renderer if it’s with Cloth component by bug.
    • Since this version, AAO will make an error if the source Skinned Mesh Renderer is with Cloth component.
  • Remove Unused Objects now removes PhysBones and Contact Receivers with parameters defined but not used by Animator Controllers #959
    • Previously, AAO did not remove PhysBones and Contact Receivers if they are defined in Animator Controllers whether they are used or not.
    • I thought such a PhysBones on the base body are rare but my friend told me there is Manuka has such a PhysBone so I added this feature.
  • Dropping GameObject to PrefabSafeSet adds the All components on the GameObject to the PrefabSafeSet #960
    • You can add all PhysBones on the GameObject by dropping the GameObject to the MergePhysBone component.
  • MergeSkinnedMesh now warns if Root Bone or Anchor Override are not set #963
  • It will be error if read/write mesh is off in play mode again #1018
    • I found that we may not possible to read mesh with r/w mesh off mode in play mode with the Av3Emulator.
  • Disabled AutoFreezeBlendShape for Skinned Mesh Renderers with Cloth component #1029
    • According to the report, making some polygons zero-size by AutoFreezeBlendShape will make initializing avatar extremely heavy.
    • After a small discussion, we decided to not automatically optimize Skinned Mesh Renderers with Cloth component.

Removed #

  • Compatibility with VRCQuestTools v1.x #847
    • Please use VRCQuestTools v2.x, which has compatibility with AAO.

Fixed #

  • Inspector of ComponentTypePair (GCDebug) is broken #846
  • Bones swung by unused PhysBones (which will be removed by AAO) are not merged #850
    • Note that To fix this problem, AnimatorParser is almost completely rewritten.
    • It’s not expected to have behavior change, but if you found some, please report it.
  • Re-fix Nested Constraint can be broken with Trace and Optimize #880
  • Fix non-VRChat project support #884
  • Fix VRM support #892
  • ArgumentNullException in Edit-mode Remove Mesh Preview #942
  • Bad behavior if EditMode preview is enabled when entering play mode #956
  • PlayableLayerControl or AnimatorLayerControl on non-root animator are ignored #964
  • Box Editor of Remove Mesh in Box can be broke with scale of Skinned Mesh Renderer #1019

1.6.13 - 2024-04-13 #

Fixed #

  • Animator Controller on the VRCStation will be broken #1002
  • Remove Component can be fails with RequireComponent attribute #1003

1.6.12 - 2024-04-09 #

Removed #

  • Activeness Optimization for Constraint component #996
    • The constraint component is too complex to optimize correctly and reliably

1.6.11 - 2024-04-07 #

Fixed #

  • Bounds become broken if Update When Offscreen is enabled #990

1.6.10 - 2024-04-05 #

Fixed #

  • Missing Reference Exception with Trace and Optimize #986

1.6.9 - 2024-03-27 #

Added #

Fixed #

  • ContextHolder become unknown component in NDMF 1.4.0 #946

1.6.8 - 2024-03-12 #

Fixed #

  • If some component refers external component, internal error #921

1.6.7 - 2024-02-28 #

Fixed #

  • Compilation Error due to VRCImposterSettings with VRCSDK 3.2.x #905
  • Skinned Mesh Renderers with None mesh will become Mesh with no polygons #906
    • This may affects bounds of Performance Rank in VRChat
  • Exclusions not working with Automatically Remove Zero Sized Polygons #907
  • Fix non-VRChat project support #884 (backport in #909)
  • Merge Toonlit with uv tiling is broken #911

1.6.6 - 2024-01-31 #

Fixed #

  • Some features are not working well if Trace and Optimize is not attached #876

1.6.5 - 2024-01-29 #

Changed #

  • AvatarOptimizer now uses ErrorReporting API of NDMF instead of our own API #805
  • Project is slightly renamed to AAO: Avatar Optimizer #830
    • The term AAO and Avatar Optimizer are not changed, but display name on the VCC is changed to AAO: Avatar Optimizer

Fixed #

  • Fix support for UniVRM components #802
  • VRM: Fix MergeSkinnedMesh breaking BlendShapeClip / VRM10Expression #810
  • Unknown component warning were shown multiple time for one type #818
    • In addition, location of the unknown components are shown on the error report.
  • Empty Armature trick broken #819
  • Added workaround for Array index (n) is out of bounds (size=m) error
  • Humanoid Bones may be removed by Trace and Optimize #831
  • Add license, documentationUrl, and changelogUrl to package.json #851
  • Nested Constraint can be broken with Trace and Optimize #857

1.6.4 - 2023-12-10 #

Fixed #

  • Error with generic avatar in 2022 #794
  • Assertion Error in some rare case #795

1.6.3 - 2023-12-09 #

Added #

  • Support for VRCSDK 3.5.x #787
    • Actually, previous version of AAO works well with VRCSDK 3.5.x / Unity 2022 with tiny bugs.
    • I’ve fixed some bugs in Unity 2022 in this release.
    • Since this version, package.json declares Avatar Optimizer is compatible with VRCSDK 3.5.x.
    • I was planned to release this changes while VRCSDK 3.5.0 is in beta.
    • However, VRCSDK 3.5.0 beta was only 3 hours so I could not.

Fixed #

  • Fix NullReferenceException on Unity 2022 when extra Animator components are present #778
  • Fix Errors with Generic Avatars #779
  • Editing Prefabs with AAO Components in Unity 2022 will cause Error #782
  • Error if there are reference to Prefab Asset PhysBone Collider #783
  • Remove Mesh in Box editor broken if inspector is narrow #784
  • Errors for partially incorrectly configured avatars #786
    • Since this release, instead of internal errors, warnings are shown

1.6.2 - 2023-11-30 #

Fixed #

  • Path remapping for merge bone will not work well in some (relatively rare) case #764
  • Error due to PhysBone collider with root bone outside avatar #766

1.6.1 - 2023-11-29 #

Fixed #

  • Error if there are None colliders for PhysBone #758
  • BlendShapes can broken in extreamly rare cases #760
    • It seems this is due to Unity bug.

1.6.0 - 2023-11-27 #

Added #

  • Public API for registering component information #632 #668
  • Disabling PhysBone animation based on mesh renderer enabled animation #640
    • If you toggles your clothes with simple toggle, PhysBones on the your avatar will also be toggled automatically!
  • Small performance improve #641
  • Ability to prevent changing enablement of component #668
  • Remove Zero Sized Polygons #659
  • Add support for UniVRM components #653
  • Support for Mesh Topologies other than Triangles #692
  • Skip enablement mismatched Renderers in Merge Skinned Mesh #670
    • This is now enabled by default for newly added Merge Skinned Mesh.
  • Error for MergeBone on the Avatar Root #716
  • Warning for conflicts with animation
    • Warning for freezing animated BlendShapes #719
    • Warning for merging renderers that activeness/enablement animated differently #675
  • PhysBone Optimization #733
    • Unnessesary isAnimated is now unconfigured
    • Floor Colliders with same configuration will be merged to one floor collider
  • Minimum Support for FinalIK #735

Changed #

  • All logs passed to ErrorReport is now shown on the console log #643
  • Improved Behaviour with multi-material multi pass rendering #662
    • Previously, multi-material multi pass rendering are flattened.
    • Since 1.6, flattened if component doesn’t support that.
  • Remove Unused Objects removes meaningless Animators and Renderers #709
    • Renderers without Mesh and Animators without AnimatorController is meaningless

Removed #

  • Legacy GC #633
  • Preventing removing IEditorOnly in callback order -1024 #658
    • This is no longer needed since 1.5.0 but I forgot to remove so I removed in 1.6

Fixed #

  • Improve support of newer Unity versions #608
  • Improve support of projects without VRCSDK #609 #625 #627
  • Prefab blinks when we see editor of PrefabSafeSet of prefab asset #645 #664
  • complex shader with SkinnedMeshRenderer without Bones Brokebn #694
  • bounds can be changed in apply on play if updateWhenOffscreen is true #697
  • Compatibility with transform moving plugins #715
  • Some missing components warnings #736
    • warning for ONSPAudioSource, VRCImpostorSettings, and RectTransform are fixed
  • Remove Unused Object may break ParticleSystem #738
    • Trigger Colliders can be disapper if you specify Transform instead of Collider instance.
    • Initially diabled particle system module will be ignored
  • MergeBone breaks ignoreTransforms of PhysBone #745

1.5.11 - 2023-11-18 #

Fixed #

  • Dynamic Bone support not working #727

1.5.10 - 2023-11-04 #

Fixed #

  • RigidBody Joint can be broken #683

1.5.9 - 2023-10-29 #

Fixed #

  • Animation clip length can be changed #647

1.5.8 - 2023-10-20 #

Fixed #

  • warning about VRCTestMarker when Build & Test #628

1.5.7 - 2023-10-19 #

Added #

  • Add compatibility for VRCQuestTools #619

Fixed #

  • AutoFreezeBlendShape will freeze BlendShapes with editor value instead of animated constant #622

1.5.6 - 2023-10-17 #

Changed #

  • Make no-op as possible if no AAO component attached for your avatar #603
  • Error Report window is refreshed after exiting play mode #606

Removed #

  • Error for Read/Write Mesh off Mesh #615
    • Since AAO creates Mesh every time, no more error is required!

Fixed #

  • Multi-frame BlendShape can be broken #601
  • Update notice may show incorrect version #602
  • Preview button is not disabled even if mesh is none #605
  • BindPose Optimization may break mesh with scale 0 bone #612

1.5.5 - 2023-10-15 #

Fixed #

  • Constraints and Animations can be broken with Automatic MergeBone #594
  • NRE with SMR with None with preview system #596
  • Some Multi-Frame BlendShape broken #597
  • BlendShape can be broken with MergeBone Optimization #599

1.5.4 - 2023-10-14 #

Added #

  • Add compatibility for Satania’s KiseteneEx #584

Changed #

  • Normal check is skipped for empty mesh #588
  • Meshes without Normal are shown on the normal existance mismatch warning #588

Fixed #

  • Error with MeshRenderer without MeshFilter #581
  • Preview not working with VRMConverter #582
  • AvatarMask about HumanoidBone broken #586
  • Unused Humanoid Bones can be removed #587

1.5.3 - 2023-10-11 #

Changed #

  • Ignore the warning instead of migration from 0.3.x or older #570

Fixed #

  • AnimatorController with Synced can be broken #564
  • AnimatorOverrideController may not be proceed correctly #567
  • Unclear behaviour if we merged meshes with and without normals #569

1.5.2 - 2023-10-10 #

Added #

  • Feature for debugging GC Objects #543
  • More MMD BlendShapes are registered #552
    • New English Translation BlendShapes are compatible with AAO!
  • Check for update #554

Changed #

  • You now cannot key any of AvatarOptimizer Components #551
    • Previously you can key AvatarOptimizer Coponent but it was meaningless.

Fixed #

  • EditMode Preview of RemoveMeshInBox is not correct #550
  • Avatar Standard Colliders can be removed #553
  • Freeze BlendShape may break Visame with MergeSkinnedMesh #561

1.5.1 - 2023-10-08 #

Fixed #

  • MergePhysBone component may be shown as unknown components #541
  • MergeBone may break Fur #542

1.5.0 - 2023-10-07 #

Added #

  • Support for NDMF integration #375
  • Pre-building validation for MergeBone #417
    • There are some (rare) cases that are not supported by MergeBone. This adds warning for such case.
  • Validation error for self recursive MergeSkinnedMesh #418
  • Advanced Settings Section for Trace and Optimize #419
    • Moved Use Advanced Animator Parser to there
    • Added Exclusions for exclude some GameObjects from optimization
    • In this section, there are for debugging GC Objects #464
  • Avoid Name Conflict in MergeBone #467
  • Full EditMode Preview of RemoveMesh Components #500
  • Significant Performance Improvements with small code changes #523

Changed #

  • Improved ‘Remove Unused Objects’ #401
    • Remove Unused Objects now removes unnecessary Components & Bones!
    • With new algorithm, you can preserve end bones (#430)
    • You may use Use Legacy GC to use legacy algotythm for Remove Unused Objects in Advanced Settings (#419)
  • Performance: Share MeshInfo2 between SkinnedMesh processing and MergeBone #421
  • Declare compatible with VRCSDK 3.4.x #513
  • Change Japanese Translation of “BlendShape” #535

Deprecated #

  • UnusedBonesByReferenceTool component is now obsolete #430
    • Newly introduced algorithm ofRemove Unused Objects does same thing!
    • You can migrate to Remove Unused Objects only with one click!

Removed #

  • internal ApplyOnPlay framework #504

Fixed #

  • Crash with Unity 2022 #423
  • Error if all vertices of some BlendShape is removed by RemoveMeshByBlendShape or RemoveMeshInBox #440
  • RemoveMeshByBlendShape on the SkinnedMeshRenderer with MergeSkinnedMesh not working #451
  • MergeBone may make some bone inactive to active if bone being merged is inactive #454
  • Avoid problematic material slot in MergeSkinnedMesh #508
  • Editor of EditSkinnedMesh components may not work well if the object is inactive #518

1.4.3 - 2023-09-05 #

Fixed #

  • Mesh broken with BlendShape Frame with weight 0 #408

1.4.2 - 2023-09-04 #

Fixed #

  • Components/GameObjects can falsely detected as always disabled / inactive. #403

1.4.1 - 2023-09-02 #

Fixed #

  • RootBone become None with Merge SkinedMesh #399

1.4.0 - 2023-09-02 #

Added #

  • Support for Multi Frame BlendShapes #333
  • Add link to help page #382
  • Advanced Animator Parser #343
    • This is new AnimatorController parser to collect animated properties
    • This parser understands AnimatorLayers, so with this parser, AAO can freeze BlendShapes which are always finally animated to a constant value.
    • This also understands Additive Layer and BlendTree, so extremely rare problem in previous Animator Parser with Additive Layer or BlendTree will be fixed with this parser.
  • Multi Pass Rendering of Last SubMesh support #384
  • Remove Mesh By BlendShape Editor now can set BlendShape weights to 0/100

Changed #

  • Auto FreezeBlendShape now freezes meaningless BlendShape #334
    • If you removed some vertices with RemoveMeshInBox or RemoveMeshWithBlendShape, some BlendShape may transform no vertices
    • Auto FreeseBlendShae now freezez such a BlendShapes
  • Auto FreezeBlendShape now freezes vertices even if already FreezeBlendShape is configured. #334
  • Meshes generated by AAO now have name #371
    • This will improve compatibility with UniVRM.
  • VPM Package now doesn’t include Test code #372 #373
  • Better error infomation for MeshInfo2 error #381
  • Declare compatible with VRCSDK 3.3.x #395
  • Understandable Error if there are Missing Script Component #398
    • Why VRCSDK doesn’t have such a error system?

Fixed #

  • MergeBone not working well with non-restpose bones #379
  • Unclear Error with Mesh with Read/Write off #386
  • Clear Endpoint Position may not work well with ignore transforms #390
  • Clear Endpoint Position doesn’t support Undo #390

1.3.4 - 2023-08-22 #

Changed #

  • Internal implementation of Trace and Optimize #361
  • Documentation Improvements #366 #365

1.3.3 - 2023-08-21 #

Added #

  • BlendShape Weight mismatch warning is now build-time warning instad of validate time warning #359
    • Thanks to FreeseBlendShape by TraceAndOptimize, most pre-build this warning is false positive. So this warning is moved to build-time only.

Fixed #

  • ClearEndpointPosition is not applied for non-first PhysBones on the GameObject #357
  • Incompatbile with Reload Scene disabaled #358

1.3.2 - 2023-08-20 #

Fixed #

  • Children of IsActive animated object is not considered #342
  • Multi Passs Rendering not supported error doesn’t have location info #347

1.3.1 - 2023-08-19 #

Fixed #

  • Unity Editor may freezes when there are circular dependency #329
  • Network ID is not assigned for newly created PBs #331
  • Internally assigned animator controller is not skipped for default choosen playable layer in Trace and Optimize #332
  • VRCSDK assigned default animators are not considered in Trace and Optimize #332
    • This bug doesn’t create bad behavior for now but will does in the feature.
  • Humanoid Animation are not considered in Trace and Optimize #332
    • This bug doesn’t create bad behavior for now but will does in the feature.
  • Material Slot with null material is created if there are more SubMesh than Material Slots #337
  • AAO silently ignored multi pass rendering #337
    • For now, multi pass rendering of last SubMesh is not (yet) supported so now cause error but will be supported.
  • There is no warning about BlendShape weight difference #336

1.3.0 - 2023-08-12 #

Added #

  • Remove always disabled objects #278
  • The new Remove Mesh By BlendShape component removes mesh data based on BlendShapes. #275
  • Option to process Make Children before modular avatar #296

Changed #

  • Use UnityEditor api to compress texture #276
    • This also adds some supported texture formats.
  • Every component have AAO prefix in their name now #290
    • The official shorthand for this tools is AAO!
  • Automatic Configuration component has been renamed to Trace And Optimize #295

Fixed #

  • UnusedBonesByReferenceTool error with SMR without mesh #280
  • MergeSkinnedMesh doesn’t work well with eyelids #284
  • Animating Behaviour.m_Enabled not working #287
  • Error Report Window may not refreshed after build error #299
  • Apply On Play may not working well #305
  • Some components unexpectedly can be added multiple times #306

1.2.0 - 2023-07-26 #

Added #

  • Automatic bounds computation in MergeSkinnedMesh #264
  • Automatic Configuration System #265
    • Currently FreezeBlendShape can be automatically configured.
  • Support for material swapping animation in MergeSkinnedMesh #274

Changed #

  • Support newly activated avatars in play mode for apply on play #263

Fixed #

  • Breaks mesh without tangent #271

1.1.1 - 2023-07-14 #

Changed #

  • Avatar GameObject marked as EditorOnly no longer be removed #261
    • Previously, if avatar GameObject is marked as EditorOnly, whole avatar is removed and this confuses users.

Fixed #

  • Name of failed ApplyOnPlayCallback is not included in error message #260
  • Entering play mode can be extremely slow if you have many avatar on the scene #262

1.1.0 - 2023-07-13 #

Added #

  • Now we can choose texture format for Merge Toon Lit Material #251
    • This includes one tiny BREAKING CHANGES.
    • Previously MergeToonLit uses ARGB32 as texture format but for now, it use ASTC 6x6 or DXT5 by default based on platform.

Changed #

  • Move Components into Avatar Optimizer folder #247
    • Previously they are Optimizer folder
  • Completely rewrite apply on play system #249
    • This will remove EditorOnly on play.
    • This enable UnusedBonesByReferencesTool component on play.
    • This replaces way to apply [modular-avatar by bdunderscore] on play.
      • modular avatar will be applied before AvatarOptimizer main logic and after removing EditorOnly.
    • This will remove enable/disable checkbox on components, which had no meaning.
    • The framework for this changes will be published as separated framework when ready.
  • Use binary form of asset file in avatar optimizer output #252

Fixed #

  • Manual bake not working with avatars with invalid file name chars #253
  • Merge Toon Lit duplicates vertex too many #256
    • This could causes huge increase in avatar size. this is now fixed.

1.0.0 - 2023-06-27 #

If you’re using v0.3.x or older, Please upgrade to v0.4.x before upgrading v1.x.x!

もし v0.3.x 以前を使用しているのであれば, v1.x.xに更新する前に v0.4.x に更新してください!

Removed #

  • Save format migration system #199
    • We no longer see save data in format of v0.3.x or older.
    • Please migrate to v0.4.x format before installing v1.0.0.

0.4.12 - 2023-06-22 #

Added #

  • MergePhysBone without ClearEndpointPosition #239
    • Instead of ClearEndpointPosition, you can use original value, or override Endpoint Position.

0.4.11 - 2023-06-19 #

Changed #

  • Show error with user friendly message if BlendShape for eyelids are removed / frozen. #253

Fixed #

  • eyelids BlendShape settings are mapped even if it’s disabled #235
    • This fixes error if internally eyelids BlendShape are frozen.

0.4.10 - 2023-06-17 #

Fixed #

  • PrefabSafesSet’s prefab modifications on latest layer are invisible on inspector #229

0.4.9 - 2023-06-16 #

Fixed #

  • NullReferenceException if window is in background #226

0.4.8 - 2023-06-16 #

0.4.7 - 2023-06-13 #

Fixed #

  • Dropping PhysBone to MergePhysBone is not working #221
  • First box will be size of zero #223

0.4.6 - 2023-06-10 #

Changed #

  • Improve ErrorReport window on build error #216

0.4.5 - 2023-06-06 #

Fixed #

  • Error in MergeSkinnedMeshProcessor with RecordMoveProperty #214

0.4.4 - 2023-06-04 #

Changed #

  • Make Remove Empty Renderer Object enabled by default #208

0.4.3 - 2023-06-02 #

Added #

  • Adding multiple values to PrefabSafeSet #200
  • Overriden PrefabSafeSet properties are now highlighted as blue and bold #200

Fixed #

  • Error when we removed some modification in PrefabSafeSet #201
    • There are several situations for this problem:
      • When we removed value in original component
      • When we removed new value in overrides
      • When we reverted added twice in overrides
      • When we reverted deletion in overrides
      • When we reverted fake deletion in overrides
  • Error when we reverted whole PrefabSafeSet with modifications #201

0.4.2 - 2023-05-30 #

Fixed #

  • MergeSkinnedMesh depends on other EditSkinnedMesh components does not working #195
  • Error with removed modified property in PrefabSafeSet Editor #196
  • Apply on Play may not work #198

0.4.1 - 2023-05-23 #

Changed #

  • Reimplemented Animation Mapping System Completely #168
    • This should fixes problem with objects/components at same place.
  • Improve Animation Mapping System #172
    • This should reduce build time
  • Disable animating m_Enabled of source SkinnedMeshRenderer #190
    • Animating m_Enabled of source SkinnedMeshRenderer now doesn’t affects merged SkinnedMeshRenderer
    • If you actually want to enable/disable merged SkinnedMeshRenderer, animate m_Enabled of merged SkinnedMeshRenderer instead.

Fixed #

  • Error is not cleared on build #170
  • Merge PhysBone is not working #177
    • Previously, values are not copied correctly
  • The help box for description of components without description were shown #178
  • Name of Is Animated and Parameter field are not correct #183
  • We cannot set override setting of Colliders to Copy #183
  • Error with MergeToonLit #185
  • Poor word choice in Japanese Translation #174
  • Localization is not applied for some fields #186

0.4.0 - 2023-05-20 #

Added #

  • Japanese Translation: 日本語化 #152

Changed #

  • Save format for MergePhysBone #166
    • Previously used backed PhysBone component for override values are removed.
    • There are no changes in behaviour. Just migrate your assets.

Removed #

  • Delete GameObject feature #153
    • Use EditorOnly tag instead

Fixed #

  • Error with Animator at non-root GameObject #164
  • Error with copied MergePhysBone component #165

0.3.5 - 2023-05-15 #

Changed #

  • Internal Errors not relates to any Object are now reported #160

Fixed #

  • Error if there are multiple GameObjects with same path #159

0.3.4 - 2023-05-15 #

Fixed #

  • Reference to Component will become None #156
  • BlendShapes for Eyelids can be broken with FreezeBlendShape #154

0.3.3 - 2023-05-14 #

0.3.2 - 2023-05-14 #

Added #

  • Error Reporting System #124
    • This adds window shows errors on build
    • This is based on Modular Avatar’s Error Reporting Window. thanks @bdunderscore
  • Website for AvatarOptimizer #139
  • Manual Bake Avatar #147
    • Left click the avatar and click [AvatarOptimizer] Manual Bake Avatar

Changed #

  • Improved & reimplemented Animation (re)generation system #137
    • This is completely internal changes. Should not break your project
    • In previous implementation, animations for GameObjects moved by MergeBone, MergePhysBone or else doesn’t work well
    • This reimplementation should fix this problem

Fixed #

  • Migration fails with scenes/prefabs in read-only packages #136
    • Now, migration process doesn’t see any scenes/prefabs in read-only packages.

0.3.1 - 2023-05-05 #

Fixed #

  • Can’t remove SkinnedMeshRenderer error #133
    • This error should do nothing bad but it confuses everyone
  • Bad behaviour with VRCFury on build #134

0.3.0 - 2023-05-04 #

Added #

  • Make Children of Me #100
    • As a alternative of feature removal in same pull request
  • UnusedBonesByReferencesTool #112
  • Support for VRCSDK 3.2.0! #117
    • This includes support for PhysBone Versions and PhysBone 1.1

Changed #

  • Use IEditorOnly instead of mokeypatching VRCSDK #102
  • Move the toggle for Override and the setting of the value after Override closer together. #105
    • With this changes, the merged PhysBone is now hidden.
    • The merged PhysBone will be shown in Play mode.
  • Now we can Copy (instead of Override) Pull, Gravity, Immobile properties even if Integration Type is overriden. #105
    • During migration, if Integration Type (previously called Force) is configured to be Override, Pull, Gravity, Immobile will be configured to be Override.
    • This is BREAKING changes.
  • Now we can Copy / Override Immobile Type and Immobile (strength) separately. #105
    • Previously, if you override Immobile Type, you also required to override Immobile but no longer required.
    • This is BREAKING changes in the semantics of immobile property.
  • Upgrade CL4EE to 1.0.0 #121

Removed #

  • BREAKING Removed Prefab Safe List #95
  • BREAKING Removed RootTransform feature from MergePhysBone #100
  • Removed support for VRCSDK 3.1.x. #117
    • Dropping VRCSDK support is a BREAKING changes.
    • However, we may drop old VRCSDK support in the minor releases of AvatarOptimizer in the feature.
    • In the other hand, we promise we’ll never drop old VRCSDK support in the patch releases.
    • Notice: in the 0.x.y release, y is a minor releases in this project.

Fixed #

  • ShouldIgnoreComponentPatch cases compilation error #108
  • Merge PhysBone is working even if parents are differ #129

0.2.8 - 2023-04-19 #

Fixed #

  • NullReferenceException with prefabs in editor for PrefabSafeSet #92

0.2.7 - 2023-04-01 #

Added #

  • Support for VRCSDK 3.1.12 and 3.1.13

0.2.6 - 2023-03-31 #

Added #

  • Internationalization support #77
    • This adds way to translate editor elements.
    • However, no other language translation than English is not added yet.
    • Please feel free to make PullRequest if you can maintain the translation.

Fixed #

  • Remove Empty Renderer Object is not shown on the inspector #76
  • normal vector and tangent vector might not be unit length #81
    • This can be problem with FreezeBlendShape.
  • Assertion does not work well #85
    • This can make invalid mesh
  • Mesh is broken if more than 65536 vertices are exists #87
    • Because we didn’t check for vertices count and index format, vertex index can be overflow before.
  • Generated assets are invisible for a while #88

0.2.5 - 2023-03-24 #

Added #

  • Show SaveVersion internal property on editor. #71
    • This makes it easier to make it easier to see prefab overrides

Changed #

  • reduce unnecessary modification in PrefabSafeSet/List #64
    • Previously PrefabSafeSet/List will always generates array size change modification.
    • Now, array size change will be generated when added/removed elements from the collection.
  • use ExecuteAlways instead of ExecuteInEditMode #72

Fixed #

  • save version is not saved again #69
  • None is added/removed on the prefab modifications #73

0.2.4 - 2023-03-22 #

Changed #

  • make Accessing v1 error #61
    • This reduces future mistakes like #59

Fixed #

  • RemoveMeshInBox refers old v1 configuration #60

0.2.3 - 2023-03-20 #

Fixed #

  • instantiating material occurs #58

0.2.2 - 2023-03-20 #

Added #

  • Make Children #53

Changed #

  • Do not use cache on applying components now #56

Fixed #

  • NullReferenceException if some component is removed #54
  • save version is not saved. this may break future migration #55

0.2.1 - 2023-03-20 #

Fixed #

  • Migration failed if some renderer is None #49

0.2.0 - 2023-03-19 #

Added #

  • Support for Prerelease in publish system #19
  • Changelogs (including ones for traditional releases) #19
  • Auto Test #23
  • Prefab support #11

Changed #

  • BREAKING Save format for many components #11
    • Even if you added more elements than before on prefab, added elements on prefab instance will be kept.
    • In previous implementation (unity default array prefab overrides implementation), can be broken easily.
  • BREAKING All materials are merged by default #11
    • Due to save format migration, every materials will be marked as merged.
    • If you have some materials not to be merged, please re-reconfigure that.

Fixed #

  • Fixed IndexOutOfError if there are more bones than bindposes #30
  • SkinnedMeshRenderers without bones will break mesh #35
  • We may forget checking components on disable objects #46

0.1.4 #

Added #

  • Support for feature Migration be0147b

Changed #

  • Box editor of RemoveMeshInBox 15fc931
  • Installer unitypackage name b32167f
  • Warn if MergeSkinnedMesh is with SkinnedMeshRenderer with Mesh 1016aa6

Fixed #

  • MergeToonLit is always marked as dirty 82ba212
  • RemoveMeshInBox does not handle bone correctly b2fea4f

0.1.3 #

Fixed #

0.1.2 #

Fixed #

0.1.1 #

Added #

  • (internal) MeshInfo2 system for speed up 36716dd
  • RemoveMeshInBox component 96f3526

Changed #

  • Make VPAI installer unitypackage install 0.1.x 6615991
  • Editor of FreezeBlendShape cdd2031

Fixed #

  • Several bugs

0.1.0 - 2023-01-16 #

Changed #

  • Move components from Anatawa12/ to Optimizer/ 949d267

Fixed #

  • Several bugs

0.0.2 - 2023-01-15 #

Added #

Fixed #

0.0.1 - 2023-01-13 #

Added #

  • Merge Skinned Mesh
  • Merge PhysBone
  • Freeze BlendShape
  • Merge Bone
  • Clear Endpoint Position