FaceFX Documentation and support
Disclaimer: The below instructions detail how to prepare content for in-game use with the FxSDK. The FxSDK is not thread-safe and requires objects to be serialized which can contribute to memory fragmentation. For a thread-safe runtime solution with improved memory performance, please contact us for an evaluation of the FaceFX Runtime.
FaceFX files should be published prior to use in-game to:
- Reduce memory by deleting unnecessary information.
- Improve performance by reducing Face Graph and animation complexity.
- Compress animation keys to save memory and disk space
The Publishing process can do any combination of the following:
- Adds the _ingame suffix to the file extension. .facefx files become .facefx_ingame and .animset files become .animset_ingame.
- Save in native byte-order for a target platform.
- Remove editor-only data like color choices and face-graph node positions.
- Remove the phoneme word-list.
- Remove the mapping.
- Clear all events from event templates (note that this leaves the take alone so playback works fine).
- Bake out events into their respective curves to speed up animation playback.
- Collapse the face graph, deleting unnecessary nodes, and baking curves.
- Compress animation curves, reducing animation sizes by up to 90%
- The console variable po_compression_framerate is used to determine what frame rate to use when compressing curves. If a curve can not be compressed accurately, the uncompressed curve is used. Higher frame-rates will allow the compression algorithm to compress more curves, but the compression is less effective.
- The po_compression_aggressiveness console variable is used to determine how accurately the compressed curve must match the uncompressed curve. If an accurate enough curve can not be created, the uncompressed curve is used.