Skeletal animation is great for organic-looking character animations. It allows meshes to be deformed by only animating a few 3D points (which are hierarchically organized into a “skeleton”) instead of having to animate each and every mesh vertex.
If you upload a 3D file with a rigged animation to the Console and open it in the Editor, you will see your animated model.
When a source file containing a rigged animated model is uploaded to the Console, the animation-related assets generated are the following:
Animation
Asset
Animation
An animation clip
,
Skeleton
Asset
Skeleton
A skeleton
,
Animation Set
Asset
Animation Set
An animation set linked to an animation graph
, and
Animation Graph
Asset
Animation Graph
An animation graph
.
Animation-related assets converted from source file in Console.
The two assets that are 3dverse-specific are the
Animation Graph
Asset
Animation Graph
An animation graph
and the
Animation Set
Asset
Animation Set
An animation set linked to an animation graph
.
The mesh, the skeleton and the animations can usually be exported quite easily from other tools (Blender, 3ds Max, etc.), but the logic that governs the choice of animation cannot be. This is where the animation graph comes into play.
A default animation graph and animation set are automatically converted from a source files containing rigged models.
is a series of key poses. A key pose is a pose of the skeleton, with transforms for each bone of the skeleton. Each key pose correspond to a frame of the animation.
represents a 3D hierarchy of bones. A bone has a name and a transform, and is linked to other bones in a skeleton. Think of a bone more like a real-life joint (point) than a real-life bone (edge between two points).
A skinned mesh's vertices are influenced by the the bones of a skeleton.
There is no dedicated "skinned mesh" asset type in 3dverse. A skinned mesh is simply a
Mesh
Asset
Mesh
A collection of triangulated submeshes
which contains bone ids and bone weights, alongside other potential vertex data such as positions and normals.
Click on info near the mesh in the mesh reference component to view the vertex channels in the mesh. This mesh has bone id and bone weight channels and is therefore skinned.
is an asset which applies some logic to animations. If you want an animation to transition to another one (e.g. an idle animation transitioning to a walking animation), you can configure this in an animation graph.
While it is running, the animation graph outputs a pose at each frame. Animation graphs run automatically at the start of each session.
to provide the animations the animation graph will work with.
Animation graph and animation set are linked together in the
Animation Controller
Entity Component
Animation Controller animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
The following is a description of the skeletal animation-related components in 3dverse.
The mandatory components for skeletal animation to work are:
Animation Controller
Entity Component
Animation Controller animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
Schema
animationGraphRef
Asset UUID
animationSetRef
Asset UUID
dataJSON
JSON
rootBoneEntityRef
Entity Reference
{linkage,originalEUID,}
rootMotionEnabled
Boolean
Default: false
,
Mesh Reference
Entity Component
Mesh Reference mesh_ref
Reference to a mesh.
Schema
shadowCastingMode
Unsigned Byte
Default: [1] On
[0] Off [1] On
submeshIndex
Integer
Default: 0
value
Asset UUID
and
Skeleton Reference
Entity Component
Skeleton Reference skeleton_ref
Reference to a skeleton.
Schema
value
Asset UUID
. The
Bone
Entity Component
Bone bone
Links entity to bone in skeleton.
Schema
boneIndex
Unsigned Integer
component is optional.
To set up skeletal animation in your scene, you must set up entities with these components in the correct way.
When you upload a model with a skeletal animation in it, everything will be set up correctly for you. This means your scene graph will have the structure below:
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
Schema
animationGraphRef
Asset UUID
animationSetRef
Asset UUID
dataJSON
JSON
rootBoneEntityRef
Entity Reference
{linkage,originalEUID,}
rootMotionEnabled
Boolean
Default: false
component in a scene.
The entity with
Animation Controller
Entity Component
Animation Controller animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
Schema
animationGraphRef
Asset UUID
animationSetRef
Asset UUID
dataJSON
JSON
rootBoneEntityRef
Entity Reference
{linkage,originalEUID,}
rootMotionEnabled
Boolean
Default: false
will affect all descendant skinned mesh entities (i.e. entities with
Mesh Reference
Entity Component
Mesh Reference mesh_ref
Reference to a mesh.
Schema
shadowCastingMode
Unsigned Byte
Default: [1] On
[0] Off [1] On
submeshIndex
Integer
Default: 0
value
Asset UUID
and
Skeleton Reference
Entity Component
Skeleton Reference skeleton_ref
Reference to a skeleton.
Schema
value
Asset UUID
referencing compatible skinned mesh and skeleton).
The pose generated by the referenced animation graph will be used by the skinned meshes that fall under the
Animation Controller
Entity Component
Animation Controller animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
Schema
animationGraphRef
Asset UUID
animationSetRef
Asset UUID
dataJSON
JSON
rootBoneEntityRef
Entity Reference
{linkage,originalEUID,}
rootMotionEnabled
Boolean
Default: false
entity's hierarchy.
If the animation graph has any inputs specified, they will show up and be configurable in the
Animation Controller
Entity Component
Animation Controller animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.
Schema
animationGraphRef
Asset UUID
animationSetRef
Asset UUID
dataJSON
JSON
rootBoneEntityRef
Entity Reference
{linkage,originalEUID,}
rootMotionEnabled
Boolean
Default: false
.
Animation Controller
animation_controller
Animation controller with reference to an animation graph and an animation set. Enables skeletal animation on its skinned mesh descendents whose skeleton is compatible with the animations in the animation set.