Control Rig graphs
CRIRA Control Rig is a graph of rig nodes plus a hierarchy of bones and controls, stored in a binary Control Rig Blueprint. You normally read it by opening the Control Rig editor and following wires. CRIR writes the same rig out as short, line-based text: every node, every connection and the full bone and control hierarchy. Your assistant reads it, edits a few lines and writes the result back into the asset.
What it gives you
- Diffable in version control
- A rig change becomes a few changed lines in a pull request. The same text is saved in asset dumps as
crir.txt, so rig history is searchable ingit. - Reviewable like code
- Each node has a
%localIdand its full unit path, and inputs are written aswire_in_<Pin>=%src.pin. You can see what a node does and where its inputs come from without following wires. - Easy for your assistant to write
- One consistent format for rig graphs and the hierarchy. Your assistant writes whole graphs and control setups in one step, instead of placing and wiring nodes one at a time.
- What carries over
- Two reads in a row give identical text. For a rig that uses the supported element kinds, reading, writing and reading again also gives identical text. The exception is an element kind shown as a
# TODO unsupportedmarker (listed below), which has nothing to write back. Comment nodes and authored@(x, y)positions are kept, and writing back runs a real compile.
What the text looks like
A rig_hierarchy block lists bones and controls. Each rig_graph holds the
nodes, named by their full unit path and connected with wire_in_* arguments:
rig_hierarchy {
bone "root" parent="" location=(0.0, 0.0, 0.0) rotation=(0.0, 0.0, 0.0) scale=(1.0, 1.0, 1.0)
bone "spine_01" parent="root" location=(0.0, 0.0, 12.0) rotation=(0.0, 0.0, 0.0) scale=(1.0, 1.0, 1.0)
control "spine_ctrl" parent="root" shape="Circle_Thick" location=(0.0, 0.0, 12.0) rotation=(0.0, 0.0, 0.0) scale=(1.0, 1.0, 1.0)
}
rig_graph "RigVMModel" {
%fwd = unit /Script/ControlRig.RigUnit_BeginExecution() @(-400, 0)
%get = unit /Script/ControlRig.RigUnit_GetControlTransform(Control="spine_ctrl", Space=GlobalSpace) @(-150, 0)
%set = unit /Script/ControlRig.RigUnit_SetBoneTransform(
Bone="spine_01",
wire_in_ExecuteContext=%fwd.ExecuteContext,
wire_in_Transform=%get.Transform
) @(150, 0)
}How to ask for it
Ask for the change. Your assistant reads the rig as text, edits it, and writes it back in one step. More examples are on the Control Rig page.
You: In CR_Mannequin, drive spine_01 from the spine_ctrl control.
Done. In CR_Mannequin, spine_01 now follows spine_ctrl.Coverage
CRIR covers the full set of RigVM operations and carries bones, nulls, controls and sockets both ways. Curves, connectors and physics elements show as a# TODO unsupported marker and are not written back.