Game Math Case Studies

download Game Math Case Studies

If you can't read please download the document

description

Game Math Case Studies

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