IC.Face
click an image area to jump to description
or browse the index





Terminology IC.Face is based on a small amount of fundamental elements. The following scheme establish the terminology used in this document.

Root Ancestor of the whole rig structure.
Active Root is an object activated as Root through IC.Face Elements pick buttons.
(Bone) Driver Box shaped Point Helper associated to each bone of a chain than makes it stretchy through position and LookAt constrainst.
Overlapping Drivers are two or more Driver Point Helpers of different bone chains sharing the same position in the 3D space. In the rigging process they become children of the same Knot.
Active Drivers are one or more overlapping Drivers activated through IC.Face Elements pick buttons.
(Driven) Bone Bones made stretchy by Drivers. They're driven by position and LookAt constraint with Drivers as targets.
Knot Box shaped Point Helper. In the rigging process, it becomes the parent of one or more overlapping Drivers and is child of its Knot_LCS.
Active Drivers Knot is the Knot of an active Drivers Knot System.
Knot_LCS

Knot Local Coordinate System is a tripod shaped Point Helper. It is the parent of Knot and sets its transforms orientation in 3D space.

Knot System The sum of Knot_LCS and Knot linked in parent-child hierarchy.
Active Drivers Knot System is the Knot System generated from a Driver or a set of overlapping Drivers which are activated through IC.Face Elements pick buttons.
Control Star shaped Editable Spline. It is the handle to drive Knots transforms. It is child of its Control_LCS.
Active Control is the Control of the active Control System.
Control_LCS Control Local Coordinate System is a tripod shaped Point Helper. It is the parent of Control and sets its transforms orientation in 3D space.
Active Control_LCS is the Control_LCS of the active Control System.
Control System The sum of Control_LCS and Control linked in parent-child hierarchy.
Active Control System is a Control System activated through IC.Face Elements pick buttons.


Sample view of IC.Face elements.


Illustrated How To ... To set up the control system, some operations must be performed in a quite straightforward series of steps. These quick guides help to speed up the learning process and can be used as a first reference.

Setup the first Root - Knot - Control System

1. Create an object to work as Root
2. Create a bone chain
3. Select the full bone chain and create Drivers
4. Pick the Root object
5. Pick one Driver (or more overlapping Drivers)
6. Set Knot dimension, color and create it
7. Orient the Knot_LCS with Z-Axis pointing away from surface, ad Y-Axis roughly up
8. Link Drivers to Knot
9. Freeze Knot Transform
10. Set Control dimension, color, if it has to be automatically offset in Z-Axis direction and how much, and Create it
11. Link Control to Knot
12. Freeze Control Transform
13. To position connect Knot to Control, press Position for influence 1.0
14. To rotation connect Knot to Control, press Rotation for influence 1.0
15. Connect Control to self Negative Position
16. Connect Control to self Negative Rotation

Connect more Knots to one Control

1. Repeat points from 5 to 9 from Setting up first system for each Driver or group of overlapping Drivers to connect
2. Pick the Control to connect the active Drivers Knot System to
3. To position connect Knot to Control, press Position for influence 1.0, or spin the spinner to set a different value
4. To rotation connect Knot to Control, press Rotation for influence 1.0, or spin the spinner to set a different value

Modify the orientation of a wired Knot Local Coordinate System

1. Transform to Zero every Control connected to the Knot to modify
2. Unlink Drivers from Knot, if linked
3. Modify Knot_LCS orientation
4. Link again Drivers to Knot


Stretchy Bones
click an image area to jump to description

Stretchy Bones section allows to create stretchy bone chains with a single click. Just select the full chain, with the end bone, and Create Drivers of desired dimension and color.

Stretch Test assigns a scripted standard material to provide a visual feedback, by changing its color dynamically, about the Bones Stretch Factor in relation to the original length and limits set.



Create Bone Drivers

Bone Drivers make bones stretchy. They are Point Helpers placed at every bone pivot and are targets of Position and LookAt constraints applied to bones. By transforming them in the 3D space, the bones become stretched or compressed. For each bone is still possible to set in the standard Bone Tools rollout floater the quality of stretch: None, Scale or Squash, according to the specific task.

