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

About Motive

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.

Prerequisites

Motive is written in C++. You should be familiar with C++ coding environments and tools.

Concepts

In Motive, a Motivator encapsulates an animating variable. There are currently two kinds of Motivators: One to animate a float, and one to animate a 4x4 matrix.

Each Motivator is driven by a MotiveProcessor. Each MotiveProcessor implements a different algorithm for animating a variable. There are several MotiveProcessors and a Motivator may be switched between them.

A MotiveProcessor holds the animation data for all Motivators that it drives. This animation data is updated in bulk during the MotiveEngine AdvanceFrame() call. The high performance of the Motive System comes from the optimization oportunities provided by this bulk update.

All Motivators are updated at the same time in one call to MotiveEngine::AdvanceFrame(). You can have multiple MotiveEngines, if required, but you will get the best performance if you have just one.

Optimization

Motive has SIMD versions of essential functions for NEON processors.

Motive uses the MathFu vector math library. For optimial performance, you should use the SIMD implementation of MathFu by specifying MATHFU_COMPILE_WITH_SIMD.