Continuing from the previous post i will today expand some of the core concept needed to rig hair efficiently.
Managing clumps other individual guides:
In order to achieve fast rig i always tried to tackle a problem from an original standpoint.
For me it usually ends up by a combination of custom nodes:
- It was a bit like inventing new grammar rules and words to describe complex ideas and phenomenons.
1 – PathFromMatrices:
As replacement from deforming existing curves with cluster deformer I start writing a node which will accept directly an array of world matrix
It proved useful for bendy limbs or as cloth rigging components but the next logical step was to question to the need for actual transform nodes when the actual purpose of this graph relates to attaching a curve to a mesh.
2 – CurveFromVertexIds:
This time instead of using a wrap deformer which will duplicate a shape as base data I was skipping the intermediate steps of extracting the position from a matrix 4rth row and using a mesh data directly:
import maya.cmds maya.cmds.setAttr('collarCurveFromVertexIds1.vertexIDList', [553, 600, 609, 854], type='Int32Array')
This list of point index was using an MIntArray form for compactness reasons
The last evolution of this process was to compute a list of curves from a list of vertexIdList attribute.
Journey to the third dimension:
1 – RibbonFromMatrices (aka the caramel node):
At some point I start to look at ribbons optimization:
- this time i wanted to challenge skinclusters evaluation with a fully parametric node network
it was giving me good results for spine components and hair braid/clump deformation.
2 – SurfaceFromMatrices :
Following the same though process for curve optimization, it was natural to build nurbsSurface from a matrix array and later on from polygon strips.
Our core hair components so far:
Now that we layout the 3 main elements which will help us defines fur/hair on a character we will have a look at their application.
a – Lace and parametric rails:
b – Collar and side burns:
a – MeatStrap: building a hair focused wrap deformer
Usually at some point Programming student can study default maya nodes implementation.
As rigger one of the really powerfull tool at our disposal is the wire deformer and its counterpart the wrap deformer.
The resulting graph action will in the end be:
- collect the uvParameters from the closest points between hairClumpSource mesh and bindSurface Ribbon
- get the offset between bindRibbon and an offset ribbon using their pointAtUvParameter function.
- Apply this offset to the mesh pointArray.
(Above: blue resulting nurbsWrap hair clump, white source hairMesh)
b – Lasagne: Hands on nurbs based freeform lattice
c – Saucisson : Better tangent space and collision management.
Thats it for this time, in the next post we will look at rigging the following ogre facial hairs.
( model is from autodesk youtube learning channel )