Skip to content

New features in Animator Wizard and misc#5

Open
strakacher21 wants to merge 50 commits into
trev3d:masterfrom
strakacher21:master
Open

New features in Animator Wizard and misc#5
strakacher21 wants to merge 50 commits into
trev3d:masterfrom
strakacher21:master

Conversation

@strakacher21

@strakacher21 strakacher21 commented Jan 12, 2025

Copy link
Copy Markdown

AnimatorWizard

  • the Save VRC Expression Parameters function has been added (will save your VRC Expression Parameters before setting up animator);
  • layers start name is now customizable;
  • split the monolithic AnimatorWizard into partial class files (Expressions, Gestures, OSC smoothing, Editor, etc.);
  • hand poses can now use the "same animations" for both hands or separate animations for the left hand and right hand;
  • added Gesture Expressions Block bool list function (each element is a VRC bool parameter name. When any is True, gestures won't drive expressions);
  • added clothing creation feature (switching algorithm). Creates an algorithm to switch clothes, animations and VRC params. By using specific blendshapes roll up clothes and body into "tube";
  • added Face Toggle creation feature. Creates an algorithm to switch face animations;
  • added OSC smooth setup feature. OSC smooth is needed to fix Face/Eye Tracking params in-game, as without it animation is choppy and jerky, as if it's lacking FPS;
  • added Compressed Params module. Multiplexes multiple avatar parameters over a single synced channel, reducing parameter memory cost at the expense of sync latency. Parameter Compressor is based on the ideas behind LauraParamCompressor (LauraRozier);
  • added Eye Tracking (Simplified Eye Parameters) creation feature. Creates an eye tracking using pre-made animations. The "same animations" system is also implemented there. With the Eye Tracking Block bool list function;
  • added Face Tracking LipSync Control function (adds LypSync off/on feature) ;
  • allow Face Tracking shapes to be single or split into Left/Right variants. Add a per-shape “Left and Right Shapes” checkbox for FT single/dual shape entries: when enabled generates ShapeLeft + ShapeRight, otherwise generates one Shape param. And Face Tracking setuper with the Face Tracking Block bool list function;
  • prevent AnimatorWizard from increasing animator controller size on frequent use. Refactored AnimatorWizard to repack FX/Gesture/Additive controllers into fresh controllers using VRLabs 'AnimatorCloner', then swap them back in place under the original controller paths. This keeps custom layers and newly generated AnimatorWizard layers while dropping unreachable “garbage” objects that Unity leaves inside controllers over time. The garbage was accumulating specifically due to frequent use of the AnimatorWizard script. Uses parts of VRLabs Avatars 3.0 Manager (AnimatorCloner);
  • auto-remove Unity "Base Layer" on generate. After generating animator layers, delete Unity’s auto-created "Base Layer" from non-default avatar animation controllers to avoid duplicate layers next to the system layer (SystemName)
  • clean up generated layers safely. Make AnimatorWizard re-runnable across feature-flag changes by removing only its own generated layers (via an explicit whitelist) on FX/Gesture/Additive controllers and keeping user custom layers at the bottom of the stack.
  • Improved AnimatorWizard Color customization: can work with lists now.
  • Improved AnimatorWizard shape preferences generation: previously, you needed to use special prefix names such as "pref/toggle/" (for bool behavior) or "pref/slider/" (for float behavior). Now, these are all under the same prefix "pref/body/", and the switching logic is specified in the GUI. Additionally, vrc parameters such as pref/body/(bool or float)/ are created.

Misc

  • Removed VRChat SDK suggestion for better tracking of FBT where the hip bone did not match the 90 degree angle between the legs (Now the hip corresponds to this angle);
  • also, the Blendshape normals export was corrected and the FBX model in Unity was slightly adjusted for this (now you can use custom normals and there will be no warning: Can't generate normals for blendshape);
  • Slightly improved UV;
  • Minor edits to README.md;
  • Brows Tracking Fix: removed 4 float unnecessary parameters for eyebrow tracking, namely: v2/BrowDownLeft and v2/BrowDownRight, v2/BrownUpRight and v2/BrowUpLeft. Their work is fully performed by v2/BrowExpressionLeft and v2/BrowExpressionRight (tested, everything works the same as it was, and there are fewer parameters!);
  • Added baked vertex color avatar texture;
  • Icons update;
  • Proper avatar functionality when you're AFK;
  • Added Export to Unity script header popover UI (and new features have been added to it): improved export interface to Unity in Blender's 3D viewport;
  • Added buttons in the scene to switch scenes (SceneLabel update);
  • Implemented automatic texture resolution switching integrated with SceneLabel: when switching scenes, TextureResolutionApplier applies settings for each scene from SceneTextureAsset, allowing resolution changes (e.g., 4K → 2K) for different platforms without manually resizing textures.

I definitely missed something, but here is basically what was done

Fixed numerous bugs in Animator Wizard script (flag fixes, added new split functions, code optimization), changes in icons, fixed some animations, added Avatar 3D Thumbnail (avatar preview in VRChat). Fixes to some avatar functions, and FaceTracking by parameters has been simplified (not tested yet!).
Trivia:
- FaceToggleActiveParam has been fixed (save bug), as well as the name ftprefix+LipSync;
- The rarely used “ftreset” function was removed (one bool variable was freed);
- Added Avatar 3.0 manager package.
@strakacher21 strakacher21 changed the title Added automatic creation of OSC smooth and EyeTracking in Animator Wizard New features in Animator Wizard and misc Mar 9, 2025
Added baked avatar texture (from the color attribute). Updated UV mapping (due to Mip Maps issues with Unity) and made cosmetic adjustments to Blender layouts.
this is so that i can understand which scene I am in and easily switch between them without having to search for them in folders. You can also add more scenes via the path “scripts\Scene\SceneSwitcher.asset” in the vrcfox unity project (B&C).
before switching scenes, the current scene must be saved and AssetMenu on scene
- fix adding ftActiveParam, ExpTrackActiveParam, LipSyncActiveParam to VRCExpressionParameters;
- fix the float param value "OSCsmooth/Blend" (which caused OSCsmooth to not work);
- remove adding the driver to setupEyeTracking;
- fix VRC Animator Tracking Control in "face tracking off" state (TrackingTracks instead of TrackingAnimates);
- when the "Shape Preferences flag" is disabled, an empty layer was created;
- add the function of changing Layers start name.
textures have been re-baked, and the "ImportFBX Warnings: Can't generate normals for blendshape " has also been removed for unity
…equent use

refactored AnimatorWizard to repack FX/Gesture/Additive controllers into fresh controllers using VRLabs’ AnimatorCloner, then swap them back in place under the original controller paths. This keeps custom layers and newly generated Animator Wizard layers while dropping unreachable “garbage” objects that Unity leaves inside controllers over time. The garbage was accumulating specifically due to frequent use of the Animator Wizard script. This also resolves the long‑standing controller size growth reported in issue: strakacher21/vrcfox-2.3_body_and_cloth_edition#9.
The mesh_smooth_type='EDGE' setting in the export script prevented custom normals from being transferred correctly to Unity, so that line has been commented out. After that, the ImportFBX Warnings: Can't generate normals for blendshape warning appeared, which was expected.

To remove the warning in Unity, the Legacy Blend Shape Normals option was disabled, and Blend Shape Normals was set to None in the Unity FBX import settings.

Implemented automatic texture resolution switching integrated with SceneLabel: when switching scenes, TextureResolutionApplier applies settings for each scene from SceneTextureAsset, allowing resolution changes (e.g., 4K → 2K) for different platforms without manually resizing textures.
@strakacher21 strakacher21 marked this pull request as draft January 14, 2026 17:12
- split the monolithic AnimatorWizard into partial class files (Core, Gesture, OSC smoothing, Editor, etc.)

- preserve AnimatorController refs (no Missing in prefab)

Rewrote "RepackAnimatorControllers()": stop deleting/moving ".controller" assets (preserve GUID/.meta). Build the merged controller in a temp folder using the same filename, then overwrite the original file and force a reimport-this removes `Missing (Runtime Animator Controller)` in prefabs and avoids the “Fix object name” warning

- auto-remove Unity "Base Layer" on generate

after generating animator layers, delete Unity’s auto-created "Base Layer" from non-default avatar animation controllers to avoid duplicate layers next to the system layer (SystemName)

- clean up generated layers safely

make AnimatorWizard re-runnable across feature-flag changes by removing only its own generated layers (via an explicit whitelist) on FX/Gesture/Additive controllers and keeping user custom layers at the bottom of the stack

- fix Face Tracking LipSync Control

fixed an error where the Face Tracking Lip Sync Control parameter was incorrectly created when the corresponding flag was disabled.

fixed a bug where if the Face Tracking Lip Sync Control was disabled (in AnimatorWizard), Lip Sync would not work at all when Face Tracking was enabled in-game.

- add custom Gesture Expressions Block bool list

adds a configurable list of bool parameter names that, when true, prevent hand gestures from driving facial expressions (gesture-driven brow/mouth blendshapes)

- allow FT shapes to be single or split into Left/Right variants

add a per-shape “Left and Right Shapes” checkbox for FT single/dual shape entries: when enabled generates ShapeLeft + ShapeRight, otherwise generates one Shape param

I hope I didn't miss anything lol
@strakacher21 strakacher21 marked this pull request as ready for review January 14, 2026 19:59
adds layout-only 3d viewport header popover with export settings
- add custom block lists for face toggle, face/eye tracking toggles;
- fixed clothing creation;
- fix UV map cleanup when exporting (3+ UV layers);
- also, the Blendshape normals export was corrected and the FBX model in Unity was slightly adjusted for this (now you can use custom normals and there will be no warning: Can't generate normals for blendshape);
- Proper avatar functionality when you're AFK.
…tion and export to unity.py improvement

AnimatorWizard Color customization can work with lists now.

Previously, you needed to use special prefix names such as "pref/toggle/" (for bool behavior) or "pref/slider/" (for float behavior). Now, these are all under the same prefix "pref/body/", and the switching logic is specified in the GUI. Additionally, vrc parameters such as pref/body/(bool or float)/ are created.
In the future, I plan to implement automatic addition/detection of parameters for Face Tracking, Shape preferences, and other features to save time on manually entering names in the AnimatorWizard GUI.

export to unity.py (improve export-to-unity [separate meshes, rig rename, vertex colors]):
- Added Separate meshes mode: a list of meshes that are exported as separate meshes and are not joined into Body.
- Added a UIList plus add/remove operators to manage the separate-meshes list (supports adding selected meshes from the export collection).
- Added rig renaming (both the Armature object and its datablock), including name-conflict handling via the "__old" suffix.
- Added a vertex color layer name setting and version-safe FBX export options by checking which FBX properties exist before setting them.
- UV cleanup + triangulation moved into a shared helper and applied to both Body and each separate mesh; improved the missing UV-map error to list existing UV maps.
- scene switch memory.
- Removed the Exclude collection workflow (exclude_collection_name).

The triangulation process should be made optional
New UI checkbox controls whether meshes are triangulated before FBX export.
convert “Export to Unity” into generic Auto FBX Export (optional rig export):
renamed the addon/UI and settings, changed the defaults to a generic export target (//../Exports, model.fbx), added an Export rig toggle so armatures were only processed/exported when enabled, and simplified auto-unload logic (from owner-file tracking on file-load to a direct unregister hook on load-pre).
SceneLabel can now change the compression quality
- refactored SceneLabel for cleaner initialization and scene GUI flow
- simplified SceneSwitcherAsset and SceneTextureAsset data containers
- improved TextureResolutionApplier null-safety and importer update logic
- removed redundant refresh/reimport-related operations
keep the existing bool-based flow and add an alternative int-based clothing switch mode (with compressor support).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant