13 3DGP GamePhyics
13 3DGP GamePhyics
13 3DGP GamePhyics
1
Introduction to Game Physics
Traditional game physics
– Particle system
– Rigid body dynamics
– Flexible body dynamics
Some state-of-art topics
– Car physics
– Fluid dynamics
– Rag-doll physics
Physics
– Rigid body kinematics
– Newton’s Laws
– Forces
– Momenta
– Energy 2
Basic Concepts from Physics (1/2)
Newton’s Laws
– 1st Law
» “ 靜者恆靜,動者恆成等速度運動”
– 2nd Law
» F = ma = mv/t
– 3rd Law
» 作用力與反作用力
Forces
– Gravity / Spring forces / Friction / Viscosity
– Torque
=rXF
– Equilibrium
3
Basic Concepts from Physics (2/2)
Momenta
– Linear momentum
– Angular momentum
– Moment of inertia
4
Particle Dynamics
Particles are objects with
– Mass
– Position
– Velocity
– Respond to forces
But no spatial extent (no size!)
– Point mass
Based on Newton Laws
– f = ma
..
– x=f/m
. .
– v = f / m, x = v
5
Basic Particle System
x
typedef struct {
v
float m; /* mass */ states
f
float *x; /* position */
m
float *v; /* velocity */
float *f; /* force accumulator */
} *Particle;
typedef struct {
Particle *p /* array of pointers to particles */
int n; /* number of particles */
float t; /* simulation clock */
} *ParticleSystem;
x x x x x
Particle n time v v v v … v
f f f f f
m m m m m
6
/* gather states from the particles */
void ParticleGetState(ParticleSystem p, float *dst)
{
int i;
for (i = 0; i < p->n; i++) {
*(dst++) = p->p[i]->x[0];
*(dst++) = p->p[i]->x[1];
*(dst++) = p->p[i]->x[2];
*(dst++) = p->p[i]->v[0];
*(dst++) = p->p[i]->v[1];
*(dst++) = p->p[i]->v[2];
}
}
7
/* scatter states into the particles */
void ParticleSetState(ParticleSystem p, float *src)
{
int i;
for (i = 0; i < p->n; i++) {
p->p[i]->x[0] = *(src++);
p->p[i]->x[1] = *(src++);
p->p[i]->x[2] = *(src++);
p->p[i]->v[0] = *(src++);
p->p[i]->v[1] = *(src++);
p->p[i]->v[2] = *(src++);
}
}
8
/* calculate derivative, place in dst */
void ParticleDerivative(ParticleSystem p, float *dst)
{
int i;
ClearForce(p);
ComputeForce(p);
9
/* Euler Solver */
void EulerStep(ParticleSystem p, float DeltaT)
{
ParticleDeriv(p, temp1);
ScaleVector(temp1, DeltaT);
ParticleGetState(p, temp2);
AddVector(temp1, temp2, temp2);
ParticleSetState(p, temp2);
p->t += DeltaT;
}
10
Rigid Body Dynamics
Mass of a Body
– Mass center
Force
– Linear momentum
– P(t) = M v(t)
– Velocity (v)
Torque
– Angular momentum
– L(t) = I (t)
– Local rotation ()
Inertia Tensor
Reference
– www-2.cs.cmu.edu/afs/cs/user/baraff/www/pbm 11
Flexible Body Dynamics (1/2)
Spring-mass model
– F=kx
– Not a stress-strain model
– Lack of Elasticity, Plasticity, & Viscous-Elasticity
– Can be unstable
12
Flexible Body Dynamics (2/2)
Finite element method
( 有限元素法 )
– Solver for ODE/PDE
– Boundary conditions
– Energy equation
– Stress-strain model
– Very complicated computing process
Conservation of energy
13
Advanced Topics in Game Physics
Fracture Mechanics ( 破壞力學模擬 )
Fluid Dynamics ( 流體力學 )
Car Dynamics ( 車輛動力學 )
Rag-doll Physics ( 人體物理模擬 )
14
Game FX
15
Introduction to Game FX
Improve the Visual & Sound Game Effects
Includes
– Combat FX
– Environment FX
– Character FX
– Scene FX
– Sound FX
FX Editor Needed
– General 3D animation tools can not do it
» Key-frame system is not working
» FX animation is always
Procedurally
Related to the previous frame
Small Work But Large Effect
16
FX Editing Tool
17
Game Particle Effects
18
Conquer Online
Combat FX
During the Combat
– Weapon motion blur
– Weapon effect
– Skill effect
After the Combat
– Damage effect
FX Editor
19
Combat FX Example
20
Motion Blur – Image Solution
Computer Animation :
– Image solution
– Blending rendered image sequence
» Render too many frames
» Divide the frames
» Average
» Done!
21
Motion Blur – Geometry Solution
In Games, Use Transparent Objects to Simulate the
Motion Blur
“False” Motion Blur
– Tracking the motion path of the object
– Connecting them as a triangular mesh
– Use time-dependent semi-transparency to simulate the
“blur”
– The path can be smoothed using Catmull-Rom spline
» Local stability of the curve
22
FX Uses Texture Animation
Almost All Game FXs Use this Trick
Geometry Object on which the Texture Animation
Playing
– Billboard
– 3D Plate
– Cylinder
– Sphere
– Revolving a cross section curve
Texture Sequence with Color-key
Semi-transparent Textures
– Alpha blending
» Source color added to background
Demo!!!! 23
Particle System for FXs in Combat
The FXs
– Fire / exposure / smoke / dust
Initial Value + Time dependency
Combined with Billboard FX
– Billboard to play the texture animation
– Particle system to calculate the motion path
Gravity is the major force used
Emitter pattern
– Single emitter
– Area emitter
– Emitter on vertices
Demo !!!
24
Environment FX
Weather
– Use particle system
» Rain
» Snow
» Wind
Fog
– Traditional fog
» From near to far
» Hardware standard feature
– Volume fog
» Layered fog
» Use vertex shader
Day & Night
25
Character FX
Fatality
– Case by case and need creative solutions
Rendering Effects on Skins
– Environment mapping
– Bump map
– Normal map
– Multiple texture map
Flexible body
– Flexible body dynamics
Fur
– Real-time fur rendering
…
26
Scene FX – Sky Box
28
Scene FX – Light Scattering
Atmospheric light scattering
Caused by dust, molecules, or water vapor
– These can cause light to be:
» Scattered into the line of sight (in-scattering)
» Scattered out of the line of sight (out-scattering)
» Absorbed altogether (absorption)
30
OGRE Particle System
OGRE Particle System Attributes
http://www.ogre3d.org/docs/manual/manual_32.html
31
Particle System Definition
Attributes (Partial)
Attribute Name Value Format Description
quota <max_particles> Maximum number of particles at one time in the
system (default 10).
material <name> Name of material used by all particles in the
system (default none).
particle_width <width> Width of particles in world coordinates (default
100).
particle_height <height> Height of particles in world coordinates (default
100).
cull_each <true> | <false> Cull particles individually (default false).
sorted <true> | <false> Sort particles by depth from camera (default
false).
billboard_type <point> | Billboard-renderer-specific attribute (default
<oriented_common> | point).
<oriented_self> | 32