By creating drivers, each bone in the chain has its Stretch Factor automatically reset to 1.0, is realigned to its child, and the end bone is fixed: added if missing, or realigned to its parent. If the end bone exists, it must be selected with the whole bone chain before creating Drivers. Creating drivers on a bone chain that already have them, doesn't add more Helpers, but replaces old ones and fix bones properties.


View of a three bones chain with Drivers created on them.


Schematic view of a three bones chain with Drivers.
Position and LookAt Constraints are established to drive bones position and rotation.


Creates Drivers for the selected bone chain. The spinner on the left determines Point Helpers dimension working as multiplier, where 1.0 means the same size as bones. The Color Picker on the right sets the color for new Drivers. Every value must be set before creating the Drivers.
Locks and unlocks on the fly all Drivers transforms to prevent accidental picking and shifting during rigging and animation process.


Stretch Test

Stretch Test is a visual feedback tool about bones Stretch Factor. It works by assigning a scripted material to selected bones that changes its Diffuse color dynamically depending on the actual Stretch Factor and Minimum and Maximum stretch percentage limits. If compression is under the minimum limit, shows a constant black color, else if elongation is over the maximum limit, shows a constant white color.


Representation of colors shown by scripted material within the specified stretch range.

Minimum and maximum spinner values determine the percentage factor under and above which the stretch is too far from the original 100%. These values must be set before applying the stretch test material and have no influence later. The test material can be assigned as many times as wished with different limits.
Assigns the stretch test scripted material to selected bones.
Removes the stretch test scripted material from selected bones.



Elements
click an image area to jump to description

Elements section manages selection and creation of shapes and helpers to set up the structure for animation.



Active Elements Color

Dynamically changes the color of active elements: Root, Drivers and Control, through a color picker.



Pick Elements

The three system core elements are the Root, Drivers and Controls. The corresponding main pick buttons activate picked elements and let the script display their status and the user operate on them. The indicator above each pick button shows whether an item of that kind is active (green status) or not (grey status).

To be active doesn't mean to be selected in standard 3ds Max mode. An active element could be selected too or not, and vice versa. "Active element" is referred to items activated through IC.Face Elements pick buttons only.


View of the three system core elements: Root, Drivers and Controls.


Schematic view of the three system core elements and their relationships after creation of Drivers, Knots and Controls.


Indicators providing a visual feedback on the actual status of a category of elements.
  • Grey status: no elements of the chosen kind are currently active.
  • Green status: an element of the chosen kind is currently active.
Picks Root element. There are not restrictions about the Root object. It can be of any kind and in the rigging process it represents the parent of created Knot Systems. For facial animation structures it usually is an helper constrained to or parented to the head bone.
  • To activate a Root element: push the pick button and select an object in the scene.
  • To deactivate a picked Root element: push the pick button and abort the selection by clicking right mouse button anywhere in the scene.
  • To abort activation process: press ESC button.
Picks Drivers elements. Only Drivers generated by the Stretchy Bones panel can be picked, everything else il filtered. Drivers make bones stretchy for the animation process. When two or more bone chains cross each other and two or more drivers overlap, they all must be picked. As visual feedback, already picked drivers become selected. When a Knot is created and linked to the corresponding group of drivers, a single click selects them all.
  • To activate a Driver element: push the pick button and select one or more overlapping drivers in the scene, then Press the right mouse button to end picking process.
  • To deactivate a picked Driver element: push the pick button and abort the selection by clicking right mouse button anywhere in the scene.
  • To abort activation process: press ESC button.
When more drivers are picked to be part of the same Knot System, must overlap within a threshold specified by the spinner in the Mirror Elements > Mirror Drivers section, otherwise a warning prompts saying that selected drivers do not overlap. Recheck drivers position, or increase threshold value.
Picks Control elements. Only Controls generated by this panel can be picked, everything else is filtered. Controls are the handles to manipulate the stretchy bones net in the animation process at high level. They can dynamically control one or more "net knots" with different influence factor.
  • To activate a Control element: push the pick button and select one control shape in the scene.
  • To deactivate a picked Control element: push the pick button and abort the selection by clicking right mouse button anywhere in the scene.
  • To abort activation process: press ESC button.
