Nodes can serve three purposes in the face graph:
- Modify values – Every node has a node function g that determines how the Node will modify or use its inputs (y1, y2, y3, …). Most nodes in the face graph will simply add their inputs so g(y1, y2, y3) = y1+y2+y3. Multiplication is another supported operation for g and any function g is possible provided that a programmer adds the node type to the FaceFX SDK.
- Receive values – Nodes can receive values from other nodes, but they also have the job of receiving inputs from animation curves and other in-game systems. Nodes that have the same name as an animation curve will receive the animation curve’s value at the beginning of the face graph evaluation.
- Store Data – The final purpose of a node is to store data. FxBonePoseNodes store the bone position, rotation, and scale information so that the bones can be blended to the appropriate final transformation. Not all types of nodes hold data.
FxCombinerNodes are the most common type of node. They can have any number of inputs and any number of outputs. Their node function g(y1, y2, y3, …) as described in the chapter Introducing the Face Graph can either be sum inputs g(y1, y2, y3) = y1 + y2 + y3 or multiply inputs g(y1, y2, y3) = y1 * y2 * y3. Combiner nodes do not do anything with the data; they simply pass on and modify values as they flow through the face graph.
Bone pose nodes work just like combiner nodes, because they can have multiple inputs and multiple outputs. The nodes also store bone position, rotation, and scale information for a group of bones. Bone pose nodes are created by the FaceFX Max, Maya, XSI, and MotionBuilder plug-ins or by importing bone poses with the bonepose comand from another .facefx file that has a character with a similar skeleton.
Note: Bone pose nodes that contain rotations should always have min and max values of 0 and 1, respectively. When you load an actor with a bone pose that has rotations different from the reference pose and the minimum is greater than 0 or the maximum is greater than 1, you will get a warning:
Found face graph bone pose node "POSE_NAME" containing bones with rotations but with min(MIN_VALUE)In order to fix the problem, make sure all bone poses that contain rotations have minimum and maximum values of 0 and 1, respectively. You may have to increase the number of bone poses in your actor in order to model both positive and negative rotations.
or max(MAX_VALUE) out of range (min > 0.0 or max > 1.0)
FxMorphTargetNodes are used to drive morph targets. They have an additional parameter called Morph Target Name that is responsible for matching the node up to the appropriate blend shape in Maya or morph target in Max. FaceFX Studio will automatically add FxMorphTargetNodes to your .facefx file if the corresponding Ogre Mesh file contains morph targets. This normally happens the first time you open an an actor in FaceFX Studio. The automatic process will only work if the new nodes do not have the same name as existing nodes.