Houdini

MOPs @ Houdini Hive Worldwide

In case you haven’t seen it already, my presentation on MOPs at Houdini Hive Worldwide has been online for about a month now. Here’s the presentation: I’d forgotten to upload the example files I built during the presentation. They’ll be included in the examples directory in the next Experimental release Read more…

Houdini

Doing away with Houdini.env

This is a sort of sequel to the previous post I made about handling the Houdini.env file, and about configuring environments in general. Houdini 17.5 introduced the concept of “packages”, which are little JSON files (JSON meaning JavaScript Object Notation, filling a similar role as XML or YAML) that define Read more…

Uncategorized

MOPs @ EUE 2019

SideFX Software was generous enough to ship me out to the Netherlands last week to meet my partner-in-MOPs, the inimitable Moritz Schwind, and present together a little slide show about motion graphics, Houdini, and prison hooch at End User Event 2019! The technical stuff about MOPs starts about halfway through Read more…

Houdini

VEXpressions in your HDAs, using Python!

Update: Imre Tuske from Weta pointed out that there’s a simpler method… it turns out that you can force expressions to evaluate inside a Wrangle by wrapping them up in backticks. So if you have a channel called “do_vexpressions” to enable or disable VEXpressions, and another channel called “vexpression” that Read more…

Houdini

The rainy forest cinemagraph, Part 2

Continued from the previous post.

Part 2 here is all about the hero plant, which was by far the most time-consuming part of this whole process. The animation ended up being done primarily using FEM, which in retrospect was probably overkill. If I were to try this again, I’d probably try to build a more procedural system involving IK chains with maybe a layer of simple soft body dynamics on top to add springiness. Going the FEM route meant that each iteration took about 30 minutes to simulate, which adds up pretty fast. There are some neat little shortcuts elsewhere in the process, though, that hopefully some readers will find useful.

The hero plant

I am a masochist so I again started with L-systems to create the basic plant structure. L-systems are one of those things that start very simple and quickly build in complexity until they’re totally unreadable, so you generally want to keep notes of what the rules are actually doing as you build them. Of course, the notes from the original .HIP file that I posted are outdated, as they apply to an older version of the plant, so if you’ve already checked out the .HIP you may want to read these more accurate notes.

Here’s what the rules look like:

(more…)

Houdini

“Booleaning” a curve

There was an interesting thread recently on Odforce in which someone wanted to be able to “boolean” a curve against a polygonal mesh; essentially chopping up the curve at the intersection points between the curve and the mesh, and removing the inside parts of the curve. This ended up being Read more…

Houdini

The joy of xyzdist() and primuv()

I’m going to try to make a nice easy introduction to my two favorite functions in Houdini VEX (besides fit01 and chramp of course): xyzdist and primuv. These functions are at the core of a lot of really useful and cool tricks in Houdini, including rivets, the attributeInterpolate SOP, the old “droplets falling down a soda can” effect, and some really awesome stuff with volume shaders. I’ll do a little example of each as a way of showing off what you can do with these clever little tools.

First, let’s take a look at the VEX definition (the third overload here is the most frequently used):
float xyzdist(string geometry, vector pt, int &prim, vector &uv, float maxdist)

At its most basic, xyzdist will return the distance from the sample point pt to the nearest point on the surface geometry. Note that this doesn’t mean the nearest actual point, but the interpolated surface in between those points.

Those little “&” symbols mean that this function will write to those parameters, rather than just read from them. So if we feed this function an integer and a vector, in addition to the distance to the surface, it will also give us the primitive number prim and the parametric UVs on that primitive uv. Note that parametric UVs are not the same as regular UVs… this just means the normalized position relative to the individual primitive we found.

So, what can we do with this? Click below to find out… (more…)