Skip to content

Skin/armature export produces NODE_SKINNED_MESH_NON_ROOT #1626

@emackey

Description

@emackey

There's been discussion of this before, for example #1538 (comment)

So perhaps GLTF exporter should apply transforms and clear skinned mesh parent during export.

I've come to understand the correct fix is to NOT apply transforms to the skinned mesh. The design of glTF's skinning system is such that any transforms applied to the skinned mesh itself are completely ignored, only joint transforms are considered. Specifically, the final location of each vertex coming out of a glTF skinned vertex shader has influence from joints adding up to 100% strength, with exactly 0% coming from the mesh's own model matrix.

So the correct answer here sounds pretty reckless, but it's true: Just clear the parent of the skinned mesh. As in, just lose the reference to the parent. Don't apply any of the parent's transforms or animations (and you may also clear any transforms or animations that target the skinned mesh itself; they're unused as well).

Essentially glTF's skinning system treats the mesh as always being at the origin, and uses the joints (not parent node transforms) to move each vertex where it belongs. The joints' transforms do the work of inheriting from their own parents, so these are not lost.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions