Home » Featured, Houdini, Miscellaneous

Houdini CHOPs: Curves from animation

21 July 2009 121,895 views 12 Comments

Adding custom controls

To make this easy to reuse, it would be useful to have some of the parameters exposed at the top level of the subnet to specify which animated object to use, and to control the number of curve divisions. With the “AnimationCurve” SubNetwork node selected, click on the gear icon (above the parameters panel). This is where you can customise the interface. The custom parameters you are about to add are known as “spare parameters”.


To start, drag a Folder from the left hand side into the middle area of the window to add a new folder above the existing “Transform” folder. If it vanishes when you let go, then it’s probably been placed at the bottom of the list, so just drag it back up into place. Rename the new folder “Controls” by entering it into the Label field on the right hand side.

You now need to add the parameters from the nodes that you wish to expose. You can either drag and drop them directly from the nodes themselves, or you can use the “From Nodes” tab on the left hand side of the “Edit Parameter Interface” window. Either method is fine, as they both automatically link the underlying parameter to the new top level parameter that you create.


You need to add the following parameters from the Fetch CHOP.
1. From the Source tab, the “Node” parameter (internally called “nodepath”)
2. From the Channel tab, the “Sample Rate” parameter (internally called “rate”)

By default, Houdini prefixes the labels of these parameters with the name of the node they came from. Remove this, or rename it to something you prefer.

Once you’ve done that, press Accept. If you now look at your AnimationCurve node, you’ll see the new parameters that you’ve added. If you change the Sample Rate, you’ll see the resolution of the curve in the main window will change in response. If it helps, turn on point display on the right hand side of the main viewport to see this more clearly.

Step9 Step9b
Changing curve resolution

Everything up to this point can be found in the ChopsTutorial_StageA.hipnc scene file, available for download at the end of this tutorial.

Preparing to convert to a digital asset

Generally when creating a digital asset, it is important to remove any references to nodes outside of the digital asset network. Otherwise these references will be broken when you instantiate your asset in a new scene. Houdini will warn you if you haven’t removed these references when you create your asset.


All CHOP nodes have an Export Prefix parameter under the “Common” tab that refers to /obj. If you leave it there, Houdini will warn us about it, which can get a bit annoying, so our first step is to remove all these references.

Go into your CHOP network and empty the Export Prefix parameter for the Fetch CHOP and the Null CHOP.


At the top /obj level, our Subnet’s Node parameter is referring to the animatedNull object. Even though this is the at the user interface level of our asset, you still need to remove this external reference before converting to a digital asset.

Delete the reference to the animatedNull from the parameter. Don’t worry about the curve disappearing.


By default, the SubNetwork node is created with a tab called “Subnet”. It’s not needed for our digital asset, so you can hide it. From the gear menu, choose Edit Parameter Interface. Select the Subnet folder and tick the Invisible checkbox on the right hand side to hide it.


While you’re in the interface editor, select the Node parameter and switch to the “Channels” tab on the right hand side. This is where the default values for the parameters are stored. You’ll notice that the default for this parameter is set to the animatedNull object. As this is another external reference you need to clear it, but make sure you leave the text under “Linked Channels” intact, as the connection with the original Fetch CHOP parameter will otherwise be lost.

Click Accept to leave the interface editor. You’re now ready to turn the SubNetwork node into a Digital Asset, which is shown on the next page.

Everything up to this point can be found in the ChopsTutorial_StageB.hipnc scene file, available for download at the end of this tutorial.
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)


  • Dragos Stefan said:

    A great and clear tutorial! As an option, one can use an Object CHOP instead of the Fetch CHOP to get the animation into CHOPs. However, while the Object CHOP can be more flexible in some cases, it is also much slower, especially if it has to compute the whole timeline.

  • varomix said:

    HI Andy

    I totally loved this one, very useful one

    Do you think this could be made so that the curve(SOP) can shape the animation curves?

    or maybe add a little manipulator at each key an move it around?

    that would be awesome

    thank you Andy, please keep sharing this nice techniques


  • AndyN (author) said:

    Great, thanks for the feedback.

    As far as I know, you wouldn’t be able to feed this system back into the animation again, because you’d end up with cyclical evaluation. I did try it when I was putting this tutorial together and Houdini bombed on me. In the docs, it says that you can’t export CHOPs back to parameters if you’re already importing data from them in the same CHOP network.

    It would be trivial to drive a different object with that curve though.

  • Jason said:

    Awesome tutorial. I’m just starting to get into CHOP’s and this really helps out on learning it. This is probably realy simple, but do you have any suggestions on animating a curve through CHOPs that controls an IK rig. I tried hand animating it, but I didn’t get the look I was going for. Anyways, like I said this really helped me in getting started with CHOPs.

  • AndyN (author) said:

    Hi Jason,
    No problem, glad you found it helpful.

    It’s hard to give any recommendations based on what you’ve said about the curve animation. If you can send me more info, I might be able to help.

    You can email me here:



  • Helene said:

    Hi Andy,

    Just wanted to say ‘Hi’ and thank you for a great tutorial. I’m just beginning to get into CHOPs – am finding it fascinating. This is a lovely introduction. Just to say you tutorials are greatly appreciated. Keep up the great work. 🙂


  • AndyN (author) said:

    No problem Helene, thanks!

  • MJ said:

    Hi Andy,

    Does this work with OP control channels such as with the position (‘pos’) of an object following a path ? I could not make it work.

    Great tutorial !

  • ArturM said:

    Thank you very much, this is a very useful resource.

  • Gotta Getmedat said:

    so in python you have to do something like this?…
    (float(expandString(‘$TEND’)) – float(expandString(‘$TSTART’)) + (1/float(expandString(‘$FPS’)))) * ch(“../../chop_GetAnim/fetch_Anim/rate”)

    is there a better way?

  • AndyN (author) said:

    Hi MJ,
    Off the top of my head, no, I don’t believe this method would work, but I’d have to try.

    I’m sure there must be a workaround though. I’ll have to investigate further!


  • AndyN (author) said:

    Hi Gotta,
    I don’t usually use Python for expressions so I can’t advise. Using the standard Houdini expression language is nearly always less verbose (and in my experience, a more common and standard approach), so I’d recommend sticking with that where possible.


Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.