Case Studies
Poseidon
Poseidon
Broadway shot
CIS Hollywood was presented the challenge
of adding and enhancing water for numerous shots in the summer
blockbuster movie, Poseidon. The simplest
shots required only drips of water to be added in a virtual
set extension of a practical hallway, while the most complicated
shot called for a huge surge of water violently coming down
a hallway, lifting objects, and smashing into the camera.

Broadway film scan and final
composite
Work Awarded
The initial work was awarded based on our RealFlow work on
Constantine and other tests we did specifically for Poseidon.
The Constantine shots included wine being poured from open
moving bottles, and also alcohol being shaken in closed bottles.
The Poseidon specific tests included water drips and also
low-resolution tests of water rushing down a corridor.

Initial RealFlow test for Poseidon
// View
video
A large amount of shots we received required
a CG hallway extension added to them. In many of them, we
also had to add running water down the floor of the hall and
drips coming off of the ceiling.
The most difficult shot we received was 5 seconds long and
featured a surge of water flowing down the hall towards camera.
The violent surge picks up debris and chairs along the way
before smashing down onto the camera.
Goals
For the main surge shot, the Broadway shot, our main goal
was to achieve a very photorealistic flood. By concentrating
on 3 distinct steps - simulation, meshing, and rendering -
we were able to refine them until we were satisfied with the
look.
In the beginning we knew that the simulation process would
be the key to getting the final photoreal look. Without a
solid believable simulation, even the best mesh or renders
would be worthless. We based our initial tests on the shots
we completed for Constantine. We were able to achieve realistic
behavior with RealFlow3, but the scale did not compare to
what we wanted to do for Poseidon. To help set up our initial
simulations for Poseidon, we hired a RealFlow consultant,
Mark Stasiuk, from FusionCIS. With his assistance, we were
able to calculate the amount of particles and computing power
we needed to get a very believable simulation.
Once we started getting a simulation that was going in the
right direction, we simultaneously started researching meshing.
Initially, we tested the capabilities of RealFlow and were
very satisfied, but as our simulations became more complex
and as the particle counts grew, we realized that we would
need our own meshing solution.
Rendering was done with Pixar's PRMan. Like meshing, as we
started to get decent meshes, we started developing and testing
our render pipeline. Dan Kaufman developed and supervised
the shaders and rendering for all of the water. The water
look was achieved through the use of multiple PRMan shaders.
Among the various passes were: diffuse, specular, normal,
Zdepth, subsurface scattering, reflection, and specular. By
having each pass as a separate layer, our compositors had
the best control over the final look.
Production Process
Here is the general outline of how we handled an entire
shot at our facility.
Generate scene geometry
Once we had the background scans in our system, we determined
what geometry we would need to complete the shot. The geometry
generated would serve as a reference to tracking, holdouts
for any possible extra 3D objects and geometry for the RealFlow
simulations. They would also be used to enhance the actual
scan itself. Fortunately, production provided us with LIDAR
scans of the entire hall set, so our modeler had a great starting
point.

Original
Broadway film scan // View
video

Broadway LIDAR point data rendered in Maya // View
video
Track the shot camera
In order for us to render the water and other 3D elements
we needed a very accurate track of the shot camera. Once we
were able to track the camera, the elements could be rendered
and then composited together.
Simulate the fluid
Using the geometry we built for the specific shot, we imported
that into RealFlow and started the process of setting up the
simulation. For example, the main Broadway shot had a 500
foot hall through which the water flowed down. Using Maya,
we simplified the hall so that it would be easier to simulate
with, and then imported that into RealFlow. After finding
appropriate simulation settings, we simulated just the particles
for that shot. In addition to the main fluid simulation we
also ran additional simulations to enhance the overall look.
These included: spray, water drop, and rigid body dynamic
simulations.

Early RealFlow Broadway simulation
// View
video

RealFlow rigid body dynamics
test simulation // View
video
Mesh particle data
Once the particle data simulation was completed, we were
able to run meshing tests on it and generate the actual mesh
files. Given our limited time, we opted to use an in-house
mesher that generated PRMan mesh files, which we read in at
rendertime. By also wedging out mesh parameters and meshes,
we were able to get exactly what we wanted.

Minsk
Mesher parameter wedge test // View
video
Rendering
The result of the meshing process was one RIB file per mesh.
The mesh RIBS were then read in at rendertime using Read-Archiving
inside Maya. For each simulation, we had around 6 rendered
elements generated from the same mesh RIB file.

First
slap composite with flat shaded fluid mesh // View
video
Compositing
Putting the shot together was not as simple as A over B.
Not only did we have dozens of fluid layers, we also added
extra 3d objects, added an extension to the practical hall
in the scene, and also used real water in various places in
the shot to add to the believability.

Final
render of floorwater element simulated in RealFlow
// View
video

