Note that the project is still under active development so please use it for study purpose.
In my last job I encountered a project with characters in need of Ziva muscle. The very first step was to rig the skeleton mesh as the input of simulation. It required unusual skills like creating IK with backward initial knee, bone adjustment to avoid breaking the simulation... Wouldn't it be great to have an autorig tool for every vetebrate on Earth ? It seems a great way to learn anatomy and apply my knowledge in python.
- Modular : Support multiple limbs.
- Skeletal : Support skeleton rigging.
- Cartoony : Support bendy limbs.
- Data Reuse : Reuse of templates, controls, proxies, weights.
- Custom Marking Menus : Handy menus for rig creation.
- Custom Framework : Much less redundant code during development.
| nlRT Tasks | General Tasks |
|---|---|
| Ctrl + MMB | Ctrl + Alt + MMB |
![]() |
![]() |
- Download and extract to somewhere you could keep the files.
- Find "install_by_drag_n_drop.py" and drag it onto Maya viewport.
The tool UI will show up at the left and "nlRT" appears in the main menu of Maya.
Typical Workflow
- Set the character directory.
- Load the model.
- Create guides and fit into the model.
- Build rig.
- Gen proxy (For preview or skinning).
- Skin using proxy.
- Edit control shapes.
If you follow the naming convention below, file can be read with less browsing. e.g.
horse
horse_mdl*.ma
horse_tpl*.json
horse_ctl*.ma
horse_prx*.ma
weight
horse_wgh*.json
Note that * is any number where the largest will be loaded
flowchart
DepNode --> Condition
DepNode --> DagNode
DagNode --> GrpNode
GrpNode --> CrvNode
GrpNode --> JntNode
GrpNode --> LocNode
GrpNode --> SrfNode
GrpNode --> MshNode
Dimension
AttributeHolder --> Attribute
from nl_modules.nodel.grp_node import GrpNode
from nl_modules.nodel.jnt_node import JntNode
from nl_modules.nodel.crv_node import CrvNode
from nl_modules.nodel.srf_node import SrfNode
grp = GrpNode('newGrp') # create group 'newGrp'
jnt = JntNode('newJnt') # create joint 'newJnt'
crv = CrvNode('newCrv') # create nurbs curve 'newCrv'
srf = SrfNode('newSrf') # create nurbs surface 'newSrf'
crv.weightTo([jnt]) # bind jnt to crv
srf.weightTo([jnt]) # bind jnt to srf
grp.a.t.set(0,10,0) # set position
jnt.alignTo(grp) # align jnt to grp
jnt.addOffsetGrp() # add offset group for jntflowchart
RigModule --> Head
RigModule --> SpineBp
SpineBp --> NeckBp
RigModule --> ArmBp
RigModule --> HandBp
RigModule --> LegBp
flowchart
RigModule --> Head
RigModule --> SpineQd
RigModule --> IkFkSpline
RigModule --> LegQd
IkFkSpline --> Tail
IkFkSpline --> NeckQd
from nl_modules.build.leg_bp import LegBp
cpn = LegBp('lfLegBp0_RGN') # create legBp object given rigNode in scene
cpn.gen_sk() # generate skeleton
cpn.build() # build rigMaya 2023.3, Win 11 Pro
- Python for Maya : Beginner to Advanced Rigging Automation by Nick Hughes
- Ramon Arango's rigs
- BoneClones
- Ivlpaleontology
- Rigamajig2
Visit my blog at https://www.nickyliu.com



