Q: Pose Mode Resets All Shapekeys is this Intended Behavior? #434

Closed
opened 2025-12-10 04:35:59 +00:00 by Ghost · 3 comments
Ghost commented 2025-12-10 04:35:59 +00:00 (Migrated from git.disroot.org)

When using "Start Pose Mode" or "Stop Pose Mode" in CATS, all shapekeys are reset to 0, including body customization shapekeys. This happens even when using the "No Reset" variants of these operators. Is this the intended behavior?

Current Behavior

Both start_pose_mode() and stop_pose_mode() in tools/armature_manual.py unconditionally reset all shapekeys to 0:

for mesh in Common.get_meshes_objects():
    if Common.has_shapekeys(mesh):
        for shape_key in mesh.data.shape_keys.key_blocks:
            shape_key.value = 0

This reset occurs regardless of whether the reset_pose parameter is True or False. The "No Reset" operator variants (StartPoseModeNoReset, StopPoseModeNoReset) only preserve bone transforms, not shapekey values.

Use Case Where This Is Inconvenient

Many VRChat avatars include shapekeys for body customization (e.g., BODY - SKINNY LEGS, BODY - WIDER HIPS, etc.). My use case is to:

  • Set a shape key to my desired values in Blender (what I will enable later in Unity)
  • Test poses in Blender with those same proportions enabled, making sure my changes look rght

Currently, if I have a shape key like BODY - SKINNY LEGS enabled (set to 1.0) and click "Start Pose Mode", their body reverts to the default proportions, making it tricky to accurately preview how poses will look on their customized avatar.

Workaround: Users can enter pose mode manually via Blender (bypassing CATS) to preserve shapekeys, but then cannot use CATS' "Stop Pose Mode" without losing their shapekey values. (Or you can undo your pose changes via undo history if just testing how things look if you don't want to use CATS' button and have to re-add the shapekeys.)

Questions for Maintainers

  1. Was the shapekey reset intentionally designed this way? If so, what was the reasoning?

  2. Are there CATS features that depend on shapekeys being reset? Potential dependencies to consider:

    • Eye tracking setup (uses shapekeys for eye movements)
    • Viseme generation (creates mouth shapekeys)
    • "Pose to Shape" functionality (converts current pose to a shapekey)
  3. Should the "No Reset" variants preserve shapekeys? The current translation strings might suggest they should preserve state, but then again it says poses, not shapekeys ;)

    • StartPoseModeNoReset.desc: "Starts the pose mode without resetting the pose"
    • StopPoseModeNoReset.desc: "Stops the pose mode and keeps the current pose"

Discussion

It would be handy for me to adjust this not to reset my shape keys, but I don't use most of CATS features yet, so I am uncertain about whether proposing a change would screw up other features/behavior.

Personally, I prefer to stop pose mode without the NoReset behavior, as the poses I make are just for temporary tests.

If this isn't something we'd like to change (or there's a reason we shouldn't), I might just patch my own version (or maybe add a toggle or something). For now I'm just hoping to understand a bit more about the design, and will go from there. Thanks!!

When using "Start Pose Mode" or "Stop Pose Mode" in CATS, all shapekeys are reset to 0, including body customization shapekeys. This happens even when using the "No Reset" variants of these operators. Is this the intended behavior? ## Current Behavior Both `start_pose_mode()` and `stop_pose_mode()` in `tools/armature_manual.py` unconditionally reset all shapekeys to 0: ```python for mesh in Common.get_meshes_objects(): if Common.has_shapekeys(mesh): for shape_key in mesh.data.shape_keys.key_blocks: shape_key.value = 0 ``` This reset occurs regardless of whether the `reset_pose` parameter is `True` or `False`. The "No Reset" operator variants (`StartPoseModeNoReset`, `StopPoseModeNoReset`) only preserve bone transforms, not shapekey values. ## Use Case Where This Is Inconvenient Many VRChat avatars include shapekeys for body customization (e.g., `BODY - SKINNY LEGS`, `BODY - WIDER HIPS`, etc.). My use case is to: - Set a shape key to my desired values in Blender (what I will enable later in Unity) - Test poses in Blender with those same proportions enabled, making sure my changes look rght Currently, if I have a shape key like `BODY - SKINNY LEGS` enabled (set to 1.0) and click "Start Pose Mode", their body reverts to the default proportions, making it tricky to accurately preview how poses will look on their customized avatar. **Workaround**: Users can enter pose mode manually via Blender (bypassing CATS) to preserve shapekeys, but then cannot use CATS' "Stop Pose Mode" without losing their shapekey values. (Or you can undo your pose changes via undo history if just testing how things look if you don't want to use CATS' button and have to re-add the shapekeys.) ## Questions for Maintainers 1. **Was the shapekey reset intentionally designed this way?** If so, what was the reasoning? 2. **Are there CATS features that depend on shapekeys being reset?** Potential dependencies to consider: - Eye tracking setup (uses shapekeys for eye movements) - Viseme generation (creates mouth shapekeys) - "Pose to Shape" functionality (converts current pose to a shapekey) 3. **Should the "No Reset" variants preserve shapekeys?** The current translation strings _might_ suggest they should preserve state, but then again it says poses, not shapekeys ;) - `StartPoseModeNoReset.desc`: "Starts the pose mode without resetting the pose" - `StopPoseModeNoReset.desc`: "Stops the pose mode and keeps the current pose" ## Discussion It would be handy for me to adjust this not to reset my shape keys, but I don't use most of CATS features yet, so I am uncertain about whether proposing a change would screw up other features/behavior. Personally, I prefer to stop pose mode without the NoReset behavior, as the poses I make are just for temporary tests. If this isn't something we'd like to change (or there's a reason we shouldn't), I might just patch my own version (or maybe add a toggle or something). For now I'm just hoping to understand a bit more about the design, and will go from there. Thanks!!
Ghost commented 2025-12-10 05:03:42 +00:00 (Migrated from git.disroot.org)

Thanks for the detailed report, the shape key reset was likely intentional by the original developers to ensure a clean, neutral pose state by resetting both bone transforms and mesh deformations to avoid unexpected interactions between shape keys and pose bones (or something on those lines).

This would make sense for animation/posing workflows where you want a known baseline state. However, you're right that the No Reset button (The small one next to the main button) should preserve shape keys but currently doesn't. I don't intend to change the main button but I will fix the smaller button so it doesn't reset shapekeys.

This most likely broke at somepoint but no one uses it so it was never reported.

Thanks for the detailed report, the shape key reset was likely intentional by the original developers to ensure a clean, neutral pose state by resetting both bone transforms and mesh deformations to avoid unexpected interactions between shape keys and pose bones (or something on those lines). This would make sense for animation/posing workflows where you want a known baseline state. However, you're right that the No Reset button (The small one next to the main button) should preserve shape keys but currently doesn't. I don't intend to change the main button but I will fix the smaller button so it doesn't reset shapekeys. This most likely broke at somepoint but no one uses it so it was never reported.
Ghost commented 2025-12-10 05:11:43 +00:00 (Migrated from git.disroot.org)

A fix is now on the 5.x Dev Branch and will be pushed to the next version of Cats which is due out on Friday.

A fix is now on the 5.x Dev Branch and will be pushed to the next version of Cats which is due out on Friday.
Ghost commented 2025-12-10 05:22:20 +00:00 (Migrated from git.disroot.org)

Issue closed as fixed, if the fix didn't resolve the issue please feel free to reopen it.

Issue closed as fixed, if the fix didn't resolve the issue please feel free to reopen it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Kneelawk/Cats-Blender-Plugin#434
No description provided.