Skip to main content

Open World Rendering

·433 words·3 mins
Real-Time Rendering Opengl Webgpu
Adrian Has A Blog
Author
Adrian Has A Blog
Table of Contents

Open World

The term Open World is quite vague and can mean any large world that is traversable by the player. For the sake of this article we specifically focus on large 3D open worlds that allow for seamless traversal without any loading screens that are usually characterized by a wide render distance. According to Guinness world records the first seamless open world game was Jak and Daxter: The Precursor Legacy.

In this article we will look at the different challenges that an open world rendering engine has to deal with and how different game engines tackle these challenges. Apart from some basic understanding of computer graphics no additional knowledge is required to follow this article.

World partition
#

Uniform Grids
#

Hierarchical Grids
#

Tile Streaming
#

LOD Techniques
#

Discrete LOD (+ Impostor)
#

Virtualized Geometry
#

HLOD
#

Visibility Tests
#

Frustum Culling
#

Distance and Size Culling
#

Occlusion Culling
#

Terrain Rendering
#

Terrain LOD
#

Texturing large Terrains
#

Procedural Generation
#

Advanced Techniques
#

This last section covers a random collection of techniques I stumbled upon that deal with more specialized problems. These problems might be hardware or framework dependent. So feel free too skip this section if you just want to get a general understanding of open world rendering architecture.

Dealing with large distances
#

Worlds in modern games can span across multiple kilometers. This can become an issue due to the 32-bit floating point precision.

A common issue in computer graphics is the so called Z-fighting. Due to the non-linear scaling of depth values on the gpu we have more precision for objects close to the camera while objects far away from the camera might be assigned the same depth due to the imprecision of floating point value. The result is flickering pixels at far distances as the result is non deterministic.

To get around this problem, the Youtuber James Lambert got around this issue in his Nintendo 64 game by drawing the world in two passes. In the first render pass he draws the distant landscape by scaling it down by some factor to have more precision for distant geometry. In the second render pass he renders the close landscape with normal scaling.

Recap
#