Autodesk / Autodesk/3dsmax-usd
[EMSUSD-4082] Standalone exporter Skeleton has all identity bind transforms
- Dominant language
- C++
- Stars
- 94
- Forks
- 6
- Avg merge
- 6d 20h
- Merged PRs (30d)
- 1
Description
**Describe the bug**
The following scene is a simple skeleton with three bones. Bones transforms are not identities:
When exported to USD with this script:
```
import tempfile
from pymxs import runtime as rt
export_options = rt.USDExporter.createOptions()
export_options.RootPrimPath = "/MY_OWN_ROOT"
export_options.Meshes = True
export_options.Shapes = False
export_options.Lights = False
export_options.Cameras = False
export_options.Skin = True
export_options.Morpher = True
export_options.Materials = True
export_options.ShadingMode = rt.name("useRegistry") # none, useRegistry
export_options.AllMaterialTargets = rt.name("UsdPreviewSurface")
export_options.UsdStagesAsReferences = False
export_options.HiddenObjects = True
export_options.UseUSDVisibility = False
export_options.AllowNestedGprims = False
export_options.FileFormat = rt.name("ascii") # ascii, binary
export_options.Normals = rt.name("asAttribute") # none, asAttribute, asPrimvar
export_options.MeshFormat = rt.name("polyMesh") # fromScene, polyMesh, triMesh
export_options.TimeMode = rt.name("current")
export_options.SetChannelPrimvarMapping(-2, "displayOpacity") # Vertex Alpha
export_options.SetChannelPrimvarMapping(-1, "LayerWeights") # Vertex Illum
export_options.SetChannelPrimvarMapping(0, "displayColor") # Vertex Color
export_options.StartFrame = float(rt.animationRange.start)
export_options.EndFrame = float(rt.animationRange.end)
export_options.SamplesPerFrame = 1.0
export_options.UpAxis = rt.name("z") # y, z
export_options.BakeObjectOffsetTransform = True
export_options.PreserveEdgeOrientation = True
export_options.BonesPrimName = "MyDefaultBonesPrimName"
export_options.AnimationsPrimName = "MyDefaultBonesPrimName"
export_options.IncludeAllBones = True
export_options.PreserveBoneMeshes = False
export_options.SimplifyBonePaths = True
export_options.UseWorldspaceRoot = False
export_options.UseProgressBar = True
export_options.LogLevel = rt.name("info") # off, info, warn, error
export_options.OpenInUsdview = False
export_options.ChaserNames = rt.Array()
export_options.AllChaserArgs = rt.Dictionary()
with tempfile.NamedTemporaryFile(prefix="maxusd-", suffix=".usda", delete=False) as fp:
path = fp.name
print(path)
rt.USDExporter.ExportFile(
path,
exportOptions=export_options,
contentSource=rt.name("all"), # all, selected, nodeList,
)
```
The exported USD joints have their bind transforms are all set to identity transforms:
**Steps to reproduce**
Steps to reproduce the behavior:
1. Create a Skeleton
2. Export it to USD with the script above
3. The exported bind transforms are all identities
**Expected behavior**
For standalone skeletons, in absence of other skinning information, I think the bind transforms should match the rest transform, in world space.
**Attachments**
[debug-bind-identities.zip](https://github.com/user-attachments/files/30358071/debug-bind-identities.zip)
**Specs (if applicable):**
- OS & version: Windows 11
- 3ds Max version: 2027.2 / 29.2.0.20588
- 3ds USD version: 0.16.2.31
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the standalone skeleton export using the provided pymxs script and the rt.USDExporter.ExportFile entry point. Inspect the exporter’s skeleton bind-transform handling and compare the generated USD joint transforms with the skeleton rest transforms in world space. Done means standalone skeleton exports no longer produce identity bind transforms when the source bones have non-identity transforms.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 50/100