Skip to content

Conversation

@yutingye
Copy link
Contributor

Summary:
This is to handle the case where we want to apply anim curves in an fbx to a skinned model.

Previously, we directly copy over joint parameters, assuming the anim curves are on an identical skeleton as the skinned model. However, even when two skeletons "look" the same, they could still have different joint orders or rest pose / bind pose. A direct copy will fail in these cases.

This diff handles such cases more robustly, by mapping global joint transforms between them based on joint names, then convert the transforms back to joint parameters based on the target skeleton's bind pose.

We could still be in trouble if InverseParameterTransform is lossy, but that's a different story.

convert_model is due for refactoring...

Differential Revision: D86828693

@meta-cla meta-cla bot added the CLA Signed This label is managed by the Meta Open Source bot. label Nov 15, 2025
@meta-codesync
Copy link
Contributor

meta-codesync bot commented Nov 15, 2025

@yutingye has exported this pull request. If you are a Meta employee, you can view the originating Diff in D86828693.

facebook-github-bot pushed a commit that referenced this pull request Nov 15, 2025
Summary:

This is to handle the case where we want to apply anim curves in an fbx to a skinned model. 

Previously, we directly copy over joint parameters, assuming the anim curves are on an identical skeleton as the skinned model. However, even when two skeletons "look" the same, they could still have different joint orders or rest pose / bind pose. A direct copy will fail in these cases.

This diff handles such cases more robustly, by mapping global joint transforms between them based on joint names, then convert the transforms back to joint parameters based on the target skeleton's bind pose.

We could still be in trouble if InverseParameterTransform is lossy, but that's a different story. 

`convert_model` is due for refactoring...

Differential Revision: D86828693
Summary:

This change adds a parameterized constructor to the FileSaveOptions Python binding, enabling users to initialize all member variables directly when creating the object instead of having to set them one by one after construction.

This improves the API ergonomics by allowing cleaner initialization patterns:
```python
options = FileSaveOptions(mesh=False, locators=True, blend_shapes=False)
```

Reviewed By: cstollmeta, jeongseok-meta

Differential Revision: D86904749
)

Summary:

This diff replaces the `GltfOptions` parameter with `FileSaveOptions` in the `saveGltfCharacter` function signatures to provide a unified interface for file saving options across different formats (GLTF and FBX).

Reviewed By: cstollmeta, jeongseok-meta

Differential Revision: D86882964
Summary:

Replace custom saveMotion with the unified saveCharacter() in character_io, so now marker tracking can save fbx file with marker data.

Note that this change removes the behavior of saving the identity vector as joint parameters separately from the motion. The motion matrix now has the identity information in every frame as well. This is what most users do anyways.

Reviewed By: jeongseok-meta, cstollmeta

Differential Revision: D86040409
Summary:

This diff refactors the FBX save functions to use the `FileSaveOptions` struct instead of individual parameters, following the pattern established in D86039901 for GLTF save functions.

Differential Revision: D86883821
Summary:

This is to handle the case where we want to apply anim curves in an fbx to a skinned model. 

Previously, we directly copy over joint parameters, assuming the anim curves are on an identical skeleton as the skinned model. However, even when two skeletons "look" the same, they could still have different joint orders or rest pose / bind pose. A direct copy will fail in these cases.

This diff handles such cases more robustly, by mapping global joint transforms between them based on joint names, then convert the transforms back to joint parameters based on the target skeleton's bind pose.

We could still be in trouble if InverseParameterTransform is lossy, but that's a different story. 

`convert_model` is due for refactoring...

Differential Revision: D86828693
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. fb-exported meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants