This video will be a wrap up on our rig, with some features to be added before finishing.

CREATED BY

SIDEFX

For over thirty five years, SideFX has been providing artists with procedural 3D animation and visual effects tools designed to create the highest-quality cinematic results. We are passionate about what our customers do because our roots are in production, both as artists and as pioneering technical innovators.

More from SideFX

COMMENTS

  • anokhin 3 years, 2 months ago  | 

    Could you please tell is there a hope to see continue of this collection?

  • Celths 3 years, 1 month ago  | 

    Hello,
    Thank you for yours tutorials ! They are really clear and helpful.
    But i have some problems with the expressions and one script you use, can you help me ?

    My expression for the foot roll didn't work, and for the Master display for the CTRLS didn't work too with the ikblends display expressions.
    And finaly, your script to copy the parameters of the left arm to the right arm isn't work for me. i copy exactly your script but it's still not working.
    I'm on Houdini 17.5.173.

    I hope to see more about the rigging, like muscles and physics / dynamics rigs.

  • nole 3 years, 1 month ago  | 

    great rigging tutorial tnx

  • Vesse 3 years, 1 month ago  | 

    Hi,

    Great series. I have only one question.
    Where could I find the matchIK/FK script for download?
    I have some problems with the script and would like to compare it with the original. I noticed that there are a few lines of code before the matchIK portion of the script.

    Thank you in advance.

  • Eroc999 3 years ago  | 

    Thanks for the tutorials. It's been fun transitioning away from Maya and bringing one of my characters to life in Houdini. I was just wondering about 2 of your scripts. You used one to mirror the template parms group and another to fix all the broken expressions left behind after running the mirror tool for the bones and controls in the viewport. I downloaded your provided scripts and those 2 weren't in there? I attempted to write the template parms group script, but couldn't seem to get it to work without errors. Will you be providing those scripts in the future? For now I just did everything by hand and that worked fine, but I do like to optimize my workflows wherever possible.

    Cheers

  • karelkiers 2 years, 12 months ago  | 

    For the people like me who couldn't fine the injectproxy.shelf script. Ik retyped it (from the video) and here it is:

    ###################################################
    # Save display SOP geo
    # as file in hda
    # replace with File SOP
    # if display SOP is locked
    # delete it
    ###################################################
    ctrlclick = kwargs["ctrlclick"]
    shiftclick = kwargs["shiftclick"]

    # get the objects
    objlist = hou.selectedNodes()

    # get current hda
    hda_definition = objlist[0].parent().type().definition()

    # get the display SOP
    for node in objlist:
    # inject geo
    nodename = node.name()
    section_name = node.name()+".bgeo"
    dsop = node.displayNode()
    section = dsop.geometry().data()
    # compression_type=hou.compressionType.Blosc
    hda_definition.addSection(section_name, section)
    # remove locked SOP
    if dsop.isHardLocked():
    dsop.destroy()
    # add file SOP with opdef patch
    file = node.createNode("file", nodename+"_file")
    file.parm("file").set("opdef:../..?"+section_name)

    if ctrlclick:
    # make pose_scope SOP
    pose = node.createNode("posescope", "posescope")
    pose.setDisplayFlag(True)
    pose.setRenderFlag(True)
    else:
    file.setDisplayFlag(True)
    file.setRenderFlag(True)

    • karelkiers 2 years, 12 months ago  | 

      It doesn't connect the "posescope" to the file node.. :S

  • caleb choune 2 years, 11 months ago  | 

    karelkiers : you just missed 1 line :

    pose.setFirstInput(File)

    • caleb choune 2 years, 11 months ago  | 

      error: pose.setFirstInput(file)

      • Ferdinand13 2 years ago  | 

        Yes, "file" needs to be with a lower case "f" as the variable has been set up as "file" in line 30: file = node.createNode("file", nodename+"_file")

        Now it works :-)

  • pietnelis 2 years, 10 months ago  | 

    @Michael Goldfarb

    Many thanks for this extremely useful tutorial, I learned so much while following along. Any news on the launch of a follow-up tutorial on capturing and weighting and stuff? We really would need a similar high-quality video series on that from SideFX.

  • 4toonStudio 2 years, 7 months ago  | 

    Amazing tutorial, thank you very much, I read that many people have a problem with scripts. Works on H18, scripts don`t work properly on H18. Can someone write me where I can download Twist Expr, Mirror HDA parameters. Mirror HDA parameters I rewrote from the tutorial, but it doesn't work, it shows syntax error, I checked 100 times if I rewrote it correctly.
    ## 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(
    mesage="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)
    else:
    # setName and setLabel
    name = t.name()
    name = name.replace(prefix + '_', new_prefix + '_')
    t.setName(name)

    label = t.label()
    label = label.replace(prefix + ' ', new_prefix + ' ')
    t.setLabel(label)
    folder.setParmTemplates(temp)\n'))

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

    renameTemplates(new_folder, prefix, new_prefix)
    ptg.insertAfter(new_folder.name(), new_folder)
    definition.setParmTemplateGroup(ptg)
    definition.save(definition.libraryFilePath())

    I can't find these scripts anywhere, can somebody help me? Thanks again for the tutorial.

    • FranciscoBravo 2 years, 2 months ago  | 

      Hi currently I am working in H 18.0.348 this works fine (hope it helps)

      # 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)
      else:
      # setName and setLabel
      name = t.name()
      name = name.replace(prefix + '_', new_prefix + '_')
      t.setName(name)

      label = t.label()
      label = label.replace(prefix + ' ', new_prefix + ' ')
      t.setLabel(label)
      folder.setParmTemplates(temp)

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

      renameTemplates(new_folder, prefix, new_prefix)
      ptg.insertAfter(new_folder.name(), new_folder)
      definition.setParmTemplateGroup(ptg)
      definition.save(definition.libraryFilePath())

  • 4toonStudio 2 years, 7 months ago  | 

    ok, that's ok :) i got it !

  • dddmod___ 2 years, 3 months ago  | 

    Now there is no autoscope function in the parameters, only in type properties

  • DaFiNNiGaN 2 years, 2 months ago  | 

    Thanks for such a great series!

    I'm wrapping up with the set to default and set key buttons.

    The script works it's way up to the containing folder and captures everything within to set a key.
    I have a problem in that the jaw is inside the head folder in parameters so it appears in the same tab.

    Setting up the button to key head will also key the jaw, naturally as it is inside folder.
    How did you prevent anything inside main folder from not being keyed?

    It happens to the feet which are inside leg folders, etc. Where as I want to isolate them to separate foot and leg buttons while being in the same tab.
    Many, many thanks!
    :)

  • DaFiNNiGaN 2 years, 2 months ago  | 

    Actually, ignore that, I set up more folders to deal with it.
    Is that the best way to do it?

    So in my parameters Head/Neck tab I've set up 3 main container folders
    Head
    Jaw
    Eyes

    So the scripts to set key are self contained within these main folders

  • burakumincgi 2 years, 2 months ago  | 

    hda python module is not working in h18.0.460

    Error running callback:
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'function' object has no attribute 'setfoldertodefault'

    • burakumincgi 2 years, 2 months ago  | 

      I've copied every function and triple checked the spelling, but every one of them gives me always the same error
      I've spent many hours getting to this point and now I'm suck

      this is way is always good to share the file. I'm not a rigger and it's really frustrating spending all these hours in something that doesn't work

      • burakumincgi 2 years, 2 months ago  | 

        stuck*

    • burakumincgi 2 years, 2 months ago  | 

      Error running callback:
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:/PROGRA~1/SIDEEF~1/HOUDIN~1.460/houdini/python2.7libs\hou.py", line 39203, in __getattr__
      def __getattr__(*args): return _hou.HDAModule___getattr__(*args)
      AttributeError: 'module' object has no attribute 'setkeyonfolder'

      • burakumincgi 2 years, 2 months ago  | 

        found the problem.

        • xan_d 2 years ago  | 

          annd the problem was?

    • Siddhartha Nayanananda 2 years ago  | 

      Hi burakumincgi! Did you fix this issue? I can't figure it out too. Could you please help? Thanks a lot.

  • burakumincgi 2 years, 2 months ago  | 

    btw, here is my progress so far
    https://youtu.be/ui0raLw8xEA

Please log in to leave a comment.