interacting with huge particle simulations in maya with...
TRANSCRIPT
![Page 1: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/1.jpg)
Interacting with Huge Particle Simulations in Maya using the GPU
![Page 2: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/2.jpg)
Introduction
Particles (as used in VFX).
Demo.
GPU implementation.
— Data organization.
— Emission.
— Environmental forces & collisions.
Designing for a professional workflow.
Fun with fluids.
Demo & questions.
![Page 3: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/3.jpg)
Introduction to Particles
Discrete points with attributes, in space.
Movement is defined by forces and constraints.
They have limited state.
e.g. Force modifies velocity,
and velocity modifies position.
— Unconstrained by a grid.
Computation and storage are only used
where needed.
Already used extensively in VFX…
u
p
f
Position
Velocity
Colour
Etc.
ui+1 = ui + f pi+1 = pi + ui+1
![Page 4: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/4.jpg)
Particles in Film VFX
Images courtesy of:
Star Trek 2 – The Wrath of Khan
Bolt, Walt Disney Pictures
Transformers 2, Paramount Pictures
1982 - First CG particle FX in
StarTrek 2.
2008 - Disney use GPUs to
efficiently render particles as
sprites.
2009 - ILM use GPU particles
for fast rigid-body dynamics in
Transformers 2.
FX Rendering Physics
![Page 5: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/5.jpg)
Particle Data Structures
System-wide attributes
— Attributes shared by all particles.
— Typically constant.
— e.g. gravity, deltaTime, mass, radius, etc.
Per-particle attributes
— Specified by the solver-definition / user-defined.
— Structure of arrays.
— e.g. position, velocity, color, temperature, etc.
![Page 6: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/6.jpg)
Autodesk Maya - “nParticles”
Emitters.
— Omni, Volume, Surface, etc.
— Surfaces can emit particle attributes.
Force-fields.
— Uniform, Radial, Vortex, Air, Drag, etc.
Collision with arbitrary geometry.
Expression language.
Allows integration of different kinds of materials (e.g.
cloth, fluid) by using a singular physics representation.
![Page 7: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/7.jpg)
Motivation for Particles on the GPU
Particles are simple and elegant.
Small memory footprint.
Easy to implement.
Highly scalable.
= GPU friendly!
See S.Green’s “particles” example in CUDA SDK.
![Page 8: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/8.jpg)
Demo – nParticles vs. GPU Particles
![Page 9: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/9.jpg)
Implementation Goals
Integrate with existing Maya workflow.
Be more interactive than current Maya tools.
— We don’t want to slow down the Maya user-experience.
Solution for any kind of particle problem.
— rigid-bodies, DEM, fluid, hair, crowds… (smoke, fire)
![Page 10: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/10.jpg)
The GPU in 1½ slides
multi-core CPU
(4 cores)
many-core GPU
(448 cores)
Huge cache
Lots of cores
![Page 11: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/11.jpg)
Latency-hiding vs. Throughput
C M C M C M C M
Time
Cores
M
C
= Memory access time
= Computation time
WAIT GO
Time
stall
C M C M
C M C M
C M C M
WAIT GO
C M C M
The CPU hides latency by
optimizing memory accesses.
The GPU hides latency by quickly
switching between compute threads.
= Stall
![Page 12: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/12.jpg)
System Architecture
Solver-definition:
Defines attributes & attributeArrays (per-particle attributes)
Informs emitters what they must provide.
Containers are mirrored on device
(Going out-of-core if we need to).
CUDA
Attributes
Host
Attributes
GL-interop
![Page 13: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/13.jpg)
Typical Particle Life-cycle on the Device
Potentially “kill” particles.
![Page 14: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/14.jpg)
Particle Sort into Uniform Grid
Pcell* 10 10 12 16
0 1 2 3
Pattr*
0 1 2 3
Pcell 10 12 10 16
0 1 2 3
3a. Scan to find
first particle index
Pattr
0 1 2 3
1. Assign
particles
to cells
3b. Sort particle data
based on sorting order
2. Sort by
cell index
Cfirst -1 -1 0 -1 2 -1 3 -1
0 … 10 11 12 … 16 …
![Page 15: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/15.jpg)
Particle Death
If particle expires, set death flag.
Cell assignment then puts it into
deadCell (numCells+1 = 25)
Sorting will put all dead particles
in a contiguous block.
Pcell* 10 10 17 25
0 1 2 3
Pattr* 0 2 3
0 1 2 3
Cfirst -1 -1 0 -1 -1 2 -1 3
0 … 10 11 … 17 … 25
numParticles
![Page 16: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/16.jpg)
Particle Emission
Host Container may have
“new” particles.
Upload emitted data using
numParticles as offset.
numParticles += numEmitted
We use fast host-to-device transfer for emission data.
— i.e. page-locked & write-combined host memory.
Pattr*
0 1 2 3 4 5
numParticles
Eattr
0 1 2
![Page 17: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/17.jpg)
Maya’s Body Forces
Typically a function of position.
where Beta is the attenuation factor
![Page 18: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/18.jpg)
Primitives
Multi-purpose geometric primitives.
Support affine transforms.
3 types:
— Implicit
Simple for fast math.
— Convex-hull
Only convex objects.
HACD algorithm (K. Mamou et al.)
— Signed distance fields
Handles any topology but with memory cost.
![Page 19: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/19.jpg)
Displacement maps Allows more complex objects.
Effectively a 2-level BVH.
xNormal for map creation.
Normals Displacement
Note artifacts
![Page 20: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/20.jpg)
Collision response
3
1
4
1. Transform particle (P) into unit-space and calculate penetration (d)
2. Determine normal (N)
3. Move particle out of collider (along normal)
4. Update velocity based on collider’s friction and restitution coefficients
d d
r r
u
u’ P P
2
N N
![Page 21: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/21.jpg)
Getting data back to Maya
We want to use the particles’ data
inside Maya.
Modern NVIDIA GPUs can overlap
compute with copy.
— Quadro/Tesla have 2 copy engines.
We can remove the cost of the data
transfer if we allow some latency…
![Page 22: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/22.jpg)
NVIDIA Maximus (Quadro & Tesla)
6GB & 448 cores each.
DCC apps like Maya already use
many GPU resources.
Option of multi-GPU scaling.
GL-interop
— No CPU involved.
— Tesla-CUDA to Quadro-GL.
— Driver always looks to optimize.
2x faster
![Page 23: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/23.jpg)
The Host Application - (Autodesk Maya)
Maya plug-in callbacks:
— Update (called during data computation)
Upload & Simulate the particles.
Download the particles for export.
— Render (called during Maya’s scene-graph traversal)
Render particles.
Update 1 Update 2 Main
time
Render 1
Render Render 1
frame 1 frame 2
![Page 24: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/24.jpg)
2 Render 1
Example 1: Synchronous CUDA thread
Create “GPU worker” thread for CUDA context.
— Protection for both app & plug-in.
Blit computed buffers to app’s OpenGL context
— Use the CUDA GL-interop
Update 1 Update 2 Main
time
Upload 1 Compute 1 Blit 1
Render
Thread Upload 2 Compute 2 Blit 2
Render 1
1 2
1
Operation:
Stall:
Sync:
frame 1 frame 2
Wait for update
to complete
Prepare the
CUDA container
![Page 25: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/25.jpg)
Example 1: Synchronous CUDA thread
Advantages:
— Simple to implement.
— Multi-threading protects our plug-in / host app.
— Uses GL-interop for efficient data movement to the Quadro GPU
Disadvantages:
— We are relying on Maya calling our update at the start, and our
render at the end!
![Page 26: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/26.jpg)
Render 1 Render 0
Example 2: Double-buffered CUDA thread
Use latency to overlap update with host app.
Update 2 Main
time
Upload 1 Compute 1 Blit 1
Render
Thread Upload 2 Compute 2 Blit 2
Render 0
1 2
Operation:
Stall:
Sync:
1 Update 1 0
frame 1 frame 2
Update the
particle buffers
Copy particle data
into render-buffers
Render previous
frame’s render-buffers
Wait for previous
frame to complete
![Page 27: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/27.jpg)
Double-buffered CUDA thread: Conclusions
Advantages
— Simple to implement.
— Multi-threaded.
protects our plug-in / app.
Allows overlap of our computation and app.
Disadvantages
— One frame of latency.
— No overlapping of compute with upload/download.
— No frame-accurate access to particle data.
![Page 28: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/28.jpg)
One CUDA stream per batch
a b c
Example 3: Asynchronous CUDA streams
Main
a b c
Render
Thread
U D
U C D
Stream 3
Stream 2
Stream 1
C
Render 0a
a b c Render 0
Render 0b Render 0c
U D C
a b c a b c
a b c
time
U D
U C D
C
U D C
frame 1 frame 2 frame 3
Render 1
![Page 29: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/29.jpg)
Asynchronous CUDA streams: Conclusions
Batching the data means…
— We hide the cost of data transfer between device and host.
— Extension to Multi-GPU is now trivial.
NB. Not all algorithms can batch data.
Each batch’s stream requires resource allocation.
— Be sure to do this up-front, before OpenGL gets it all!
— Number of batches can be chosen based on available resources.
![Page 30: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/30.jpg)
One GPU per batch
a b
Example 4: Multi-GPU CUDA
Main
a
b
OpenGL
Thread 1
U D
U C D
GPU 2
GPU 1
C
Render 0a
a b Render 0
Render 0b
a b a b
a
time
U D
U C D
C
frame 1 frame 2 frame 3
Render 1
Thread 2 b
![Page 31: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/31.jpg)
Multi-GPU – sharing the compute
We already have the framework for this:
– If particle is beyond partition then kill it
and emit on other device.
– If within threshold then emit as a “ghost”
(i.e. it lives for only one update).
Partition plane
Cross-over to other side
Ghost on other side
GPU[0] GPU[1]
Threshold
![Page 32: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/32.jpg)
Fluid dynamics (in 1 slide)
More interesting than boring particles.
Works well on GPUs; it requires many data elements.
Existing techniques:
— Eulerian (grid-based)
— Heightfield (2D / 2.5D grid)
— Lagrangian (particle-based)
Momentum equation Continuity equation
![Page 33: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/33.jpg)
SPH (in 1 slide)
Continuity equation:
Momentum equation:
Motion equation:
![Page 34: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/34.jpg)
The life-cycle of particles (with SPH)
![Page 35: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/35.jpg)
Rendering Particles as a fluid
• Polygonize density field
– e.g. Marching cubes, etc.
• Screen-space rendering
![Page 36: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/36.jpg)
Rendering Particles in Screen-space
Extract the
depth
Normals
from depth
Additive
blending
Final
composite
![Page 37: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/37.jpg)
Future enhancements
More solvers:
— Crowds, rigid-bodies, non-newtonian materials, etc.
More rendering styles:
— OptiX, Volumes, Sprites, Instanced geometry, etc.
Better fluid meshing using anisotropic kernels.
Scriptable particle expressions using a virtual-machine.
Maya 2013 & Viewport 2.0 integration.
![Page 38: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/38.jpg)
Conclusions
Building CUDA-accelerated particles in Maya is easy.
— Leverages some of Maya’s existing framework.
Using techniques like overlapping and multi-GPU can
provide even more performance.
By using Maximus and simulating on the Tesla card, Maya
remains interactive.
![Page 39: Interacting with Huge Particle Simulations in Maya with ...on-demand.gputechconf.com/gtc/2012/presentations/S... · —We don’t want to slow down the Maya user-experience. Solution](https://reader031.vdocuments.site/reader031/viewer/2022022602/5b51264f7f8b9a7b648ba7e0/html5/thumbnails/39.jpg)
Acknowledgments
R. Bridson: “Fluid Simulation for Computer Graphics”, A K Peters, 2008
W. J Van Der Laan, S. Green, Miguel Sainz:
“Screen space fluid rendering with curvature flow” - Proceedings of the 2009 symposium on Interactive 3D
graphics and games
M. Becker, M. Teschner: “Weakly compressible SPH for free surface flows” – Eurographics / ACM SIGGRAPH
Symposium on Computer Animation, 2007
M. Ihmsen, N. Akinci, M. Gissler, M.Teschner: “Boundary handling and adaptive time-stepping for PCISPH” –
VRIPHYS, 2010
S. Green, “Particles” demo, NVIDIA CUDA SDK.