1 / 41

CSE 381 – Advanced Game Programming Terrain Management

CSE 381 – Advanced Game Programming Terrain Management. Think of it as a textured blanket. Terrain. Obviously a rendering challenge Also a collision detection challenge Requires a huge amount of data for outside game environments Usually pre-lit – what does this mean?

Download Presentation

CSE 381 – Advanced Game Programming Terrain Management

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSE 381 – Advanced Game ProgrammingTerrain Management

  2. Think of it as a textured blanket

  3. Terrain • Obviously a rendering challenge • Also a collision detection challenge • Requires a huge amount of data for outside game environments • Usually pre-lit – what does this mean? • Typically integrated with: • sky • water • sun

  4. Terrain Characteristics • Terrain characteristics: • fidelity • how realistic is it? • for model & textures • spread • degree to which areas of the terrain are unique • freedom • how much are the player’s movements restricted by the terrain? • Want real earth terrain data? • http://edcwww.cr.usgs.gov

  5. Terrain Modeling • Some game engines have terrain managers • with their own GUI terrain generation tools • with their own rendering optimizations • Terrain building as models • can also be positioned, rotated, etc. as one

  6. Terrain Cover • Texturing provides this • Typical textures: • grass, flowers, dirt, pebbles, rocks, moss, sand, stone, etc. • Most engines support terrain texture blending • What’s that? • good for transition areas at borders of differing terrain

  7. When making Terrain Textures • avoid making distinctive marks • Why? • avoid making textures with patterns • Why? • Remember, these will be repeated over an area

  8. How do you think terrain data is stored? • Height maps • What’s that? • a 2D image that stores topographical info for a square map region • different shades of gray represent different elevations • brightness of a pixel denotes its elevation

  9. More on height maps • Each pixel represents an area’s elevation • ex: 1 pixel is a square meter • black may be the base elevation • pure white may be the other extreme • values in between are scaled • Ex: 8 bits per pixel means 256 possible elevations

  10. Using Height Maps • Terrain generator reads a height map file and creates the appropriate geometry • How? • Each pixel represents a tile (square of terrain) • For each tile • a vertex is generated at appropriate elevation • two triangles are generated connecting new vertex to bordering vertices • Some generators will add more vertices • Why? • Interpolation (more on this later)

  11. Terrain Units • WU – world units • refers to measurement scale for a game world • basic WU is one inch • Example: • level tile is 10 X 10 units (meters or otherwise) • 100 tiles X 100 tiles • level is 1000 X 1000 • NOTE: each tile may have many triangles • again, depending on interpolation

  12. Water • Think of as its own level object • Has a position, scale, rotation • Typically specified using a single rectangle • can fit into non rectangular terrain contours • For camera out of water: • typically water drawn using multiple textures • one for shallows, one for deep • can be blended via depth gradient • effects then applied • E.g., specular highlights • For camera under water: • other effects like fog, viscosity, waves, etc.

  13. Terrain Rendering • What do we need to know? • how to store the data • how to load it • how to render it • how to detect collisions with it. Why? • Nothing should go below the terrain

  14. Height Maps Revisited • Height maps are images • When a level is loaded, how might we store terrain data such that it can be efficiently: • rendered • used in collision detection calculations

  15. 2 Terrain Management Options • Static Option - Load height map into a mesh (or meshes) and treat terrain as any other mesh • easy to implement • typically divided into clumps • Dynamic Option - Load height map data into data structure, each frame, use dynamically changing mesh based on location of frustum • that’s a bit trickier

  16. Clumps • What’s a clump? • a chunk of terrain • subset of a level’s full terrain • What’s the benefit of managing clumps? • more efficient rendering/management of terrain • Why? • problem reduction

  17. Clump Construction Example • Suppose we are loading a 256 x 256 height map • Construct terrain as 16 x 16 clumps • How many clumps is that? • 256 • How many vertices per height map pixels? • depends on interpolation (more on this in a moment)

  18. How do we use the clumps? • Each frame, select only the visible clumps for rendering • How do we do that? • frustum culling is one way • but there’s a simpler way • clumps are cells in the 2D grid • in what cell is the camera? • render that clump • in which direction is the look at vector? • render those clumps • know the max clump distance that can be viewed

  19. Dynamic Terrain Generation • Height map is a 2D grid • At start of level: • build a recyclable mesh to store dynamic terrain • Each frame: • determine where on the grid the camera is • fill dynamic terrain with visible portions of grid

  20. What’s the point of interpolation? • Rounding terrain • How? • add more vertices to the grid • Simple algorithm • add 2 between each pair of vertices • what height? • make them closer to nearest existing vertex than 1/3 of height difference. Why?

  21. Skies • Add ambiance • Add realism • Add value • Note: • Different genres use different approaches • rpg vs. fps • Inside or outside game?

  22. Approaches • Skyplanes • Skyboxes • Skydomes • Cloud Generation & rendering

  23. For all approaches • Render in sky space • Huh? • Render first, with depth buffer off • Use geometry that fits sky textures • minimize interpolation • this means sky geometry is much smaller than other objects

  24. Skyplanes • Simplest to model and texture • Does not completely enclose camera • Disadvantage: • End of plane is noticible • Doesn’t cover horizon • Should only be used when mountains or other objects fills gaps

  25. Simplest Skyplane Approach • Use 2 triangles • put them right over the camera • Ex: 1 y-unit above camera at all times • Move sky with camera • Map sky texture onto geometry • again, minimize interpolation • No minification or magnification • What determines this? How you: • size it • texture it • position it

  26. Alternative: curved plane • Shaped like a parachute • Considerations: • Resolution (number of vertex rows/columns) • Radius • Height of peak • Repetitions of texture

  27. Creating the Geometry • How can we create vertices that are: • evenly spaced • part of mesh centered over 0,0 • in x&z range -planeSize/2 through planeSize/2 • Plane size = √((2*radius)2/2) • Using Pythagorean theorem, in loop, calculate distance to determining y values

  28. Rendering Skyplanes • Disable: • lighting • fog • depth testing • To blend clouds with sky, enable OpenGL blending

  29. Sky Fading • Note that the sky fades on the horizon, it doesn’t just get cut off • How can we add this effect? • For skyplane, add alpha value to all vertices: • those nearest center (0, ?, 0) fully opaque, • gradually + and – from center more transparent • use a linear, or better yet, exponential function

  30. Clouds with Volume • How do we add 3Dish clouds? • Use Layers of them • same and different textures • blend them

  31. Skyboxes • Most common sky rendering technique • Fully encloses camera • Inexpensive • Again, enclose camera in small box • How does it work? • render distant scenery onto inside or cube

  32. Skybox Atlas

  33. Traditional Approach • Render ordinary textured cube • Align with the world axis • Centered around camera • Render it first • Disable necessary features as before • Size of box can be small • it should fit the textures • make sure it’s in the frustum

  34. Skybox Rendering Steps Clear the depth buffer Disable depth test Disable depth writes Disable fog and lighting Render the box Enable depth test and writes Enable lighting and fog Draw the rest of the scene

  35. Skybox Edges • Boxes have seams • We don’t want those to show up • Why would they? • mag/minification • may sample nearby pixels • border may be nearby • results in poor interpolation • Alternative, use texture coordinates that don’t start at edge, but one pixel off edge • or employ GL_CLAMP_TO_EDGE • ignores edge texels in interpolation

  36. Does the skybox move? • Not relative to the camera • Camera can rotate, of course • Skybox goes where ever the camera is • Assumption is skybox art is of things very far away

  37. Generating Skybox Art • Common to make a large, continuous texture • to wrap around sides, for example • Break it up for texturing • Good tools exist: • Skypaint by Gavin Bell • paint seamless, panoramic 360 deg. Images • Terragen by Planetside • generate sky boxes and terrain

  38. Skybox Layering • Can provide more beautiful experiences • Example: 3 layers • Outer layer for static background (e.g. stars) • Middle layer for dynamic stuff (e.g. clouds) • Inner layer for much closer stuff (e.g. mountains) • Middle layer may use texture animation • Means moving textures across a geometry • How? • Gradually adjusting texture coordinates

  39. Textures vs. Colors • Note that skies transition from horizon colors to sunset colors and make a smooth transition • Colored Vertex rendering can do this easily • more easily than texturing • Option, use colors for outer layer, textures for inner layers

  40. Skydomes • For even better sky rendering • Good for night-day transitions • Good for advanced effects • Uses one texture (for back layer) • Provides better terrain sky transitions

  41. Generating Vertices • Use spherical equations • Polar coordinates • calculate evenly spaced points on globe • For more on Skydomes and advanced sky rendering, see the end of Chapter 9

More Related