RBF stands for Radial Basis Function. In Pose Editor, it enables a joint’s translation, rotation and scale to be driven based on the rotation of another joint.
Each RBF solver contains a series of poses that describe where each driven joint should be, based on the rotation values of the driver joints. As the driver joints rotate during animation, the RBF solver will pick the percentage of each pose to interpolate between, based on the parameters set on the solver, and apply that to each driven joint.
Creating Solvers
Creating a solver is a short process. The vast majority of time will be spent editing to perfect the resulting output on screen.
To create a new solver, click the Create button in the bottom left corner of Pose Editor under the RBF tab. If you have any joints selected at this point, they will automatically be added to the list of RBF Driver Joints on the right hand side.
When a new solver is created, it automatically gets put into edit mode. Only one solver can be in edit mode at a time. The current solver being edited is denoted by the pencil icon to the left of its name.
Editing Solvers
Solvers can be edited by pressing the Edit Selected button in the bottom left of the RBF tab. If a solver is already in edit mode, the button displays as Finish Editing instead.
While in edit mode, the first thing to do is ensure that the solver has the correct RBF driver and driven joints set as these are trickier to edit when multiple poses exist.
Driver/Driven joints can be added by selecting the joint in the Maya viewport and clicking the Add Driver/Driven buttons, respectively. The same action applies for removing by selecting a joint from the list and clicking Remove Driver/Driven.
When the correct inputs are set, it is time to edit the poses. This is where the majority of the work will be done. To access the pose actions, swap to the pose tab.
Double-clicking on elements in any of the lists will select different things within the Maya scene.
| Item | Action |
|---|---|
Solver Name | Select UERBFSolver node. |
Pose Name | Move all the driver/driven joints for the solver to that pose. |
Driver Joint | Select Driver Joint. |
Driven Joint | Select Driven Joint. |
The general workflow is as follows:
Rotate the driver joints to the position for a new pose.
Translate / Rotate / Scale driven joints to compensate.
Create/Update pose.
If the pose doesn’t look quite right, try moving the joints around and updating the pose.
Edits are only saved when the Update button is clicked and will be lost when edit mode is disabled.
RBF Parameters
Radius
The radius shows how close the driver transforms must be to the target pose in order for the pose to be active.
Automatic Radius
Enabling automatic radius will calculate the average distance between the default pose and each target pose.
The min radius value and max radius value are debug values to show what the solver is using to calculate the automatic radius value. The automatic radius value is also a debug attribute showcasing the result.
The min radius is calculated by taking the absolute distance between the default pose and the closest pose. The max radius is the sum of the absolute distance between the closest pose and the furthest pose.
Normalize Method
As you rotate the driven transform around, the solver will calculate a weight to show how much of the pose has been activated. This weight value is between 0 and 1. In some cases, the sum of all of the weights of all of the poses can exceed one and in other scenarios be less than one. This is where normalization comes into play.
It will always normalize above one, regardless if no normalization is selected. It is recommended to always normalize. DNA does not support no normalization and will generate an error if the solver is exported with this setting.
Weight Threshold
The minimum normalized distance that is required for a pose to activate.
Distance Method
| Name | Description |
|---|---|
Euclidean | Standard n-dimensional distance measure. |
Quaternion | Treat inputs as quaternion. |
SwingAngle | Treat inputs as quaternion, and find the distance between rotated TwistAxis directions. Only uses the rotation values from the y + z axis (whatever hasn't been set as the twist axis). |
TwistAngle | Treat inputs as quaternion, and find the distance between rotations around the TwistAxis direction. Only uses the rotation of the axis defined by the twist axis. |
Function Type
The curve type used to interpolate between different poses.
Twist Axis
The axis used during SwingAngle or TwistAngle distance method calculations.
Input Mode
Only “Rotation” is supported by DNA. Setting it to “Translation” will result in errors at export.
Mirroring
Mirroring solvers/poses can be achieved one of two ways; a simple search and replace, or using regular expressions with named groups.
The table below shows an example of using regular expressions to mirror the solver, poses and joint names correctly with the MetaHuman skeleton.
| Name | Search | Replace |
|---|---|---|
Solver | (?P<prefix>.+)?(?P<side>_l_)(?P<suffix>.+)? | {prefix}_r_{suffix} |
Joints | (?P<prefix>.+)?(?P<side>_l) | {prefix}_r |
Poses | (?P<prefix>.+)?(?P<side>_l_)(?P<suffix>.+)? | {prefix}_r_{suffix} |