Ambient
occlusion pass for Broadway hall geometry
RealFlow Process
Defining our RealFlow pipeline was the hardest thing to do.
We had previously completed some shots for Constantine using
RealFlow, but the scale of the simulations and meshing was
no where close to the scale we needed for the main Poseidon
shot. The Poseidon Broadway shot entailed a giant surge of
water violently coming down a hallway, as opposed to the Constantine
shots which basically entailed just water pouring out of a
bottle, and water being shaken in a bottle. We estimated that
to get real life equivalent results, we needed about 60 billion
particles. That amount of data was definitely not realistic
considering our time and space limitations. We had to work
out other ways to get more detail in the simulations.

RealFlow
wine pouring from open bottles // View
video

RealFlow
alcohol augmenting real fluid pouring out of the mouth
// View
video
Once we had a model that matched what was in the background
scans, we imported a simplified version of it into RealFlow
to use in the simulation.
Setting up how the simulation was going to run was important,
because certain ways allowed for a faster and more stable
simulation. We ended up using a tilted hall along with gravity,
and a box object was used to push the fluid flow down the
hall. This setup gave us the most control over the simulation.

High
resolution RealFlow particle simulation rendered with Maya
and PRMan // View
video
After we had shown the shot to our clients, they requested
for the surge to not flatten out down the hall. They wanted
the water to maintain an almost vertical appearance as it
flowed down. To address this problem we merely accelerated
the pushing box down the hall to not let the fluid have time
to settle and shoot too far in front of the box.

Comparison
of Box-pushing simulation methods // View
video
To further understand what was happening and to get realistic
behavior, we wedged the majority of the RealFlow parameters
in the simulation for the fluid and for the geometry involved.
These parameters included density, viscosity, surface tension
for the particles, and friction, bounce, stickiness, and roughness
for the actual scene geometry. These wedges were run using
the same setup we planned on using for the final high resolution
simulations, but we used a much lower particle count, so we
could get many of these done fast. By wedging all of these
parameters we were able to get a great looking simulation
without running the entire high resolution simulation. This
was valuable, because the high resolution simulation took
a tremendous amount of time to finish.

Side
by side comparison of different Friction values //
View
video
We were also able to increase the resolution of the mesh
by compositing 2 to 3 simulations together during mesh time.
Each of these simulations had different unique particle behaviors,
but the overall behavior was similar enough to not notice
the discrepancies if they were put together. This enabled
us to increase the resolution of the mesh without having to
increase the actual resolution of our simulations and thereby
increasing the time of the simulation. We just ran another
simulation at a known runtime for extra detail.
Unique/Different Solutions
There are a few things we did that must be mentioned, because
if we had not done them, we would not have achieved the final
results.
Our in-house mesher was the first important piece of the
final puzzle. Initially, mesh times per frame were just as
much as our simulation times and that was unacceptable. Our
solution was to have our own Robert Minsk implement a mesher.
He loosely based it on the 2005 Siggraph paper, Animating
Sand as a Fluid by Yongning Zhu and Robert Bridson. The mesher
was a multi-threaded level set mesher that was designed to
handle large sets of data very fast. It generated a single
surface one slice at a time and only used particles that were
absolutely needed. By reducing mesh times from 2-3 hours to
2-3 minutes, we were able to wedge different meshes to achieve
yet another level of refinement that was obvious in the final
render. This was a 2 step process: the first step being to
write out a PRMan rib file for each mesh that corresponded
to the particle simulation file. The second step was to include
this in the render scene as a readarchive object with appropriate
lighting and shaders attached to it.

Test
render of a low resolution culled mesh // View
video
To augment the main broadway simulation, we used extra non-meshed
particle simulations to get the spray effect of the main sim
hitting the walls and objects flowing down the hall. These
simulations were run as a post process based on the actual
particles of the main simulation. The addition of these particle
simulations gave us the extra detail we needed to make the
shot believable.

Final
render of additional crazy-spray particle element //
View
video
Finally, the use of real water elements in the final composite
gave the shot a much more natural and less CG look
Hardware and Software Information
Our renderfarm included ~50 linux render nodes and ~100 xserves.
We simulated on three Linux Networx dual processor AMD Opteron
machines with 8GB of RAM and one AMD Opteron machine with
four dual core processors and 32GB of RAM.
We also used RealFlow3 and an alpha version of RealFlow4
operating on CentOS 4.2 for Linux. For rendering we used PRMan
12, and for compositing, we used Shake 4.0 operating on dualproc
G5s with 4 gigs of RAM.
Results
Basing our development pipeline around commercially available
software allowed a relatively small company like CIS Hollywood
to generate extremely sophisticated water simulation effects,
effects that just a short while ago would never have been
achievable.

Final
composite including a Before/After step-through of elements
// View
video
Copyright:
The CIS Hollywood Team (http://www.cishollywood.com)
Visual Effects Supervisor: Bryan Hirota
Digital Effects Supervisor: Dan Kaufman
RealFlow Supervisor: Kyle Yamamoto
Research and Development Supervisor: Robert Minsk
Senior Simulation Technical Director: John Cassella
Color and Lighting Supervisor: Diana Miao
Animation Supervisor: Gary Abrahamian
Senior Technical Director: Jason Wardle
Compositing Supervisor: Patrick Kavanaugh
Senior Compositor: Marc Nanjo
|