Provides a visual feedback on active elements. For each kind of item it displays its name in the active viewport on the element.



Create Knot System

A Knot System is made of two Point Helpers, the first is represented by an axis tripod (Knot Local Coordinate System) working as coordinate system for the second, a box (Knot). The Knot System can be defined as the driver of Drivers, one or more overlapping bone Drivers are parented to it, while it is driven by one or more Controls.


View of a three bones chain with Drivers, an active Root and a Knot System created on the second Driver.


Schematic view of a three bones chain with Drivers and a Knot System just after creation.

Creates a Knot System for the active Drivers. The spinner on the left determines Point Helpers dimension working as multiplier, where 1.0 means slightly bigger size than Drivers. The Color Picker on the right sets the color for new Knot System. Every value must be set before creating the Knot System.

As a Knot System is created, Knot is linked to its Knot_LCS, and Knot_LCS is automatically linked to the Root element.
If checked, orients new Knots Systems to actually active Control Local Coordinate System as they are created.



Create Control System

A Control System is made of one Point Helper and an Editable Spline, the first is represented by an axis tripod (Control Local Coordinate System) working as coordinate system for the second, the Editable Spline handle (Control). The Control System can be defined as the driver of Knots, one or more Knots are connected by parameter wiring with different influence factors to it. It's the highest control level.


View of a three bones chain with Drivers, an active Root, a Knot System and an active Control System created on it.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, just after creation.

Creates a Control System for the Knot System of active Drivers. The spinner on the left determines Point Helper, and Spline dimension working as multiplier. The Color Picker on the right sets the color for new Control System. Every value must be set before creating the Control System.

As a Control System is created, Control is linked to its Control_LCS.
If checked, offsets new Control Systems in the direction of Knot System Z-Axis as they are created. The spinner on the left determines the amount working as multiplier.



Link
Link Elements

System Elements must me linked and wired to control the stretchy bones net. Bone Drivers must be linked to Knots, while Knots must be driven by Controls through parameter wiring. Every Knot System is automatically parented to the active root as is created.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the hierarchical link from the Knot to one Driver.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the hierarchical link from the Knot to the Control Local Coordinate System.

Links an active Driver or a group of overlapping active Drivers to their relative Knot. This link makes the Drivers inherit Knot transforms as they are managed by the connected Controls.

Indicator on the left can show three states:
There aren't active Drivers or active Drivers haven't a Knot System
Active Drivers have a Knot System, but are not linked to its Knot
Active Drivers have a Knot System, and are linked to its Knot
Links active Control_LCS to the active Drivers Knot. This link makes the Control inherit Knot transforms which are the sum of transforms inherited from Root and transforms driven by the Control itself through parameter wiring. Control own transforms are neutralized by a self negative wiring, keeping the Root transforms only.

Indicator on the left can show four states:
There isn't an active Control, there aren't active Drivers or active Drivers haven't a Knot System
Active Control is not linked to any Knot
Active Control is linked to a Knot different from the active Drivers Knot System
Active Control is linked to the Knot of the active Drivers Knot System



Freeze Transform
Freeze Elements Transform

Freeze Transform, as in standard 3ds Max, sets a new layer of position and rotation controllers to make the actual transforms start from Zero values. The script copies the same standard 3ds Max scheme for naming controllers. Freezing a Knot or a Control, cuts any wiring to that element and erase its animation.

Hierarchy tree of a Knot before (left) and after (right) freezing its transform.

Freezes active Drivers Knot transform.

Indicator on the left can show three states:
There aren't active Drivers or active Drivers haven't a Knot System
Active Drivers Knot hasn't its Transforms Frozen
Active Drivers Knot has its Transform Frozen
Freezes active Control transform.

Indicator on the left can show three states:
There isn't an active Control
Active Control hasn't its Transform Frozen
Active Control has its Transform Frozen
Zero and Zero All commands transform the active Control, or all Controls to their Zero position and rotation, the one got at the time of freezing.



