Skip to content

Standalone exporter Skeleton has all identity bind transforms #46

Description

@charlesfleche

Describe the bug

The following scene is a simple skeleton with three bones. Bones transforms are not identities:

Image

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:

Image

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

Specs (if applicable):

  • OS & version: Windows 11
  • 3ds Max version: 2027.2 / 29.2.0.20588
  • 3ds USD version: 0.16.2.31

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions