CNA-GAP-040: A skinned glTF model cannot also carry rigid scene-node animation: tracks not driven by its skins are dropped

CNA snapshot 009d40f5  ·  Known Issues › Functional gaps  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

Model::Tag holds SkinningData for a skinned model, so scene-node clips whose tracks are not carried by a skin palette are dropped with the rigid-animation-dropped-on-skinned-model diagnostic.

Identifier
CNA-GAP-040
Category
Functional gap
Subsystem
Models & glTF
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
ContentManager::Load<Model> on glTF files that animate non-joint nodes of a skinned model

Expected behaviour

A glTF file may animate both a skin's joints and ordinary nodes; both kinds of track should reach the application.

Actual behaviour at TARGET

ContentManager.cpp attaches rigid clips (ModelAnimationsEXT) only to an unskinned model. For a skinned one it counts the scene-node tracks not carried by the skins, logs a GLTF-295 warning and calls AppendGltfRigidAnimationDropEXT (GltfImportCore.cpp), which records rigid-animation-dropped-on-skinned-model: “cannot be retained because Model::Tag already contains SkinningData”. Tracks on nodes that belong to a skin palette are kept through the skin.

Source locations

Evidence

Checked by reading at 009d40f5; not executed.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

GltfImportReportTests.cpp covers the diagnostic; no test expects the rigid tracks to survive.

Regression test

If a second carrier is added (a property rather than Tag), a fixture with a skinned mesh and an animated prop node expecting both clips.

Blast radius

Skinned characters whose files also animate props, cameras or other rigid nodes.

Workaround

Split the rigid parts into a separate unskinned file.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.