physical simulation on gpus jim van verth opengl software engineer nvidia [email protected]
TRANSCRIPT
Physical Simulation on GPUsPhysical Simulation on GPUs
Jim Van Verth
OpenGL Software EngineerNVIDIA
www.essentialmath.com
Physics on GPU
Topics of discussion Ways of parallelizing physics Examples of GPU physics CUDA and you
Parallelizing Physics
CPU
What we’ve talked about so far
Display
Game Logic,AI, Physics
GPU
Graphics
Awfully busy… improve performance?
Parallelizing Physics
Solution 1: Multicore CPU
CPUDispla
y
Game Logic,AI
GPU
GraphicsPhysics
Parallelizing Physics
CPU
Solution 2a: Cell processor
Display
Game Logic,AI GPU
Graphics
Physics
SPU SPU SPU
SPU SPU SPU
Parallelizing Physics
CPU
Solution 2b: AGEIA processor
Display
Game Logic,AI GPU
Graphics
Physics
PPU
Parallelizing Physics
CPU
Solution 3: Programmable GPU
Display
Game Logic,AI
GPU
Graphics,Physics
Parallelizing Physics
CPU
Solution 3b: SLI
Display
Game Logic,AI
GPU
Graphics
GPU
Physics
GPU Computing
Modern GPU has many independent processors: GeForce 8800 GTX: 128 SPs GeForce 8800 GT: 112 SPs
Mostly processing power, not cache: GeForce 8800 GTX: 300-400 Gflops GeForce 8800 GT: 500 Gflops
A lot of parallel power for physics!
GPU Physics Example
From GPU Gems 3 Takahiro Harada, “Real-time Rigid
Body Simulation on GPUs” Simple physics engine, all running
on GPU
GPU Physics Example
Idea: GPU is good at: Many similar computations Simple data
So: Particles for collision representation Grid for collision detection Simple collision response
Global object data in texture pairs
Alternate frame to frame
Object Representation
Position Orientation LinearMomentum
AngularMomentum
Object Representation
Collision rep: Solid (or shell) of particles
Store as Fixed radius Displacement from center of mass
Object Representation
Smaller particles == better fit But more processing
Object Representation
Particle data stored in texture and three rendertargets
Update position, velocity each frame from global object data
Update force from collisions
Displacement Position Velocity Force
Pipeline
Update Particles
Calculate Grid
ComputeCollisions
Integrate
Update Particles
For each object do: Iterate through all particles Update particle position,
velocity
Update Particles
Calculate Grid
Compute Collisions
Integrate
Position Orientation
LinearMomentum
AngularMomentum
Displacement
ParticlePosition
ParticleVelocity
Grid Representation
Stored as slabs within 2D rendertarget
Voxel stored as texel Four particle indices per texel
Update Particles
Calculate Grid
Compute Collisions
Integrate
Grid Creation
For each particle do Compute grid index Write particle index to
appropriate component at that location
Update Particles
Calculate Grid
Compute Collisions
Integrate
Collision Resolution
For each voxel do For each particle in voxel do
Compute force based on particles in this and 27 neighboring voxels
Regardless of collision! Spring force Damping from relative vel. Tangential force
Update Particles
Calculate Grid
Compute Collisions
Integrate
Integration
Compute new linear and angular momenta based on collision (and other) forces Force/torque on rigid body is
weighted sum of forces from each particle
Compute new position and orientation from momenta
Update Particles
Calculate Grid
Compute Collisions
Integrate
Demo
Other approaches
Simon Green’s particles N-body Parallelize one piece:
Ex. Broad Phase (GPU Gems 3) Do smaller problem
Ex. Fluid dynamics (Hellfire: London)
GPU Computing
How to program? Pre-G80, had to use Cg, GLSL, HLSL Problems:
Requires specialized shader knowledge Data is often texture or rendertarget Can’t “scatter” data easily
CUDA
Solution is CUDA Stands for Compute Unified Device
Architecture Extensions on C/C++ Interoperable with D3D and OpenGL www.nvidia.com/cuda Use it!
CUDA
Updating our example: Instead of Cg, use standard C++ w/CUDA
extensions Instead of textures or rendertargets, just use
CUDA arrays Instead of vertex shader, use scatter operation
NVIDIA Presentations@ GDC 2008
NVIDIA SessionsRoom 3003 – West Hall
Advanced Skin Rendering in NVIDIA's Human Head Demo4:00-5:00 pm, Wednesday, Feb. 20
Particle-based Fluid Simulation For Games9:00-9:30 am, Thursday, Feb. 21
3D Stereoscopic Game Development - How to Make Your Game Look Like Beowulf 3D9:30-10:00 am, Thursday, Feb. 21
GPU Optimization with the Latest NVIDIA Performance Tools10:30-11:30 am, Thursday, Feb. 21
NVIDIA FX Composer 2: Shader Development Unleashed12:00-1:00 pm, Thursday, Feb. 21
General GDC Sessions
Advanced Visual Effects with Direct 3D10:00-18:00, Monday, Feb 18Room 2007 - West Hall
Beyond Printf: Debugging Graphics Through Tools12:00-1:00 pm, Thursday, Feb. 21 Room 131 - North Hall
Real-Time Ambient Occlusion14:50-15:10, Friday, Feb 22 Room 3004 - West Hall
Physics for Game Programmers10:00-18:00, Tuesday, Feb 19 Room 2018 - West Hall
San Jose downtown San Jose downtown Aug 25-27 2008Aug 25-27 2008
The first-ever The first-ever visual visual computing computing mega-event..mega-event..
The universe of The universe of visual visual computing in computing in one place at one place at one timeone time
15,000 Visitors: 10,000 amateur and
pro gamers, demoscencers, Game modders, machinima creators, and 3D artists
3,000 technical and marketing professionals from multiple industries
2000 visitors 300 press & analysts
http://www.nvision2008.comhttp://www.nvision2008.comhttp://www.nvision2008.comhttp://www.nvision2008.com
Questions?