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.
What 3D file types can I upload?
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
,
Animation Set
, 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
.
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.
Assets
The following is a description of the skeletal animation-related assets in 3dverse.
Asset Editors Note that there are no animation, skeleton or mesh editors in 3dverse. These assets are usually directly imported and converted from source files.
However, animation graphs and animation sets are configurable via the Animation Graph Editor .
Animation
An
Animation
Asset Animation An animation clip
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.
There is no Animation editor in 3dverse. However, certain playback qualities (i.e. playback speed, start offset, stop offset) can be configured in the animation graph.
Skeleton
A skeleton is a hierarchy of bones.
A
Skeleton
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).
Skinned Mesh
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
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.
Animation Graph
An
Animation Graph
Asset Animation Graph An animation graph
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.
Animation Graph as State Machine An animation graph is essentially a state machine. Each state in the state machine outputs a pose.
An example of a state could be a "Walking" state which samples a walking animation.
While it is running, the animation graph is either in a state or in a transition between states. If it is in a state it computes and outputs the pose of that state. If it is in a transition between states, it blends between the pose of the initial state and the pose of the next state to generate the final pose.
Animation Set
An
Animation Set
is an asset which is simply a list of
Animation
Asset Animation An animation clip
. An animation set is used in tandem with an
Animation Graph
Asset Animation Graph An animation graph
to provide the animations the animation graph will work with.
Animation graph and animation set are linked together in the
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
component.
What is the advantage of the animation set? Why aren't animations directly embedded in the animation graph? What is the point of a dedicated animation set asset?
Because of the decoupling between the two assets, the same animation graph (which describes the logic of how animations will play) can be used with different animation sets.
Not only then can you use a different set of animations with the same animation graph for your model, but you can also use the same animation graph on different models with potentially different skeletons.
You could create one "Movement" animation graph and use it with a human and a dog, as long as you create the animation sets for each.
Components
The following is a description of the skeletal animation-related components in 3dverse.
The mandatory components for skeletal animation to work are:
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
,
Mesh Reference
Schema shadowCastingMode Unsigned Byte
Default:1 (On)
Min:0
Shadow casting mode for this mesh.
Shadow casting mode for this mesh.
submeshIndex Integer
Default:0
Index of the submesh within the mesh's submesh array.
Index of the submesh within the mesh's submesh array.
and
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
. The
Bone
Schema boneIndex Unsigned Integer
Min:0
Index of the bone within the skeleton.
Index of the bone within the skeleton.
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:
Skeleton Ref
The
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
simply references a skeleton.
A skinned mesh entity will have a
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
and a
Mesh Reference
Schema shadowCastingMode Unsigned Byte
Default:1 (On)
Min:0
Shadow casting mode for this mesh.
Shadow casting mode for this mesh.
submeshIndex Integer
Default:0
Index of the submesh within the mesh's submesh array.
Index of the submesh within the mesh's submesh array.
with compatible mesh and skeleton.
A
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
can also appear on the root bone of the skeleton hierarchy. See
bone for more info.
Skeleton Reference skeleton_ref
Reference to a skeleton asset for skinning and animation.
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
Animation Controller
The
Animation Graph
Asset Animation Graph An animation graph
and
Animation Set
assets are linked to an entity via the
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
component in a scene.
The entity with
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
will affect all descendant skinned mesh entities (i.e. entities with
Mesh Reference
Schema shadowCastingMode Unsigned Byte
Default:1 (On)
Min:0
Shadow casting mode for this mesh.
Shadow casting mode for this mesh.
submeshIndex Integer
Default:0
Index of the submesh within the mesh's submesh array.
Index of the submesh within the mesh's submesh array.
and
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (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
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
entity's hierarchy.
If the animation graph has any inputs specified, they will show up and be configurable in the
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
.
Animation Set must be compatible with skeleton Note that the animations referenced by the
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
entity's animation set need to have the same bone count as the descendant skinned mesh's skeletons.
Animation Controller animation_controller
Drives skeletal animation using an Animation Graph and Animation Set; animates descendant skinned meshes whose skeletons are compatible with the set.
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
Bone
The
Bone
Schema boneIndex Unsigned Integer
Min:0
Index of the bone within the skeleton.
Index of the bone within the skeleton.
component links an entity to a bone in the skeleton with its bone index attribute. The root bone (
boneIndex=0) entity should also have a
Skeleton Reference
Schema Referenced skeleton (UUID).
Referenced skeleton (UUID).
.
What is the use of a bone entity? The hierarchy of bone entities is not necessary for an
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
to do its job.
However, if set up correctly, the entity with
Bone
Schema boneIndex Unsigned Integer
Min:0
Index of the bone within the skeleton.
Index of the bone within the skeleton.
component will be updated by that bone’s animated transform every frame.
This is useful for incorporating external objects to your animation, such as a sword wielded by a character. See how to attach object in animation for more info.
How are bone entities set up in the scene? Entities with
Bone
Schema boneIndex Unsigned Integer
Min:0
Index of the bone within the skeleton.
Index of the bone within the skeleton.
components should be assembled in a hierarchy that mirrors the skeleton.
This hierarchy is created automatically for you when you upload a file with a skeletal animation.
The
Animation Controller
Schema Referenced Animation Graph (UUID).
Referenced Animation Graph (UUID).
Referenced Animation Set (UUID).
Referenced Animation Set (UUID).
Animation Graph input parameters in JSON format.
Animation Graph input parameters in JSON format.
rootBoneEntityRef Entity Reference
Entity containing the Bone component for the skeleton's root bone.
Entity containing the Bone component for the skeleton's root bone.
rootMotionEnabled Boolean
Default:false
Enable root motion extraction and application to the entity transform.
Enable root motion extraction and application to the entity transform.
's
rootBoneEntityRef references the root bone entity in this hierarchy.
The skeleton hierarchy is seen in the scene graph to the left, and the selected root bone's components are seen to the right.
Associates this entity with a bone in a skeleton (for attachments and transforms).
Schema boneIndex Unsigned Integer
Min:0
Index of the bone within the skeleton.
Index of the bone within the skeleton.
Debug Lines
Skeleton Debug Lines If you Enable Debug Lines and toggle Draw Skeletons in the scene settings you will see the animated skeleton in yellow.