Motive Animation System
An open source project by FPL.
 All Classes Functions Variables Typedefs Friends Pages
Motive Animation System


Motive is an animation system written in cross-platform C++. It's designed to be,

  • performant – data is stored centrally and processed in bulk so that we can take advantage of SIMD and multi-threading opportunities.
  • compact – spline data is preferred over sampled data, so animations requires less memory.
  • expandable – new animation algorithms can be registered and utilized without touching central code. Motive has been tested on Android, Windows, OS X, and Linux, but should be portable to any platform that supports C++.

You can see Motive animation in use in the Zooshi and Pie Noon. sample games.


Static objects may look good in screenshots, but motion is what brings a scene to life. If done well, even simple motion along one axis can add character and charm to your game.

The difficulty is in doing the motion well. There is a lot of subtly to motion. There's a lot that can look ok, but not great, for reasons that are not obvious.

For these two reasons, a simple animation library is valuable–just as valuable, perhaps, as a simple rendering or audio library.


The v1.1 release of Motive focusses on speed and scalability. Motive now supports rigged character animation and blending between those animations. Motive maintains its aptitude for procedural animation that was the focus of v1.0.


Motive can be downloaded from GitHub or the releases page.

Important: Motive uses submodules to reference other components it depends upon so download the source using:

git clone --recursive


Motive depends upon:

  • MathFu – used internally; you can substitute your own vector types in the external API.
  • FplUtil – C++ allocator libraries.

Motive has optional features that depend upon:

  • FlatBuffers – allow animation data to be defined in json and then compiled to a small binary format.

Tracking on Google Play

For applications on Google Play that integrate this tool, usage is tracked. This tracking is done automatically using the embedded version string in kVersion. Aside from consuming a few extra bytes in your application binary, it shouldn't affect your application at all. We use this information to let us know if Motive is useful and if we should continue to invest in it. Since this is open source, you are free to remove the version string, but we would appreciate if you would leave it in.

Feedback and Reporting Bugs