attack of the noob

   3986   4   2
User Avatar
Member
2 posts
Joined: Dec. 2008
Offline
Hi folks,

I work with this guy who's an old-hat with Houdini. This is our second company in a row working together, and while on the last Maya-based project I didn't have a lot of time to think about other packages, I'm at a point now where I want to find something that works better for me and Houdini is very, very appealing.

I have a few questions I was wondering if folks could answer for me. Keep in mind I'm a total noob. I know Maya, LW, C4D, and Blender, but Houdini is a different animal.

- Do Houdini node networks push data, or pull? IE, do nodes at the top calculate first and then send data downstream (a la C4D's XPresso), or do nodes downstream ask upstream nodes for their data (a la Maya)?

- How are nodes cached? If I jump out of SOP level into the object level, and none of the parameters are animated in my SOP network are changed, can I assume the mesh is cached at the final displayed SOP and the one at the object level is kind of frozen, so that the nodes inside aren't calculating live?

- Lastly, I'm trying to watch some tutorials (3D Buzz's stuff is amazing – can't believe they have so much up for free!) and it seems like sometimes people are referencing parameters at levels upstream or downstream through expressions would cause cycle errors in Maya. I can't remember the name… There was a function that they ran that referenced a parameter by name. How does all that work? Does Houdini avoid cycle errors through magic, or are the networks non-acyclic (pushing data as opposed to DAG-style data pulling), or do those parameters get stored in a way that put them outside the graph?

That was a mouthful. Thanks in advance for any light you can shine on the above.
~ katt
User Avatar
Member
7735 posts
Joined: July 2005
Offline
kattkieru
- Do Houdini node networks push data, or pull? IE, do nodes at the top calculate first and then send data downstream (a la C4D's XPresso), or do nodes downstream ask upstream nodes for their data (a la Maya)?

In objects (OBJ), geometry (SOP), particles POP), channels (CHOP): pull. In vex ops (VEX), it's a bit different because you're just visually coding there. So that might meet your definition of “push” because a snippet of VEX (similar to the renderman shading language RSL) code is created for every VOP node. I've never used XPresso so I can't compare. In dynamics (DOP), it's sort of “pull” (i think) for the simulation data, but the simulation doesn't happen until the entire network is traversed. (someone else can jump in to correct me in DOPs

- How are nodes cached? If I jump out of SOP level into the object level, and none of the parameters are animated in my SOP network are changed, can I assume the mesh is cached at the final displayed SOP and the one at the object level is kind of frozen, so that the nodes inside aren't calculating live?

The default is to cache all geometry at every node that is evaluated (aka “cooked” in Houdini jargon). However, it's all “live” in that you can change any parameter (aka “attribute” in Maya) and all affected nodes will recook. If a node isn't affected by a parameter change, then it will not recook. There are preferences that say when cooked data should be thrown out (eg. memory threshold, explicit flags on the nodes, etc).

- Lastly, I'm trying to watch some tutorials (3D Buzz's stuff is amazing – can't believe they have so much up for free!) and it seems like sometimes people are referencing parameters at levels upstream or downstream through expressions would cause cycle errors in Maya.

I'm not sure how Maya works, but in Houdini, the expressions that reference other data (eg. parameter values), will go and ask those other parameters (or nodes) for their data. But these dependencies are relatively fine grained between components of parameters and node data. For example, one can easily have these types of dependencies in a Houdini scene file:
- parameter component -> node
- node -> parameter component
- parameter component -> parameter component
These dependencies form a DAG that is always evaluated in a “pull” manner. You can't have cycles still though but because they're fine grained, you can probably go fairly far until you run into them.

If a cycle is formed in the dependencies, it will be detected upon evaluation and aborted.
User Avatar
Member
2 posts
Joined: Dec. 2008
Offline
Thanks for replying so fast! ^_^/

edward
In vex ops (VEX), it's a bit different because you're just visually coding there. So that might meet your definition of “push” because a snippet of VEX (similar to the renderman shading language RSL) code is created for every VOP node.

Thanks for explaining that; means my Maya knowledge can transfer on most OP networks. The VEX language, tho – is it compiled? I keep seeing people talk about how much VEX is like RSL, making me think that the VEX OPs that get built are also compiled and operate at a fast speed?

The default is to cache all geometry at every node that is evaluated (aka “cooked” in Houdini jargon). However, it's all “live” in that you can change any parameter (aka “attribute” in Maya) and all affected nodes will recook. If a node isn't affected by a parameter change, then it will not recook. There are preferences that say when cooked data should be thrown out (eg. memory threshold, explicit flags on the nodes, etc).

What about keeping file load times down? Do cooked geometries get saved out at the last visible level into hip files? Or is the entire network “recooked” at startup?

These dependencies form a DAG that is always evaluated in a “pull” manner. You can't have cycles still though but because they're fine grained, you can probably go fairly far until you run into them.

Ahh okay. Then I think I'm not fully understanding what's going on, and should rewatch a few of those vids.

I generally avoid expressions, but it seems that all channel referencing is done through expressions? Doesn't that slow the system down a lot?
~ katt
User Avatar
Member
7735 posts
Joined: July 2005
Offline
kattkieru
I keep seeing people talk about how much VEX is like RSL, making me think that the VEX OPs that get built are also compiled and operate at a fast speed?

There is also a VOP context that generates RSL. The VEX code will get compiled and can run faster than using say a Point SOP with expressions. This especially true if you enable multithreading for your VOP SOP networks.

What about keeping file load times down? Do cooked geometries get saved out at the last visible level into hip files? Or is the entire network “recooked” at startup?

The default is to have everything recook at startup. You can choose to save a copy of the geometry at any node by turning on the “lock” (red) flag in the Network View.
User Avatar
Member
1145 posts
Joined: July 2005
Offline
One of the ways I describe channel referencing to students is to describe the structure of a hip file.
If you think of the editing contexts, obj, sop, dops, etc. as directories with the nodes below as sub-directories, the channel referencing becomes a bit clearer.
You can see this structure if you hit “w” in the network viewer and you'll see a list view of the hip structure.

A straightforward channel reference; ie: ch(/obj/sphere_object1/transform1/ty), is simply a directory pathway to the specific parameter value “ty” that you've declared.

This means if you can build a valid directory pathway you can reference data from anywhere to anywhere else in Houdini.

It's difficult to create a recursive cycle because generally you are pulling the data out of the context where a recursive problem may arise.

I also find it helpful to remind myself that the data being referenced is simply a number.
“gravity is not a force, it is a boundary layer”
“everything is coincident”
“Love; the state of suspended anticipation.”
  • Quick Links