GDC 2005 - Essential Math for Games Programmers
Download
Report
Transcript GDC 2005 - Essential Math for Games Programmers
Physical Simulation on GPUs
Jim Van Verth
OpenGL Software Engineer
NVIDIA
[email protected]
www.nvidia.com
www.essentialmath.com
Physics on GPU
Topics of discussion
Ways of parallelizing physics
Examples of GPU physics
CUDA and you
Parallelizing Physics
What we’ve talked about so far
CPU
GPU
Game Logic,
AI, Physics
Graphics
Display
Awfully busy… improve performance?
Parallelizing Physics
Solution 1: Multicore CPU
CPU
Game Logic,
AI
Physics
GPU
Graphics
Display
Parallelizing Physics
Solution 2a: Cell processor
Game Logic,
AI
CPU
GPU
Graphics
SPU SPU SPU
SPU SPU SPU
Physics
Display
Parallelizing Physics
Solution 2b: AGEIA processor
Game Logic,
AI
CPU
GPU
Graphics
PPU
Physics
Display
Parallelizing Physics
Solution 3: Programmable GPU
CPU
Game Logic,
AI
GPU
Graphics,
Physics
Display
Parallelizing Physics
Solution 3b: SLI
GPU
CPU
Game Logic,
AI
Graphics
GPU
Physics
Display
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
Object Representation
Global object data in texture pairs
Position
Orientation
Linear
Momentum
Alternate frame to frame
Angular
Momentum
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
Displacement
Position
Velocity
Force
Update position, velocity each frame from global
object data
Update force from collisions
Pipeline
Update Particles
Calculate Grid
Compute
Collisions
Integrate
Update Particles
Update
Particles
For each object do:
Iterate through all particles
Update particle position, velocity
Position
Orientation
Particle
Position
Calculate Grid
Compute
Collisions
Displacement
Integrate
Linear
Momentum
Angular
Momentum
Particle
Velocity
Grid Representation
Stored as slabs within 2D rendertarget
Update
Particles
Calculate Grid
Compute
Collisions
Voxel stored as texel
Four particle indices per texel
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
Update
Particles
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
Calculate Grid
Compute
Collisions
Integrate
Integration
Compute new linear and angular
momenta based on collision (and
other) forces
Update
Particles
Calculate Grid
Force/torque on rigid body is weighted
sum of forces from each particle
Compute new position and orientation
from momenta
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 Sessions
Room 3003 – West Hall
Advanced Skin Rendering in NVIDIA's
Human Head Demo
4:00-5:00 pm, Wednesday, Feb. 20
Particle-based Fluid Simulation For
Games
9:00-9:30 am, Thursday, Feb. 21
3D Stereoscopic Game Development How to Make Your Game Look Like
Beowulf 3D
9:30-10:00 am, Thursday, Feb. 21
GPU Optimization with the Latest
NVIDIA Performance Tools
10:30-11:30 am, Thursday, Feb. 21
NVIDIA FX Composer 2: Shader
Development Unleashed
12:00-1:00 pm, Thursday, Feb. 21
General GDC Sessions
Advanced Visual Effects with Direct 3D
10:00-18:00, Monday, Feb 18
Room 2007 - West Hall
Beyond Printf: Debugging Graphics
Through Tools
12:00-1:00 pm, Thursday, Feb. 21
Room 131 - North Hall
Real-Time Ambient Occlusion
14:50-15:10, Friday, Feb 22
Room 3004 - West Hall
Physics for Game Programmers
10:00-18:00, Tuesday, Feb 19
Room 2018 - West Hall
15,000
Visitors:
The first-ever
10,000 amateur and pro
visual
gamers, demoscencers,
Game modders,
computing
machinima creators, and
mega-event..
3D artists
3,000
technical and of
The
universe
marketing professionals
visual
from multiple industries
2000 visitors
computing
in
300 press & analysts
one place at
one time
San Jose downtown
Aug 25-27 2008
http://www.nvision2008.com
Questions?