Wire Parameters
click an image area to jump to description

Wire Parameters section provide an easy interface to manage connections between Controls and Knots, to set up handles for final animation. Additional tools like active and selected Control wiring display, help the rigging process as well as the reproduction of connections from one side to the other after mirroring Knot and Control Systems. The CleanUp Wiring tool clear every dangling connection and fix their names if needed.



Wire Control to Knot

Parameter Wiring from Control to Knot is the last ring of the control chain that goes from Controls to Bones. Knot transforms are driven by Control through wiring, Drivers inherit Knot transforms through hierarchical linking, Bones are position and rotation constrained to Drivers.


Schematic view of a complete system showing (in yellow) the control chain from Control to Bones

Parameter Wiring from Control to Knot can be performed from each Control to one or more Knots, affecting position and/or rotation. For each connection can be set an influence multiplier. For clearer results, the wiring between the Control System and the Knot System it is linked to, should be equal to 1.0.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the position wiring between the Control and the Knot.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the rotation wiring between the Control and the Knot.

Connects and disconnects active Drivers Knot position controller to the active Control position controller. The spinner on the left determines the connection influence working as multiplier, where 1.0 means the same transform amount.

Indicator on the left can show three states:
There isn't an active Control, there aren't active Drivers, or active Drivers haven't a Knot System
Active Control and active Drivers Knot aren't Position wired
Active Control and active Drivers Knot are Position wired
Connects and disconnects active Drivers Knot rotation controller to the active Control rotation controller. The spinner on the left determines the connection influence working as multiplier, where 1.0 means the same transform amount.

Indicator on the left can show three states:
There isn't an active Control or there aren't active Drivers, or active Drivers haven't a Knot System
Active Control and active Drivers Knot aren't Rotation wired
Active Control and active Drivers Knot are Rotation wired



Sample view of Active Control connections with three Knots. Lines from Control to Knots identify the connection set, while for each Knot the position (POS) and rotation (ROT) influence is shown on the right of elements.


Sample view of Selected Control connections with two Knots. Lines from Control to Knots identify the connection set, while for each Knot the position (POS) and rotation (ROT) influence is shown on the left of elements.
Sample view of Active and Selected Controls connections with two Knots each. This feature is quite useful when is needed to recreate connections between mirrored Controls and Knots. Just select to display the Control to copy from, activate the Control to paste to and choose a view with almost overlapping Knots. By going through each Knot is easy to recreate same connections.

Displays Control to Knots connections of the active Control and of a selected one. Connection influences are shown nearby each Knot: POS for position and ROT for rotation. Those from Active Control are on the right, while those from Selected Control are on the left of wired Knots.
CleanUp Wiring tool is a sort of crawler going through every Control - Knot connection and checking them. If something is broken, because in example one Knot or Control has been deleted, it's wiped off, and Knots connections names are corrected to match always Control name.



Wire Control to Control

Parameter Wiring from Control to Control is required to neutralize effects of the loop created between Knot an Control to establish the control chain. Knot transforms are driven by Control through wiring, and Control inherits Knot transforms through hierarchical linking. This leads to double the effect of every Control transform on itself. To avoid it, a Control self negative wiring is set up, for position and rotation as required.


Schematic view of a complete system showing (in yellow) the control loop between Control and Knot, and (in magenta) the Control self negative wiring to neutralize it.

Parameter Wiring from Control to Control can be performed on position and/or rotation. The wiring between the Control and the Knot it is linked to should be equal to 1.0, so the negative wiring has the same 1.0 effect.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the Control self negative position wiring.


Schematic view of a three bones chain with Drivers, a Knot System and a Control System, representing the Control self negative rotation wiring.

Connects and disconnects active Drivers Knot position controller to the self Negative position controller. The influence is set to 1.0.

Indicator on the left can show three states:
There isn't an active Control
Active Control isn't self Negative Position wired
Active Control is self Negative Position wired
Connects and disconnects active Drivers Knot position controller to the self Negative rotation controller. The influence is set to 1.0.

