Atmospheric Anomaly I

The effect I am trying to mimic is from Fellowship of The Ring. Specifically the smoke ship Gandalf character creates while smoking a pipe.

I am using Houdini to build the geometry for the effect, which was a challenge at the beginning since although I have been using Houdini over 7 months now I am just starting to learn and see the possibilities.

The geometry of the ship was built using regular modeling nodes. After that I tried to keep everything procedural since it is much easier to tweak later on, although I still ended up with lots of keyframes.

The only thing that prevents this from being a fully procedural effect is the fact that I have to re-cook simulations out a lot since it gives me a speed boost when computing nested simulations.


I brought the ship in to a POP network and applied a softbody on it, then a noise with very low frequency and relatively low amplitude to create a windy effect while keeping it at the same origin.

After that an attractor node for softbodies, which is called a softlimit. The softlimit pulls in the ship which is already wavering to the center of it, like a star collapsing onto itself.

This part of the sequence has to be reversed somehow to be used since it will be the creating of the ship. A simple line of code does the trick:


I am using bgeo files over geo files since they are about 3/8 the size of a geo file (in this case) and much faster to read and write. What I am giving up is the ability to later on see and modify all the attributes that are written with both of the files when they are generated. DOP networks can pick up this data written by the POP network’s ROP Output Driver, from just one frame and continue the simulation from there.

Previously I was planning to take advantage of this feature but animating the ship is much easier and there is not enough setup time.


A POP network is used again to create another softbody. This time to pick up from where the reversed sequence left-off. It continues the noise and at the and dissipates the ship. after that the rest of the geometry sequence is outputted.


Everything before this point was in the origin of the scene.

Now it is time for keyframing, trying to make it look like the reference footage. After the motion is complete, another ROP Output Driver takes over and cooks the sequence to bgeo files.

bgeo sequence is brought into a new POP network again. Now for spawning particles to create the smoke trail after the ship. particles are created from the surfaces in random order instead of the ships volume, since for some reason it is screwed up. then there is a noise applied that changes seed every frame with $F and another noise with $NFRAMES-$F.

Second noise is to add a little more randomness to the velocity of the particles.

Life of the spawned particles are very low, since if the motion gets a little faster, everything becomes a blur. There is also a wind and a drag node. Wind acts like an up vector and pushes the particles up (this is still smoke) and drag acts to slow them down just before they disappear. When all the tweaking is done, this POP network and the bgeo sequence are merged in the ./obj/ node and cooked to another bgeo sequence by the ROP Output Driver, so Houdini doesn’t have to perform all the computations again while rendering.

I also added lattices to control the individual particle systems to fit to each other later on.

The particle systems are outputted by different ROP drivers to gain more control over them in shader design.

This is just the particles rendered.