290 likes | 310 Views
Discover ways to parallelize physics calculations on GPUs using examples and solutions. Learn about modern GPU computing power and implementation of GPU physics. Utilize CUDA for efficient programming and optimization techniques. Get the latest updates from NVIDIA presentations.
E N D
Physical Simulation on GPUs Jim Van VerthOpenGL Software EngineerNVIDIAjvanverth@nvidia.comwww.nvidia.comwww.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 Display CPU GPU Game Logic, AI, Physics Graphics Awfully busy… improve performance?
Parallelizing Physics • Solution 1: Multicore CPU Display CPU GPU Game Logic, AI Physics Graphics
Parallelizing Physics • Solution 2a: Cell processor Game Logic, AI Display CPU GPU Graphics SPU SPU SPU SPU SPU SPU Physics
Parallelizing Physics • Solution 2b: AGEIA processor Game Logic, AI Display CPU GPU Graphics PPU Physics
Parallelizing Physics • Solution 3: Programmable GPU Display CPU GPU Game Logic, AI Graphics, Physics
Parallelizing Physics • Solution 3b: SLI GPU Display Graphics CPU Game Logic, AI 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
Object Representation • Global object data in texture pairs • Alternate frame to frame Linear Momentum Angular Momentum Position Orientation
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 Velocity Force Position
Pipeline Update Particles Calculate Grid Compute Collisions Integrate
Linear Momentum Angular Momentum Position Orientation Displacement Particle Position Particle Velocity Update Particles Update Particles • For each object do: • Iterate through all particles • Update particle position, velocity Calculate Grid Compute Collisions Integrate
Grid Representation Update Particles • Stored as slabs within 2D rendertarget • Voxel stored as texel • Four particle indices per texel Calculate Grid Compute Collisions Integrate
Grid Creation Update Particles • For each particle do • Compute grid index • Write particle index to appropriate component at that location Calculate Grid Compute Collisions Integrate
Collision Resolution Update Particles • 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 Calculate Grid Compute Collisions Integrate
Integration Update Particles • 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 Calculate Grid Compute Collisions Integrate
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
The first-ever visual computing mega-event.. The universe of visual computing in one place at one 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 San Jose downtown Aug 25-27 2008 http://www.nvision2008.com