Advanced

Script

Rivet

There are two ways to attach a transform to a geometry:

  1. Using the ToRivet and Rivet Nodes.

    The ToRivet Node computes the Rivet Parameters of a 3D position onto a bind Scene. Rivet parameters are represented as a V4f Value storing:

    • the index of the Mesh in the Scene hierarchy

    • the index of the Mesh triangle

    • the barycentric coordinates of the rivet w.r.t. the Mesh triangle.

    The Rivet Node evaluates the transform from Rivet parameters on a query Scene using the local mesh frame given by the Mesh triangles edges.

    See also

    The rivet.rumba sample.

  2. Using the AverageTransform Node.

    The AverageTransform Node computes the best orthonormal transform that transforms a bind set of points into another query set of points.

UVN Space

The UVN and ControllerUVN Nodes use UVN-space matrices to compute a 3D transform from the UVN-space defined upon a NurbsSurface.

A UVN-space matrix is composed of:

  • a UVN-space position that corresponds to the UV coordinates of the NurbsSurface and the N coordinate along the normal to the NurbsSurface at the UV coordinates.

    From this position, an orthonormal frame is computed using the derivatives of the NurbsSurface and its normal.

  • a world-space rotation-scale-shear offset matrix that has to be applied to the orthonormal frame to get the resulting 3D transform.

The UVN and ControllerUVN Nodes can be manipulated using the Translate, Rotate and Scale Tools. However, using the Translate Tool, when set in local mode, within the UV plane will make them follow the NurbsSurface.

This allows to have controllers sliding along a surface, providing more organic-like controller behavior.

See also

The uvn.rumba sample.

Global Interpolation

The GlobalInterpolate Node performs global interpolation of Mathematical Values (Int, Float, Vxf, Quatf, M44f, Color, Array of these) that are attached to targets of one kind (1-2-3D positions, quaternions).

It provides 2 evaluation modes:

  1. Voronoi2D

    This mode takes 2D positions as targets and linearly interpolates the attached values for 2D position queries using the NaturalNeighbors method to find the interpolation weights.

    See also

    The voronoi.rumba samples.

  2. RBF

    This mode uses the more general Radial Basis Function method to interpolate the values from the key targets (1D, 2D, 3D or quaternion).

Profiling

It is possible to profile interactive animation sessions with a character rig to get information about the evaluation process.

To do so, open the Dev menu of the main window and select Nodal Profiler, then perform the interactive animation session, then select Nodal Profiler again.

From here 2 things happen:

  1. Rumba will print in the standard output the 100 most time-consuming plug evaluations of the sessions, e.g.

//documents/Document_0/Asset/Skinner.output: 19.830007553100586 ms (20.09%)
//documents/Document_0/Asset/skel/FKSpineSolver.interpolated_matrices: 18.017995834350586 ms (18.26%)
//__renderer_gl__.displayable_geometries: 7.799999237060547 ms (7.90%)
//documents/Document_0/Asset/skel.output_skeleton: 5.145999908447266 ms (5.21%)
//documents/Document_0/Asset/Display.for_renderer: 4.866000175476074 ms (4.93%)
//__tools__/translate.transform: 3.2940001487731934 ms (3.34%)
//documents/Document_0/__animation__/E/5DlvlMysy5_alb.output: 2.9520013332366943 ms (2.99%)
//documents/Document_0/__animation__/A/aPYFg9MVdR_alb.output: 2.449002265930176 ms (2.48%)
//documents/Document_0/__animation__/W/UhFXj1OuOf_alb.output: 2.21600079536438 ms (2.25%)
//documents/Document_0/Asset/skel/c_ik_spine_1.world_transform: 1.5140001773834229 ms (1.53%)
//documents/Document_0/__animation__/c_ik_spine_1_transform.transform: 1.4900022745132446 ms (1.51%)
//__tools__/translate/x_axis.for_renderer: 1.23099946975708 ms (1.25%)
//documents/Document_0/Asset/skel/c_ik_spine_1/circle_z.for_renderer: 1.202000617980957 ms (1.22%)
//__tools__/translate/y_axis.for_renderer: 1.1649997234344482 ms (1.18%)
//documents/Document_0/Asset/skel/c_ik_spine_1/circle_y.for_renderer: 1.0790001153945923 ms (1.09%)
//documents/Document_0/Asset/skel/c_ik_spine_1/circle_x.for_renderer: 1.052999496459961 ms (1.07%)
//__tools__/translate/z_axis.for_renderer: 1.018999695777893 ms (1.03%)
//__tools__/translate/z_plane.for_renderer: 0.9660000205039978 ms (0.98%)
//__tools__/translate/y_plane.for_renderer: 0.9630004167556763 ms (0.98%)
//documents/Document_0/Asset/skel/spine_offsets.array: 0.7339993119239807 ms (0.74%)
//documents/Document_0/Asset/skel/spine_matrices.array: 0.6569995284080505 ms (0.67%)
//documents/Document_0/Asset/skel/c_ik_spine_1.rig_world: 0.532999575138092 ms (0.54%)
//documents/Document_0.selected_key_times: 0.48799923062324524 ms (0.49%)
  1. In the Node Editor, the connections that were evaluated during the session are painted in red, to ease the identification of bottlenecks.

    To restore the initial colors, open the Dev menu of the main window and select Clear Nodal Profiler.

    (Coming soon: the Nodes display will also change to indicate their share of the time consumed by the parent during the session)

  2. Coming soon: a flame graph will be available to inspect the tasks scheduling

Guerilla’s Eye Shader

Set a default animation pose

When a character comes to the rig process, it has been designed in a specific pose that fits requirements from modeling and rigging. However this specific pose, called the rest pose (or bind pose), may not be well suited as a starting pose for animation (e.g. a character is modelled and rigged in A-pose, while the starting pose for animation is the T-pose).

Rumba Rig provides two Nodes to set the desired animation starting pose:

  • The RestValue Node provides the rest pose Value of its input plug, i.e. the Value of the input plug when all animation is disabled. This Node allows to query the rest pose anywhere needed in the Evaluation Graph, e.g. to compute binding data in the Deformation Layers.

  • The SetRestValue Node allows to replace the rest pose Value of its input plug with the one of its rest_value plug.

Using these two Nodes, it is then possible to define the transforms and parameters of the rig controllers as needed while ensuring their rest pose Value stays the same.

See also

The JointModuleA2T-dev and ArmModuleA2T-dev are examples of how to achieve “A pose to T pose” switch.

Transfer Painted Attributes

Plugins

Add a Painter Node

Add a Deformer Node