Wow, that title sounds like a fancy Siggraph paper...
One of my favorite parts of 3ds Max is the Particle Flow system. Maybe because I had a hand in designing it, or maybe because Oleg over at Orbaz Technologies is brilliant?
The year was 2001...
3dsmax was in desperate need of a new particle system. Autodesk,or was it Kinetix, no wait, Autodesk Multimedia, no wait, discreet? Shit, I don't remember. (And I don't care anymore.) Anyway, they hired the right man for the job. Oleg Bayborodin. Oleg had had some previous experience with particles and wanted to take on building an event driven particle system.
Here's where I come in. I designed the entire sub-system architecture! (Wow I can't even lie very well.) Just kidding. Oleg designed and built the whole whole thing. My job, was to consider the user experience, assist in UI design and provide use cases for how the tool was going to be used.
Particle Flow Design Analogy
I used to be love experimenting with electronics as a kid, and when I saw the design of particle flow, It reminded of electronic schematics. (I built my share of black boxes with blinking LED's in them, pretending they were "bombs", or hi tech security devices.) So I ran with that as an analogy. Recently I came across some of the original designs and images that inspired the particle flow UI design.
We then started to apply it to these particle events, which were more like integrated circuits than transistors and resistors. We used a simple flow chart tool to design them and that started to look like this.
From there, the design started to look more like what we see today.
Unfortunately, since we were building a new core system from scratch, some of the use cases couldn't be achieved with this first incarnation of the system. We only time to do so many operators and tests. Bummer. But everyone figured we'd get to a second round of particle operators in the next release of max, so no big deal. However, Autodesk did some restructuring and a few engineers were let go and we were left with a great core, and no one to build on it.
Luckily, Oleg went on to create a series of Particle Flow extension packs and I hope he's making a good living off them. So let's look at using Particle Flow in production.
Particle Wheat Field for Tetra Pak
Here's a fun commercial. Let's go over some of the ways particle flow was used in this spot for Tetra Pak. First, let's take a look at the spot.
I was asked to create a field of wheat that could be cut down, sucked up into the air, and re-grown. It seems so simple to me now, but when you think about it, that's a pretty tall order. I went directly to a particle system due to the overall number of wheat stalks. (Imagine animating this by hand!)
At first I create a 3d wheat stalk and instanced it as particles. This was a great start, but it looked very fake and CG, and since I modeled each wheat grain (Or whatever you call individual wheats) the geometry was pretty heavy. Other issues were having the wheat grow, get cut and re-grow. As I tried an animated CG wheat stalk as an animated instance mesh particle, but this brought the system to a crawl. I quickly realized that a "card" system would work much better. Also, Bent has many stop motion animators so we thought we would lean on our down shooter and an animator. This worked great. We now had a sequence of animated paper wheat stalks that could grow by simply swapping out the material per frame. (did you get all that?)
Blowing in the wind was also a tricky thing at first. I thought I might be able to slap a bend modifier on the card and have the particles randomize the animation per particle, but thatwon't work. They won't move like a field of wheat. Instead, each particle would have a randomizing bend animation. Instead, I had to use lock\bond, part of particle flow box 1. (Now part of 3ds Max) This worked really good. The stalked waved from the base, not exactly what I wanted, but it worked good enough.
Wheat stalk shadows were my next problem. Since I was now using cards with opacity, my shadows were shadows of the cards, not the alpha images. They only way to deal with this was brute force. I had to switch over to ray traced shadows. At this time I split up the wheat field into 4 sections. This allowed me to render each section and not blow out my render farm memory.
From here, the cutting of wheat was a simple event, along with growing the wheat back. Much of the work was in editing the sequence of images on the cards. The final system looked like this.
The Falling Bread
The second problem I ran into on this job was when the bread falls on Bob. (That's the bunny's name) At first I tried to use max's embedded game dynamics system, reactor. I knew this would fail, but I always give things a good try first. It did fail. Terribly. Although I did get a pile of objects to land on him, they jiggled and chattered and would never settle. Not just settle in a way i like, but settle at all.
Particle Flow Box #2 had just been released. This new extension pack for particle flow allows you to take particles into a dynamic event where simulations can be computed. Particle Flow Box#2 uses Nvidia's PhysX dynamics system, which proved to be very usable for production animation. (PhysX dynamics are now available for 3ds Max 2011 as an extension pack for subscription users.)
With Box#2 installed, making the bread drop was so easy. There really isn't much to say about it. Box #2 has a default system that drops things so I was able to finish the simulation in a day or so, tweaking some bounce and friction settings. I used a small tube on the ground to contain the bread so that the it would "pile up" a bit around the character.
To show just one more example of how flexible Particle Flow really is, here's a spot I worked on where I used Particle Flow to control a school of sardines for the Monterey Aquarium. I should mention that I only worked on the sardines in the first spot, and all of these spots were done by Fashion Buddha.