Particle system & Game Effect (FX)
Download
Report
Transcript Particle system & Game Effect (FX)
Game Physics
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 = mdv/dt
– 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
typedef struct {
float m;
/*
float *x;
/*
float *v;
/*
float *f;
/*
} *Particle;
mass */
position */
velocity */
force accumulator */
x
v
f
m
states
typedef struct {
Particle *p /* array of pointers to particles */
int n;
/* number of particles */
float t;
/* simulation clock */
} *ParticleSystem;
Particle n time
x
v
f
m
x
v
f
m
x
v
f
m
x
x
v … v
f
f
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);
for (i = 0;
*(dst++)
*(dst++)
*(dst++)
*(dst++)
*(dst++)
*(dst++)
}
i
=
=
=
=
=
=
< p->n; i++) {
p->p[i]->v[0];
p->p[i]->v[1];
p->p[i]->v[2];
p->p[i]->f[0]/p->p[i]->m;
p->p[i]->f[1]/p->p[i]->m;
p->p[i]->f[2]/p->p[i]->m;
}
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 w(t)
– Local rotation (w)
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
Use a very large box or dome-like model to surround
the whole game scene
Use textures on the box or dome as the backdrop
Use multiple textures and texture coordinates
animation to simulate the moving of the clouds
27
Scene FX – Len’s Flare
Runtime calculate the position and orientation of
the camera with the sun
Put textures to simulate the len’s flare
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)
Skylight and sun light
Can be Implemented by vertex shader
29
Scene FX – Light Scattering Examples
Without scattering
With scattering
30
OGRE Particle System
OGRE Particle System Attributes
http://www.ogre3d.org/docs/manual/manual_32.html
OGRE Particle Editor
http://www.game-cat.com/ogre/pe/ParticleEditor_Beta.zip
OGRE Particle Editor Tutorial
http://www.game-cat.com/ogre/pe/docs/PETutorial.htm
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
…