Everyone knows that Budweiser drinkers are some of the most disciplined people on the planet, and it was exciting to work on a commercial that celebrates this rich tradition. My primary role in this spot was building the pipeline that allowed us to position, texture and animate 90,000 individual cards. The biggest challenge was designing a workflow that would allow us to work in broad strokes in general, but still manipulate individual cards when the need arose.

The heart of the technique was to represent each card using a Maya particle. I wrote a set of particle expressions to manipulate attributes on the particles, and then a custom Maya node which interpreted these attributes to generate the actual card geometry. The image above shows the master Maya scene used to position the cards. Adjacent is a QuickTime showing the raw output of the custom Maya node which generated the geometry.

To create the invidividual people in the stadium, we used the crowd simulation software Massive from Massive Software. A challenge this presented was the need to very precisely place tens of thousands of agents into the actual seats of the stadium backplate. I worked with James LeBloch, who served as the lead Massive artist, to build a system which allowed him to place locators on top of the stadium photography demarcating the positions of seating sections and rows. I then wrote a MEL script which analyzed the positions of these locators and exported curved agent generators into Massive. We then wrote out the positions of the Massive agents as a particle system, and built our cards particle system from that, allowing us to achieve a one-to-one correspondence between agents and cards. Some additional code derived orientation and UV coordinates from the NURBS stadium geometry and baked the data into the particle system.
 
The image above depicts the maps that we used to animate the cards. The upper portion is the actual texture that was mapped onto the cards using UVs derived from the stadium geometry. The lower portion is what we labeled the "time map", which used grayscale values to express the exact time that a particular card would appear initially. An additional map dictated the moment when the card was flipped over. This proved to be a very effective way for the artists, specifically Laurent Ledru and myself, to control the timing of the animation using intuitive 2D techniques. However because an additional bit of custom code baked these values from the image into custom particle attributes, when the client requested a change in the time that individual cards flipped over (which did happen), we could address it quickly using the component editor in Maya.

One additional technique we used to control the cards' animation came in the form of a Maya node I developed with a long-time friend and collaborator, Hai Nguyen, who has since become a Method employee. We created an interface which abuses the graph control built into Maya to create an intuitive representation of one dimensional probability distribution functions. Using this interface I could easily control several attributes of the cards' animation, graphically adjusting things like the probability of ambient shift in the cards' position, representing people shuffling their card or getting tired. The image above shows a bit of this node, which we dubbed Loaded Dice, in action.

And here's a shot breakdown created by Sarah Eim depicting the various elements of one of the shots.