Game Math Case Studies
-
Upload
alex-fierascu -
Category
Documents
-
view
16 -
download
1
description
Transcript of Game Math Case Studies
-
Game Math Case Studies
Eric Lengyel, PhDTerathon Software
-
Content of this Talk
Real-world problems from game dev
Small problems, that is, and easy to state
Actual solutions used in shipping games
Strategies for finding elegant solutions
-
Occlusion boxes
Plain boxes put in world as occluders
Extrude away from camera to form occluded
rendered
How to do this most efficiently?
-
Camera
Occluder
-
Occlusion boxes
Could classify box faces as front/backand find silhouette edges
Similar to stencil shadow technique
A better solution accounts for smallsolution space
-
Occlusion boxes
There are exactly 26 possible silhouettes
Three possible states for camera position on three different axes
position < box min
position > box max
box max
Inside box excluded
-
maxx xminx x
min maxx x x
min maxy y y
miny y
maxy y
condition code
x > xmax 0x01
x < xmin 0x02
y > ymax 0x04
y < ymin 0x08
z > zmax 0x10
z < zmin 0x20
-
Finite classifications
Marching Cubes, fixed polarity(256 cases, 18 classes)
Transvoxel Algorithm(512 cases , 73 classes)
http://www.terathon.com/voxels/ -
Occlusion boxes
Calculate camera position state and usetable to get silhouette
Always a closed convex polygon withexactly 4 or 6 vertices and edges
-
Occlusion boxes
0
1
23
45
6 7
x
yz
// Upper 3 bits = vertex count, lower 5 bits = polygon index
const unsigned_int8 occlusionPolygonIndex [43] =
{
0x00 , 0x80, 0x81, 0x00, 0x82, 0xC9, 0xC8, 0x00, 0x83, 0xC7, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00 ,
0x84 , 0xCF, 0xCE, 0x00, 0xD1, 0xD9, 0xD8, 0x00, 0xD0, 0xD7, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00,
0x85 , 0xCB, 0xCA, 0x00, 0xCD, 0xD5, 0xD4, 0x00, 0xCC, 0xD3, 0xD2
};
// All 26 polygons with vertex indexes from diagram on left
const unsigned_int8 occlusionVertexIndex [26][6] =
{
{ 1, 3, 7, 5},
{ 2, 0, 4, 6},
{ 3, 2, 6, 7},
{ 0, 1, 5, 4},
{ 4, 5, 7, 6},
{ 1, 0, 2, 3},
{ 2, 0, 1, 5, 4, 6},
{ 0, 1, 3, 7, 5, 4},
{ 3, 2, 0, 4, 6, 7},
{ 1, 3, 2, 6, 7, 5},
{ 1, 0, 4, 6, 2, 3},
{ 5, 1, 0, 2, 3, 7},
{ 4, 0, 2, 3, 1, 5},
{ 0, 2, 6, 7, 3, 1},
{ 0, 4, 5, 7, 6, 2},
{ 4, 5, 1, 3, 7, 6},
{ 1, 5, 7, 6, 4, 0},
{ 5, 7, 3, 2, 6, 4},
{ 3, 1, 5, 4, 6, 2},
{ 2, 3, 7, 5, 4, 0},
{1 , 0, 4, 6, 7, 3},
{ 0, 2, 6, 7, 5, 1},
{ 7, 6, 2, 0, 1, 5},
{ 6, 4, 0, 1, 3, 7},
{ 5, 7, 3, 2, 0, 4},
{ 4, 5, 1, 3, 2, 6}
};
-
Occlusion boxes
Any silhouette edge that is off screen can be eliminated to make occlusion region larger
Gives occluder infinite extent in that direction
Allows more objects to be occluded because they must be completely inside extruded silhouette to be hidden
-
Occlusion boxes
Silhouette edge is culled if both vertices on negative side of some frustum plane
And extruded plane normal and frustum plane normal have positive dot product
-
Camera
Occluder
-
Occlusion boxes
Strategy:
Look for ways to classify solutions
-
Oblique near plane trick
Sometimes need a clipping planefor a flat surface in scene
For example, water or mirror
Prevent submerged objects fromappearing in reflection
-
Ordinary frustum Oblique near plane
-
Oblique near plane trick
Hardware clipping plane?
May not even be supported
Requires shader modification
Could be slower
-
Oblique near plane trick
Extra clipping plane almostalways redundant withnear plane
-
Oblique near plane trick
Possible to modify projection matrix
Move near plane to arbitrary location
No extra clipping plane, no redundancy
-
Oblique near plane trick
In normalized device coordinates (NDC),near plane has coordinates (0,0,1,1)
-
Oblique near plane trick
Planes (row antivectors ) are transformed from NDC to camera space by right multiplication by the projection matrix
So the plane (0, 0, 1, 1) becomesM 3 + M 4, where M i is the i- th row of the projection matrix
-
Oblique near plane trick
M 4 thatperspective correction still works right
Let C = ( Cx, Cy, Cz, Cw) be the camera -space plane that we want to clip against
Assume Cw < 0, camera on negative side
We must have C = M 3
-
Oblique near plane trick
M 3 = C M 4 = ( Cx, Cy, Cz + 1, Cw)
This matrix maps points on the plane Cto the plane z in NDC
0 0 0
0 0 0
1
0 0 1 0
x y z w
e
e a
C C C CM
-
Oblique near plane trick
But what happens to the far plane?
F = M 4 M 3 = 2 M 4 C
Near plane and (negative) far plane differonly in the z coordinate
Thus, they must coincide where theyintersect the z = 0 plane
-
Oblique near plane trick
-
Oblique near plane trick
Far plane is a complete mess
Depths in NDC no longer represent distance from camera plane, but correspond to some skewed direction between near and far planes
We can minimize the effect,bad
-
Oblique near plane trick
We still have a free parameter:the clipping plane C can be scaled
Scaling C has the effect of changing the orientation of the far plane F
We want to make the new view frustum assmall as possible while still including the conventional view frustum
-
Oblique near plane trick
Let F = 2 M 4 aC
Choose the point Q which lies furthest opposite the near plane in NDC :
Solve for a such that Q lies in plane F:
1 sgn ,sgn ,1,1x yC CQ M
4a
M Q
C Q
-
Oblique near plane trick
planebecomes optimal
-
Oblique near plane trick
Works for any perspective projection matrix
Even with infinite far depth
More analysis available Oblique Depth Projection and View Frustum Clippingof Game Development, Vol. 1, No. 2.
http://www.terathon.com/lengyel/Lengyel-Oblique.pdf -
Oblique near plane trick
Strategy:
Get the big picture
-
Fog bank occlusion
Consider fog bank bounded by plane
Linear density gradient with increasing depth
Perpendicular to plane
Zero density at plane