About Facial Expression Motion

[Last updated: 11/07/2019]


What is Expression Motion?

Expression motion is an SDK feature that sets values for expressions relative to the current state, in addition to normal motion.
The Motion Manager's fade function can be used to change over time from the current facial expression to a new facial expression setting that is played back.
Another feature not found in motion is the ability to specify the calculation method.

Since it inherits from the ACubismMotion class, it can be managed by the CubismMotionManager class just like normal motion.
To create expression data (.exp3.json file), the .motion3.json file must be loaded into Cubism Viewer (for OW) as a motion for expression, converted and output.
When the .motion3.json file is loaded, the initial value of the motion is set as the target value of the facial expression.
“Create facial expressions with Animator”
“Setup and Export of Facial Expressions”


Expression has the following differences when compared to motion.

  • There is no change in value over time.
  • It cannot affect the parts.
  • You can specify the calculation method (add, multiply, or overwrite).


Instance creation (.exp3.json read)

Expression is reproduced using the CubismExpressionMotion class derived from the ACubismMotion class.
To create a CubismExpressionMotion instance,
use CubismExpressionMotion::Create function in Native (C++) or CubismExpressionMotion.create function in Web (TypeScript).



Creating instances for expression management

The CubismMotionManager class is used to apply facial expressions.
However, it must be created as a separate instance in order to use the normal motion and effect together.



Regeneration of facial expressions and its mechanism

As with motion playback, facial expression playback involves issuing a playback command to the management class.


The calculation method can be specified for each parameter of the expression.
There are three calculation methods: addition, multiplication, and override.



This method is selected when the calculation method is indicated as “Add” or when no calculation method is specified.
The values shown in the .exp3.json file are added to the parameter values as they are when applied.
It is used for parameters that are not often manipulated in motion or
when you want to affect it by sliding it as it is.
When exporting values in Cubism Viewer (for OW), the difference from the initial value to the set value of the parameter is set.


This is selected when the calculation method is indicated as “Multiply”.
The value of the parameter at the time of application is multiplied by the value shown in the .exp3.json file as it is.
Note that this multiplication has no effect on the addition or overwriting after it is applied.
This is useful for amplifying or reducing the motion as it is.
When exporting values in Cubism Viewer (for OW), the set values are set as they are.
If you multiply a -30 to 30 motion by 30, you end up with a -900 to 900 motion, so
be careful to set the combination of motion and facial expression values.


This cannot be set in Cubism Viewer (for OW), but can be used by specifying “Overwrite” as the calculation method.
The value of the parameter at the time of application is ignored and the value is overwritten as is.
This is useful when you want to ignore motion and other movements.


Differences in representation due to different arithmetic schemes

This is an example of opening and closing both eyes with a set value of 0.4 and applying the Add, Multiply, and Overwrite expressions, respectively.
In Add, the eye remains closed for a while because it is -0.6 for every drawing, so it quickly reaches the lower limit of open/close and is overwritten to the lower limit value.
With Multiply, the blink works nicely because the entire waveform is multiplied by the value.
Overwrite ignores blinking and does not blink.

When combined with motion, etc., nuance can be changed with a single calculation of facial expression.


Application of facial expressions

It can be applied to the model using the Native(C++) CubismMotionManager::UpdateMotion function in the management class, the Web(TypeScript) CubismMotionManager.updateMotion function,
the MotionQueueManager::DoUpdateMotion function in Native (C++), or the CubismMotionQueueManager.doUpdateMotion function in Web (TypeScript).

The order of computation of motion, facial expression, and other parameter manipulation elements greatly affects the expression.

“About the parameters: The importance of the order in which parameters are calculated”.

Pay close attention to the order of application.

© 2010 - 2022 Live2D Inc.