Header menu logo Mibo

AnimatedMesh Type

A mesh with skeleton data for GPU skinning.

Load once from an Assimp Scene via AnimatedMesh.fromScene, then share across all entities that use the same mesh. Each entity computes its own bone matrices via AnimatedMesh.computeBoneMatrices and passes them to Draw3D.drawSkinnedMesh.

Record fields

Record Field Description

BindLocalPoses

Full Usage: BindLocalPoses

Field type: Matrix[]

Per-bone bind LOCAL pose (node-local transform from the Assimp node tree, in MonoGame row-vector convention — transposed like InverseBindPose).

Used by computeBonePalette as the fallback for bones that a clip does NOT animate. Falling back to Matrix.Identity here (the old behavior) collapsed every channelless bone to the skeleton origin: in clips like 'idle'/'jump' that animate only a subset of bones, the unanimated root/legs snapped to origin and dragged their descendants there, making limbs vanish. The bind local pose holds the bone at its authored rest position instead, so unanimated limbs stay put.

Field type: Matrix[]

BoneCount

Full Usage: BoneCount

Field type: int
Field type: int

BoneNames

Full Usage: BoneNames

Field type: string[]
Field type: string[]

BoneOrder

Full Usage: BoneOrder

Field type: int[]

Bone indices sorted by ascending hierarchy depth (parents before children).

Depends only on BoneParents, so it is precomputed once at load and reused every frame by computeBonePalette — avoids the per-frame depth recursion and sort that the hot path would otherwise pay.

Field type: int[]

BoneParents

Full Usage: BoneParents

Field type: int[]

Index of each bone's parent in BoneNames, or -1 for a root bone.

Built from the Assimp node tree so computeBonePalette can compose parent chains (local pose × parent world pose). Without this, child bones move in isolation — the classic "exploding joints" symptom.

Field type: int[]

InverseBindPose

Full Usage: InverseBindPose

Field type: Matrix[]
Field type: Matrix[]

Type something to start searching.