Using Game Engine Art Tools to Improve Run-Time Streaming in Online Worlds

If you find this article contains errors or problems rendering it unreadable (missing images or files, mangled code, improper text formatting, etc) please contact the editor so corrections can be made. Thank you for helping us improve this resource

This article is a version of a technical presentation that was given by Danie Conradie, the CEO of Trinigy's
North American office, at the Austin Game Developer's Conference. To be clear, this was not a sponsored session, but a technical talk.

Online and MMO games have very specific requirements when it comes to world design. Because multiple players need to interact in the same environment, this requires large environments instead of
designing distinct game "levels". Supporting such large environments introduces many new technical and design challenges for run-time technology in game engines.

Screenshot of Arcania using the Vision Engine

A standard method for handling this challenge is loading all of the assets at start-up. But this does not scale to larger game worlds because of issues like loading times, memory footprint and the
need for cooperative editing.

This article will cover ways to get around this challenge by using the art tools in your game engine.

Improving Streaming with Art Tools

The first place to look for improvements in run-time streaming is your game engine’s art tool. Here are five requirements that can vastly improve how art tools stream data for large world
environments:

Cooperative Editing – Art tools should allow for cooperative editing so that multiple people can work on the same world at the same time. To avoid conflicts, your team can store each
scene as multi-layered files. These layers can be locked and edited independently, allowing different people to work on the same scene at the same time and synchronize the files with network shares
or revision control tools.

Get Rid of Monolithic Files – The second art tool requirement is to make the world data stream-able. This means no monolithic files. Large files should be broken up into separate
files for easier editing and streaming. This will also make it possible to load or unload specific parts of the world faster.

Recycle Meshes - The art tools must also support the re-use of mesh instances. Re-using meshes between object instances reduces your memory overhead and the amount of data you need to
stream. Game engines such as the Vision Engine have modified its exporters to export large scenes as separate meshes and detect shared instances.

vForge - the Vision Engine’s terrain editor

Resource Management – Tools need to be able to determine all of the resources needed by a scene. In this example below, the scene depends on a mesh. This mesh in turn depends on
shaders and textures.

Resource management in the Vision Engine

Some game engines have a built-in resource management system that can see and report on dependencies. With these resource management tools, it’s possible to calculate and store all the
resource dependencies of the world when baking the data so that you know exactly which resources need to be loaded and which order to load them in. Without this information, there is no way of
knowing that a mesh needs a specific shader texture before the mesh is loaded.

Data Grouping - The fifth tool requirement is grouping data so that it is suitable for editing, baking and streaming. Some game engines (e.g. the HeroEngine, BigWorld and the Vision Engine)
automatically split the terrain into a 2D grid of sectors. Each terrain sector is a data group that’s more manageable to edit, bake and stream.

The whole terrain can require a few 100MB of memory. To improve streaming, you should only keep the relevant sectors in memory and use lower detail approximation geometry for distant sectors. In
addition, your game engine editor should support real-time terrain editing and painting. It should have cooperative editing with automatically locking of sectors. And, it should ensure continuities
when editing the border between sectors.

Object instances (like meshes and entities) can be grouped spatially into zones and layers by level designers. A good example of a zone is a village or a building. In the example below, each zone
generates a separate scene file that can be streamed in as the player approaches.

Example of zone organization

This allows you to spawn or destroy groups of related objects. If the player is within the Loaded Distance then the game engine will force all resources to be loaded. The Cache In area is where
the zone starts loading its resources in the background. If the player leaves the Cache Out, the zone will be unloaded by the game.

Example of zone loading at run-time

These five requirements will greatly improve the speed at which data is streamed as players venture through your immense online world.