Cult of Rig : Season 00 Day 06 – Theory and Applied vectors, IK pedals

Season 00 Day 6 – Theory and Applied vectors, IK pedals


“More on vectors while we actually show some application, and eventually make it to hooking up the pedals’ geo to the IK pedals control in the niche of time”

“Day 6, crash course in vector math, sprinkle of matrix math, and finally, applying in Maya. IK pedals connected to the geometry in the niche of time.”

continuing from last video cult-rig-season-00-day-005-vectors

Quick catch up:

  • Shout out to animBlendNodeAdditiveRotation for angle connections without unitConvert nodes.
  • Pythagorean theorem reminder for dealing with vector length
  • |V| or ||V|| is how you might see will be an absolute length of a vector, if you read about vectors in math books
  • a unit vector is the vector compressed in to a 0 to 1 range
    if you want to scale it, normalize it first then * by value to scale it up to be longer.

How to do this with nodes: Vector scale and playing with vector math.

  • create a control transform group “pedal_ik_ctrl”
  • Add a cone polygon primitive
  • Connect the ik control to drive the cone
    • create the node vectorProduct
    • connect ik translate to node input and go output to the cone translate.
    • set the vectorProduct attribute normalize output this crates a “follow” that is limited to a range of 1 and set to “no operation” because we only want the value normalized.

How do we create the Math with only nodes?

  • interesting tip that comes up later: If you have two vectors and normalize them then do dotProduct you get the angle between them
  • Create a spherical constraint with just vector math(13:29)
    • ik ctrl node translate – vector Product-translate of target
    • To control the length is multiply the vectorProduct by a value with a multiplydivide node before the target translate.
    • If you want to lock this sphere to a single plane you need to set the axis in the mitiplyDivde node to zero.

Need to control this effect or build on.

  • dotProduct
    • ||a|| *||b||* cos  – if you have two normalized vectors multiplied by COS gives you an angle.
    • If your vectors are aligned (angle zero) the COS of that angle is going to be 1
      • ||b|| * COS  normalized gives you the magnitude(length) of the vector
  • So with out a “length node” in Maya we can use the vectorProduct node
    • pedal_ik_ctrl.translate out to vectorProduct 1 node (normalizing the value no operation) -out to vectorProduct 2nd node input 1
    • pedal_ik_ctrl.translate out to vectorProduct 2 node input 2 (with no normalizing set to dotProduct)
  • We get the result of the length of the vector
  • Condition node (if length of first vector in to “first term” ) is greater than 3 (then we want the reScaled vector from multiplyDivde node “second term” )
    multiplyDivide.output – Color if true.
    otherwise if the length is less than, use the pedal_ik_ctrl translate.
    Then take condition.out to the cone.translate.
  • This creates an “IK” like behavior by creating a limited range

RIGGING : Back to rigging the bike pedals

Raf now uses what he just worked through with the vectors to create the rigging. And updates the names of the nodes.

  • pedals_M_pedal_IK_ctrl_srtBuffer
    • pedals_M_pedal_IK_ctrl
  • pedals_M_pedal_IK_ctrl. translate->vectorProduct (no operation) – multipleyDivide


We want to have our pedals_M_pedal_ik_ctrl_srtBuffer end up in the same space as the the pedal_Mstaff_ctrl_srtBuffer + an offset

  1. parent pedals_M_pedal_IK_ctrl_srtBuffer under pedals_M_cmpnt-control
  2. world2Pedals_offset_srt->wheel_M_main_ctrl_wMtx_output_fNode2 -> pedals_M_pedal_IK_ctrl_srtBuffer
  3. create a new node staff2pedals_offset_srt that is a child of pedals_M_cmpnt- input- world2pedals_offset_srt (rename name to world2staff_offset_srt )
  4. staff2pedals_offset_srt world matrix out- to new decomposeMatrix node wheel_M_main_ctrl_wMtx_output_fNode3- srt out to pedals_M_pedal_IK_ctrl_srtBuffer

Now the IK control starts in the same place as the FK

Raf does something interesting here to drive the control points on the shape for the pedal inverse of the transform to create a visual link 

At this point Raf also digs in to Matrix math (1:00hr) to setup the information needed to create context to the nodes and rigging that he needs to do to make the IK buffer work in the rig.

*Maya uses row matrices, reading top to bottom across the matrix

1,0,0,0 x
0,1,0,0 y
0,0,1,0 z
0,0,0,1 (w) displacement from world 0,0,0

Continue the rig

  • world2staff_offset_srt
  • pedals_M_peal_IK_ctrl

New node time ( multiplyMatrix )

Take the inverse matrix from world2staff_offset_srt ->multMatrix.Matrix In[2]

and pedals_M_peal_IK_ctrl.worldMatrix to ->multMatrix.Matrix In[1]

Now decompose the multMatrix output  and drive a sphere for visualize the output of the offset we now need in order to drive our pedals.

delete it and create a cone.

parent the code under the world2staff_offset_srt for visualization of the pivot.

  • multMatrix-decompose->and attach it to the translate/rotate to check that your offset goes to the pedal location.

But we need rotations, not translate

  • create vectorProduct and set it to no operation
  • Dot product can give you both projection and angle of the vector.
  • New node (angle between)
    • multMatrix-decompose-Y and Z in to the angle between vector Y.Z and then angle.euler out to the cone to show rotation. of only Y and Z, keeping X from solving and creating a flat plane of rotation
    • To invert the value push the Euler out to animBlendnodeAdditiveRotation and – the weight so you can get the rotation angle in the direction you need.
    •  To do the final rig hook up between the IK and FK  using the existing animBlendnodeAdditiveRotation  node, take and pedals_M_staff_Ctrl (our fk rig) .Rotate  into  animBlendnodeAdditiveRotation.inputb
    • then animBlendnodeAdditiveRotation.Output – to Deform-pedals_M_pole_srt
  • Now the weight value on the animBlend node will mix between the IK or FK rig system.


What does this give us?

  1. A rig that doesn’t depend on hierarchy
  2. no relationships with layers of constraints because the rigging is managed with pure math and in the DG not in the hiearchy.
  3. A deeper understanding of what Maya is managing behind the scenes when you are doing constraints and parents etc in the DAG.



Get involved:
Follow Raf on twitter for announcements and news
Follow the Streams live on Twitch
Subscribe and watch past broadcasts
Cult of Rig -YouTube
And keep up to date with news on the website


Leave a Reply

Your email address will not be published. Required fields are marked *