9 releases (breaking)
✓ Uses Rust 2018 edition
|0.8.1||Oct 4, 2019|
|0.7.0||Jul 30, 2019|
|0.4.0||Oct 23, 2018|
|0.1.0||Dec 29, 2017|
#23 in Game development
1,602 downloads per month
Used in 9 crates (2 directly)
This crate is used by the Amethyst game engine for animation.
Provides computer graphics animation functionality.
Animation on a single entity comprises of one or more
Samplers. Each sampler
operates on a
Channel. Thus, for a single entity, conceptually each
(Channel, Sampler) pair is enough to define one part the animation, and a
Vec<(Channel, Sampler)> defines the whole animation.
In a more complex situation, an object in game may be made up of multiple entities. Say you have
a dragon monster, that is defined by a skinned mesh that has a skeleton with 10 joints. Each
joint will then be an
Entity. Our animation definition holds the samplers to run for the whole
object. To animate each of the entities of this complex object, we need a way to link the
sampler to the each of the entities.
Animation definitions are persistent and can be stored on disk. Entities however, are not. To
link the right sampler to the right entity, when we construct each of the entities such as the
joints, we track it with an index, called the
The following list might help to illustrate the scenario:
|0||body ("main" entity)|
The node index to
Entity mapping is stored in
Back to the animation definition, we also record the
node_index in the tuple, which we call a
"node". Each node is now
(node_index, Channel, Sampler) (conceptually — in code the
tuple holds references instead of the complete object). Hence, each node holds the information
of what channel the sampler belongs to, and which entity it should be applied to.
So what happens for the nodes where we only have one entity? Right now Amethyst requires you to
assign it node index