Other FacePoser Tools
Close Captioning Tool
By default, each Speak event in a .vcd that uses a sound script name (rather than a raw .wav file reference, which is discouraged) will also cause a close caption with the same token name to be issued.
You can preview the close captioning output by showing the "Close Caption" tab at the botton of the FacePoser UI. Scrubbing the time slider or playing a .vcd with Speak events will then preview the close captioning data in the Close Caption area.
modname/resource/closecaption_english.txt is a Unicode file (viewable with Notepad.exe) which shows some of the formatting parameters available to captions.
You can change from the default caption token by right clicking on the token text (viewable by clicking the triangle on the upper left edge of each channel with Speak events) and choosing "Change Token" from the context menu. Choosing "Disable captions" will prevent the Speak event from emitting a closed caption. Even if a Speak event tries to emit a closed caption, if the token name is missing from the loaded
closecaption_%language%.txt file, then no caption will be produced in that case.
The "token/data" line shows a couple pieces of information. Along with the name of the token that is being used, there is a colored bar underneath each Speak event:
- Green bars signify that a close caption will be emitted for the sound
- Light blue bars signify "combined" tokens
- Gray bars signify disabled captions
For completeness, multiple .wav files can be combined into a single .wav with a single closed caption (mods shouldn't have to worry about combined/uncombined sounds). To do this, shift-click multiple adjacent Speak events and choose "Combine Speak events" from the context menu. To uncombine the .wav, select any Speak event in the group and choose "Uncombine Speak events" from the context menu. If a caption shows a combined .wav, a small black arrow will appear which will either point at the original split Speak events, or at the "combined" speak event. The system will automatically create the combined .wav for you. This may or may not work in the SDK build of FacePoser.
Finally, you can change the caption language by clicking the arrows at the left of the channels with audio or by choosing a new language from the Options | CC Language main menu item.
Flex Animation Tool
The Flex Animation tool allows more control over facial expressions than the poses created with the Expression tool. Instead of setting the Flex Sliders to specific positions, the tool allows animation of both the amplitude and left/right portion of such sliders along a smooth curve.
If you create a new "Flex animation" event or select one from the currently visible .VCD scene data, then the "Flex Animation" tool will contain information useful for animation of individual flex control sliders.
When an event is selected in the expression view, the name of the event is displayed in the top left corner as a reference. In addition, for each flex controller, there is a work which indicates the name of the controller at the left and whether that controller is currently enabled (active controllers are highlighted in green). Furthermore, for active controllers, the number of sample points is also shown in brackets in red text.
Right-clicking brings up a context menu with the following options:
Expand: All - maximize all rows. Used - only rows with one or more sample points. <Track name> - expand only the track you right-clicked on.
Collapse: All - collapse all rows. <Named track> - collapse only the track you right-clicked on. Enable/Disable - Doesn't change expansion, but turns influence on/off so you can isolate one or more tracks.
In addition, the context menu has timing tag editing info (timing tags are explained below):
Insert timing tag - allows placing a named timing tag at the mouse click position.
If you right-click on the triangle marker for a timing tag you can:
Unlock timing tag/Lock timing tag - locks/unlocks tag under mouse
Delete timing tag - Delete tag under mouse
You can move a timing tack by left-clicking in it and moving the mouse.
Furthermore, right-clicking inside the drawing area of any individual flex controller row (whether collapsed/minimized or not) will bring up the following context menu:
Copy/Paste - copies all sample points to clipboard, these can be pasted into another row (replacing the contents of the other row completely) (CTRL+C/CTRL+V shortcuts)
Select all - selects all sample points
Deselect all - deselects sample points (ESC is shortcut)
Delete - Deletes selected sample points (DEL key is a shortcut)
Edit left/right/Edit amount - switches edit mode for stereo/paired controllers (SPACE key is shortcut for switching)
To place sample points, place the mouse over the drawing area of a non-collapsed flex controller row, hold the CTRL key and click the left mouse button.
To select a sample point, place the mouse over an existing sample point, then left-click on the point. To add to the selection or toggle the selection of a point, hold SHIFT and select a point.
To move one or more selected sample points, click with the left mouse or the right mouse one of the selected points and drag the selection while holding the left mouse down. The left mouse drags the magnitude of the point, but leaves the time unchanged. The right mouse can be used to move the time, but not change the magnitude of a selected point. If you hold the CTRL key you can freely drag one or more selected points along the time or magnitude axes.
You can select points within a selection rectangle by clicked and dragging a rectangle inside the edit area of a flex controller track. You can hold SHIFT while dragging a rectangle if you don't want to deselect all points outside of the rectangle. If you click anywhere in the edit area that's not a selected point, all selected points will be deselected.
Selected points are highlighted in red; all other points are shown in blue.
You can select points among multiple tracks and certain commands like "delete " will delete all selected points across all tracks.
Certain operations can be performed on a vertical sub-slice of the event, which can be thought of as covering all of the tracks at once. First, you must select the points in a vertical slice. You do this by clicking just above the workspace of the first track and dragging out a selection area. A blue area will be drawn once you release the mouse after moving it horizontally. All sample points between the start and end time of this rectangle will be selected. They can be manipulated or deleted as a group. You can move the selection area by hold SHIFT and left-clicking with the mouse to move the entire area, or by holding CTRL and moving either the left or right edge of the selection area. Simply click outside of the selection area to clear the selection.
Paired flex controller items are edited as above except there is a second spline that shows the left/right panning of the flex controller over time. Paired items show left and right and current edit mode along the left edge of the area when expanded. You can toggle between modes by hitting the SPACE bar. The current mode is shown along the left edge of the edit area. The spline and all points for the other mode are shown in light gray.
As a further aid to getting relative timings correct, any relative tag names for overlapping events (such as a .wav file relative tag) are be displayed in the Flex Animation tool as a blue triangle/name markers with a light blue vertical line at the appropriate time position. These relative tags can be used to synchronize flex animation sample points to tags associated with .wav file and other playback events.
There are a few additional functions available from the right mouse menu.
If you like the facial expression at a certain time, you can create one from a snapshot of the slider positions at that time by selecting "Create Expression…" from the menu.
There are functions to import and export flex animation splines to simple text files.
You can sort the flex animation tracks by usage (used before empty) or alphabetically by name from the Sort menu.
The final part of the UI for the Expression Tool is something called "Timing Tags". These are tags used just by the current flex animation event for dealing with timing issues. Timing tags, once locked, can be moved and all sample points on the left / right of the timing tag until the left/right edge of the edit area (or until the next closest locked timing tag) will move in such a way as to preserve the general shape of the sample point spline after the move. Thus, you could use a timing tag to correspond to a relative tag name and then just move the locked timing tag to compensate for movement of the relative tag. The timing tags can be locked/unlocked by right-clicking on them. Furthermore, you can delete tags by right-clicking and choosing "delete" from the context menu. You can also move timing tags by using the left mouse to select and drag the vertical timing tag line. As noted above, if a locked tag is moved in this manner, the general shape of the spline to the left and right of the locked tag is preserved.
The scrubber in the Flex Animation tool works just like the main scrubber in the Choreography View.
The Ramp Tool determines the absolute magnitude of any event over time. It is useful for creating an envelope describing how quickly to fade in and out of an event, but because it's based on Catmull-Rom splines, much more complicated envelopes are easily described.
The UI for the ramp tool is identical to that of editing a single flex animation slider in the Flex Animation tool.
The general shape of the ramp is also drawn as a black line over each event in the Choreography View.
Scrubbing works as with the other tools.
The gesture tool allows for altering the playback timing of a gesture sequence for an actor model.
The gesture tool consists of a "Playback Time" top section and an "Original Time" bottom section. The way this tool works is that relative tags are inserted at various points along the timeline and then the time at which that tag happens in the Playback Time area can be offset from the time in the Original Time during playback. In other words, Playback Time is a real time clock and you can hit marks in the underlying gesture animation faster or slower than actual time based on the positions of the corresponding tags. The green scrubber at the top shows real time, while the red informational scrubber at the bottom of the screen shows where in the actual gesture animation playback is occurring at the time.
You can add additional timing tags by selecting "Insert Timing Tag…" from the right-click menu. You can then drag the timing of the tag from either the top or the bottom in order to adjust relative timing position.
You can delete tags using the right menu.
Choosing "Revert Timing Tags" will line up timing tags vertically, i.e. at the same time. This can be used to "restart" any relative timing you are trying to accomplish.
You can move timing tags with the left mouse. You cannot move a tag past another already placed tag. This preserves that playback will move forward smoothly in the animation and playback frame rate will be the parameter which is varied.
There are only a couple of things to note here, first is a model spacing slider which spreads models apart when you have more than one model active in the 3d View.
The second is the "All tools drive mouth" checkbox. When this is selected, any scrubber from any tool window will drive the WAV events and thus cause sounds to be played, etc. If not, then only scrubbing in the main choreography window will cause sound to be heard.
The Waves Browser can be used for quickly navigating all of the sounds used by the game and previewing them or selecting them for editing in the Phoneme Editor.
Time Sample Snapping
The final controls of note are the fps and snap controls in the lower right of the main window tool bar. When snapping is on, you can change the granularity of sample point positioning for events and spline samples by clicking the "<n> fps" button and typing in a different nominal frame rate. For instance, if you click snap so that it indicates "snap: on" and click <n> fps and enter 10 fps, then many of the tools will show your current mouse time position as a frame and sub-frame indicator
E.g., at 10 fps, time 1.8 would be 1 + 8 /10 seconds and frame 18.
All mouse manipulation will snap to this granularity when the snap button is marked on. The current fps and snap settings are saved into your .VCD file.
FacePoser Source Code
The code for the FacePoser tool itself is not currently in the SDK. However, all of the code for a choreography scene (including actors, channels, and raw events) is included in the SDK in the game_shared folder as
choreo*.cpp/.h. In addition, the server.dll code for the
logic_choreographed_scene entity is included in the SDK at
dlls/sceneentity.*. All of the code for setting up the facial controllers is contained in the server at
dlls/baseflex.* and in the client at