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?