In Part 4, we will rig the Left Hand and complete the Left Arm. The Hand will have global and individual controls for finger curl, splay, fan and flex. The Left Arm and Hand will be mirrored to the Right side. We will finish the Left and Right Arms by adding the twist for both upper and lower arm bones, and add some optional automatic controls to drive the shoulder.


  • harryabreu 5 years, 6 months ago  | 

    Thank you very much Mr Goldfarb :)
    Now is time to Character Riggging in Houdini.
    A lot of people know the Houdini's Power in VFX but now is time to show Character animation.
    Let's Go ;-)

  • Ryanradcliffe3 5 years, 6 months ago  | 

    Great Tutorials! This is helping me to learn Houdini rigging very smoothly. Quick question, why don't you use Houdini's built in IK from bones tool? Is the setup not ideal?

    • goldfarb 5 years, 6 months ago  | 

      The IK From Bones tool sets up it's own control objects and animation interface, since the asset being built in this series uses it's controls and interface it was simpler to just do everything manually - plus it help users learn how to do these things :)

  • noirshinobi 5 years, 6 months ago  | 

    Thanks for the great tutorial! But where is the download link for last two scripts?

  • IceBar0n 5 years, 6 months ago  | 

    Thank you Mr Goldfarb ! Im checking sidefx website every day for your new rigging series :)

    • traileverse 5 years, 6 months ago  | 

      Don't hold your breath, next one won't come out until November, lol.

  • kishchris 5 years, 6 months ago  | 

    love the series ! Thanks for creating it !

  • seifdune 5 years, 6 months ago  | 

    Bone split script ?

    • goldfarb 5 years, 6 months ago  | 


      It'll be uploaded asap!


      • noirshinobi 5 years, 6 months ago  | 

        and what about twist expr script? :)

  • jon3de 5 years, 6 months ago  | 

    Thank you very much!!! This series are so awesome. You have some serious teaching skills!!

  • seifdune 5 years, 6 months ago  | 

    Please another two scripts(mirror hda parameter and op)

  • David_Kahl 5 years, 6 months ago  | 

    Really cool material Michael! Can't wait to digg into all of it!

  • captainbuckfish 5 years, 6 months ago  | 

    Loving these tutorial. Will there be a tutorial about capturing weights and painting weights in the future?

    • goldfarb 5 years, 5 months ago  | 

      yes. a second series on capturing will follow this one.

      • lou78 5 years, 4 months ago  | 

        I know it makes a lot of requests, but a bit of muscle series coming along the capturing one would be a great add.

  • jorgemartinsegura 5 years, 5 months ago  | 

    Really cool material! will be implemented matching FK - IK and viceversa in the next lessons??

    • goldfarb 5 years, 5 months ago  | 

      yep - the last video has a walk through of the scripts.

  • Island 5 years, 4 months ago  | 

    It looks good, but coming in without having done other tutorials on rigging, why is it necessary to change the original null to rotate downward in x axis? If one creates bones directly on top view of a hand, they will rotate in y direction. Secondly, at around 6 min 40 sec, you access something on the rigging menu that doesn't exist on my installation under "rigging". That was confusing.

  • edschiffer 5 years, 4 months ago  | 

    Hi Goldfarb,
    the ZIP doesn't contain the Mirror HDA Parameters and Opchange scripts. I'll retype these, but maybe would be good to add so it fixes for everybody...
    thanks for the lessons!

    • Ivo van Roij 4 years, 10 months ago  | 

      All the rigging series tools for the shelf are already in Houdini. Just add the "rigging series" tab and there you go.
      - Ivo

  • edschiffer 5 years, 4 months ago  | 

    I've typed the Mirroring scripts missing and packed all scripts up to now into a shelf. maybe this helps someone:

    • oleg_zv 5 years, 3 months ago  | 

      thank you

    • Myria 4 years, 4 months ago  | 

      Nice one, thanks

    • karelkiers 4 years, 3 months ago  | 

      Thank you, this helps a lot!

    • pietnelis 4 years, 2 months ago  | 

      Could you help me out in installing this. When I drag it onto my shelf bar, there is an error message AttributeError: 'NoneType' object has no attribute 'allItems'. And when I close that message, it also says Error: Invlid .hip file header. I work with Houdini 17.5.372 Indie. I desperately need the 'opchange' scrip...!!

      • pietnelis 4 years, 2 months ago  | 

        Never mind, I copied the text in my text editor and managed to get it working. Thank you for taking the effort of typing this all out...!

  • sidenimjay 4 years, 7 months ago  | 

    Question for Mr Goldfarb ... when you offset the meta bone controls, you are doing it with the transform and then offsetting the it not easier to use the Misc Tab Display Center or is there a deeper reasoning for the method you have chosen?

    Great series!

  • mechmedved 4 years, 7 months ago  | 

    How can i fix the problem? When i switch between IK and FK the bone(arm bone) is turning, but i don't need it.

    • Gunthern 3 years, 12 months ago  | 

      I had this problem as well. I was able to solve it by adding a constraintTransform node to the L_arm_bone2 constraints chop network, so that getWorldSpace is rotated 180 degrees in Y before the value is passed to the constraintBlend node. I hope this helps.

  • videlam 4 years, 7 months ago  | 

    Hello me again, in the script Split Bone the input should be converted to a string.

    numbone = netparent.createNode("bone", name + "_" + str (prefix))

  • Flakelace 4 years, 3 months ago  | 

    another great tutorial, thankw a lot !!

    just dropping a node here from an animator perspective.
    having the expression go from -10 -> 10 is always better to animate even if it's going to be way to strong on one side.
    having different values from -10 -> 0 and from 0 -> 10 will create a speed shift in the anim when you animate it from -3 -> 5 for example.
    that's quite hard to smooth out then.
    hope that's a helpful thought and please correct me when I'm stupid here :)

  • shandypranoto 3 years, 4 months ago  | 

    Thank you for the great rigging tutorial! It's been 2 years but I just watched this on Youtube. I am using Indie 18.0.391 and I get this message when trying to mirror HDA parameter :
    'NoneType' object has no attribute "parmTemplates"
    Traceback (most recent call last):
    File "mirror_hda_parms", line 56, in <module>
    File "mirror_hda_parms", line 36, in renameTemplates
    AttributeError: 'NoneType' object has no attribute 'parmTemplates'

    Can anyone please help? I just learned how to code and don't really use python...

    • shandypranoto 3 years, 3 months ago  | 

      I finally figure it out.. My bad. Reason why it didn't work for me is because I did not check my parameter folder was actually labeled "L_arm", so it returns nothing. It is my habit to replace every space in houdini with "_", so all the name and label will be the same convention so I don't need to keep hovering my mouse to check each parameter's actual name. I put the script here (if someone is using "_" to replace spaces, this might work for them, and correct me if im wrong, just modified tiny bit of the actual script) :

      # Mirror HDA Parameters
      # Select HDA
      # Click Shelf Tool
      # get the HDA
      hdanode = hou.selectedNodes()
      hdanode_type = hdanode[0].type()
      definition = hdanode_type.definition()

      # make copy of parmTemplateGroup()
      ptg = definition.parmTemplateGroup()

      # get folder
      folder = ()
      folder = hou.ui.readInput(
      message = "Folder to Mirror:",
      initial_contents = "L Arm")
      folder = folder[1]

      # get the old and new Prefix
      prefix = ()
      prefix = hou.ui.readInput(
      message = "Original Prefix:",
      initial_contents = "L")
      prefix = prefix[1]

      new_prefix = ()
      new_prefix = hou.ui.readInput(
      message = "New Prefix:",
      initial_contents = "R")
      new_prefix = new_prefix[1]

      # find the Folder containing the parameters
      new_folder = ptg.findFolder(folder)
      def renameTemplates(folder, prefix, new_prefix):
      temp = folder.parmTemplates()
      for t in temp:
      if type(t) == hou.FolderParmTemplate:
      renameTemplates(t, prefix, new_prefix)
      # setName and setLabel
      name =
      name = name.replace(prefix + '_', new_prefix + '_')

      label = t.label()
      label = label.replace(prefix + '_', new_prefix + '_')

      # relable folder
      label = folder.label()
      label = label.replace(prefix + '_', new_prefix + '_')

      renameTemplates(new_folder, prefix, new_prefix)
      ptg.insertAfter(, new_folder)

Please log in to leave a comment.