Indicator on the left can show three states:
There isn't an active Control
Active Control isn't self Negative Rotation wired
Active Control is self Negative Rotation wired



Mirror Elements
click an image area to jump to description

Mirror Elements section provides tools to reproduce symmetrical rigs by recreating Knot Systems and Controls linked to them. It works for structures whose symmetry plane pass through the world origin.



Mirror Plane

Mirror Plane is the reference for the mirror system engine. It is a plane passing through the worldspace origin, aligned to two main axis and perpendicular to the third. The mirror system engine looks for a Driver or a group of overlapping Drivers at symmetrical coordinate of the active Drivers position depending on the active Mirror Plane.

Visual representation of the three selectable symmetry planes.

Set the active Mirror Plane, which can be: X = 0, Y = 0 or Z = 0, representing a plane passing through the worldspace origin.
Displays the actually active Mirror Plane in the worldspace origin.



Mirror Drivers

Drivers section manages the parameters and feedback about Drivers in a symmetrical position to mirror Knot and Control Systems linked to them.

View of a system with (left) and without (right) Driver found in symmetrical position.

The mirror system engine looks for available Drivers in a position symmetrical to the active one, within the threshold set in the spinner. Indicator on the left provides feedback on the result of such search. A check on the number of Drivers found is made if the source is a group of overlapping Drivers.

The spinner value works as threshold for finding overlapping Drivers too. It is a sort of general precision setting in Drivers groups definition.

Indicator on the left can show three states:
There aren't active Drivers
Active Drivers haven't symmetrical Drivers within the threshold set
Active Drivers have symmetrical Drivers within the threshold set
Displays a visual feedback about the position of source Drivers and symmetrical Drivers if available (green line), or the target position of the search if unavailable (red line).
Activates the symmetrical Driver or group of overlapping Drivers found.



Mirror Knot / Controls

Mirror Knot and Controls section provide the interface to recreate symmetrical elements with a single click. Once symmetrical of the active Drivers has been found, Knot System and Control Systems linked to it can be mirrored.



View of a system with Driver found in symmetrical position.


View of a system with Driver found in symmetrical position. The Knot System has been mirrored.

View of a system with Driver found in symmetrical position. The Knot System and the Control System linked to it have been mirrored.

Mirrors the Knot System created form a Driver or a group of overlapping Drivers if the symmetrical is available. Mirrored Knot System retain the same freezing and linking properties relative to their Drivers as their source.

Indicator on the left can show two states:
There aren't active Drivers, or active Drivers haven't a Knot System
Active Drivers have a symmetrical available and the Knot System can be mirrored
Mirrors the Control Systems linked to a Knot whose Driver or a group of overlapping Drivers have a symmetrical available. Mirrored Control System retain the same freezing and linking properties relative to their Knot as their source, but none of wiring.

Indicator on the left can show two states:
There aren't active Drivers, or active Drivers haven't a Knot System with a Control linked to it
Active Drivers have a Knot System with one or more Controls linked to it, and symmetrical Drivers with Knot System are available.
Activates Controls linked to active Drivers Knot System cycling through them if more then one.



Hide
Hide Elements

Hide elements section allows to manage the visibility of system elements by category. Each button hides and unhides all the elements of the specified type by selecting them and creating a temporary standard Named Selection.


View of a three bones chain with six element types whose visibility can be independently managed.

If stretchy bones are visible, creates a selection named "_DrivenBones" and hides it, else if stretchy bones are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.
If Drivers are visible, creates a selection named "_Drivers" and hides it, else if Drivers are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.
If Knots are visible, creates a selection named "_Knots" and hides it, else if Knots are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.
If Knots Local Coordinate Systems are visible, creates a selection named "_Knots_LCS" and hides it, else if Knots Local Coordinate Systems are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.
If Controls are visible, creates a selection named "_Controls" and hides it, else if Controls are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.
If Controls Local Coordinate Systems are visible, creates a selection named "_Controls_LCS" and hides it, else if Controls Local Coordinate Systems are not visible, unhides the Named Selection and deletes it from the Named Selection Sets.



Troubleshooting