Techniques for Improving Large World and Terrain Streaming

  • Slides: 46
Download presentation

Techniques for Improving Large World and Terrain Streaming Danie Conradie Trinigy Inc.

Techniques for Improving Large World and Terrain Streaming Danie Conradie Trinigy Inc.

Overview Online and MMO games have very specific requirements > Large shared environments for

Overview Online and MMO games have very specific requirements > Large shared environments for players to interact in instead of distinct game “levels” > Introduces many new technical and design challenges >

Challenges > Naïve approach of loading all the game resources does not scale to

Challenges > Naïve approach of loading all the game resources does not scale to large worlds: Too long loading times > Too large memory footprint > Co-operative editing required >

Goal Don’t load all the data > Dynamically load and unload data as needed

Goal Don’t load all the data > Dynamically load and unload data as needed > Maintain the minimum required data set during runtime >

Basic Streaming

Basic Streaming

Basic Streaming > Keep all the object instances in memory > > Instances don’t

Basic Streaming > Keep all the object instances in memory > > Instances don’t need a lot of memory (Position, rotation, scale, state, …) Stream required resources in/out > Resource data (meshes, textures, etc. ) requires significantly more

Basic Streaming Load resources in the region around the character > Unload resources that

Basic Streaming Load resources in the region around the character > Unload resources that are not visible anymore >

Basic Streaming > Problems: Need to keep all objects in memory > Little control

Basic Streaming > Problems: Need to keep all objects in memory > Little control over streaming behavior > Irregular and unpredictable streaming > Difficult to schedule without resource dependencies >

Requirements for Streaming How can we improve on this? > What do we need

Requirements for Streaming How can we improve on this? > What do we need from the art tools? > What do we need from the engine run-time? > How should we prepare (bake) the data? >

Pipeline Art Tools Setup data for streaming Bake Engine Stream optimized data

Pipeline Art Tools Setup data for streaming Bake Engine Stream optimized data

Tool requirements for Streaming

Tool requirements for Streaming

Tool requirements for Streaming Cooperative editing > Stream-able world data > Resource dependencies >

Tool requirements for Streaming Cooperative editing > Stream-able world data > Resource dependencies > Grouping >

Tool requirements for Streaming > Cooperative editing Multiple people should be able to edit

Tool requirements for Streaming > Cooperative editing Multiple people should be able to edit the world together > Need to solve/prevent editing conflicts > Store a scene as multiple layer files > Layers can be locked and edited independently by different people > Synchronization with revision control >

Tool requirements for Streaming > Stream-able world data No monolithic world files > Break

Tool requirements for Streaming > Stream-able world data No monolithic world files > Break large files up into separate files for editing and streaming > Art tools must promote and enable the reuse of mesh instances >

Tool requirements for Streaming > Resource dependencies > Calculate and store all the resource

Tool requirements for Streaming > Resource dependencies > Calculate and store all the resource dependencies in the world Scene Texture Mesh Shader Texture

Tool requirements for Streaming Grouping > Gives us more control over how data is:

Tool requirements for Streaming Grouping > Gives us more control over how data is: > Edited > Baked > Streamed >

Tool requirements for Streaming > Terrain Sectors Automatic grouping as a 2 D grid

Tool requirements for Streaming > Terrain Sectors Automatic grouping as a 2 D grid > Sectors give us manageable data chunks to edit, bake and stream >

Tool requirements for Streaming > Terrain Sectors Terrain data can be 100 s of

Tool requirements for Streaming > Terrain Sectors Terrain data can be 100 s of MB > Only keep relevant sectors in memory > Stream in, swap out as required > Lower detail approximations for distant sectors >

Tool requirements for Streaming > Terrain Sectors Real-time editing and painting > Supports cooperative

Tool requirements for Streaming > Terrain Sectors Real-time editing and painting > Supports cooperative editing > Locking is per sector > Editor automatically locks and takes care of continuities >

Tool requirements for Streaming > Zones Object instances can be grouped spatially into zones

Tool requirements for Streaming > Zones Object instances can be grouped spatially into zones by level designers > Each zone generates a separate file that can be streamed in dynamically as the player approaches > Allows us to spawn/destroy groups of objects >

Tool requirements for Streaming

Tool requirements for Streaming

Tool requirements for Streaming > Data processing Procedural/raw data while editing > Baked data

Tool requirements for Streaming > Data processing Procedural/raw data while editing > Baked data for the runtime > Art Tools Engine Editor data Optimized data

Tool requirements for Streaming Data processing: Terrain Sector > One file per sector containing:

Tool requirements for Streaming Data processing: Terrain Sector > One file per sector containing: > Height map > Texture mixing maps > > Bake > n most significant textures Vegetation probability maps > Pre-compute object instances

Tool requirements for Streaming > Data processing: Terrain Sector > Level of Detail >

Tool requirements for Streaming > Data processing: Terrain Sector > Level of Detail > Pre-compute error metrics > World-space normal maps > Custom index lists

Tool requirements for Streaming > Data processing: Zones Build a list of resources used

Tool requirements for Streaming > Data processing: Zones Build a list of resources used by each zone at export time > The editor knows which resources (and dependencies) were used >

Tool requirements for Streaming > Data processing: Zones At runtime the resource list will

Tool requirements for Streaming > Data processing: Zones At runtime the resource list will be processed and loaded in order > Sort according to dependencies so loading doesn’t need to stall (e. g. a shader library is a prerequisite for loading a mesh) >

Tool requirements for Streaming

Tool requirements for Streaming

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle.

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle. mesh Wall 01. dds Window 01. dds House 01. mesh Window 02. dds Door 01. dds House 02. mesh Brick 01. dds Wood 01. dds

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle.

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle. mesh Wall 01. dds Window 01. dds House 01. mesh Window 02. dds Door 01. dds House 02. mesh Brick 01. dds Wood 01. dds

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle.

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle. mesh Wall 01. dds Window 01. dds House 01. mesh Window 02. dds Door 01. dds House 02. mesh Brick 01. dds Wood 01. dds

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle.

Tool requirements for Streaming Stone 01. dds Stone 02. dds Interior 01. dds Castle. mesh Wall 01. dds Window 01. dds House 01. mesh Window 02. dds Door 01. dds House 02. mesh Brick 01. dds Wood 01. dds

Tool requirements for Streaming Ref. Count Stone 01. dds Stone 02. dds Interior 01.

Tool requirements for Streaming Ref. Count Stone 01. dds Stone 02. dds Interior 01. dds 1 Wall 01. dds Window 01. dds 1 Window 02. dds Door 01. dds 2 Brick 01. dds Wood 01. dds 2 1 2 Castle. mesh 3 House 01. mesh 1 House 02. mesh 1

Tool requirements for Streaming Sort List Stone 01. dds Stone 02. dds Interior 01.

Tool requirements for Streaming Sort List Stone 01. dds Stone 02. dds Interior 01. dds 1 Wall 01. dds Window 01. dds 1 Window 02. dds Door 01. dds 2 Brick 01. dds Wood 01. dds 2 1 2 Castle. mesh 3 House 01. mesh 1 House 02. mesh 1

Tool requirements for Streaming Sort List Castle. mesh Window 01. dds Stone 02. dds

Tool requirements for Streaming Sort List Castle. mesh Window 01. dds Stone 02. dds Interior 01. dds Wall 01. dds 3 Window 02. dds Door 01. dds 2 Brick 01. dds Wood 01. dds 2 1 1 2 1 House 01. mesh 1 House 02. mesh 1

Run-time requirements for Streaming

Run-time requirements for Streaming

Run-time requirements for Streaming Resource Management System > Streaming Zones > Streaming Terrain Sectors

Run-time requirements for Streaming Resource Management System > Streaming Zones > Streaming Terrain Sectors >

Run-time requirements for Streaming > Resource Management System Dynamically loading/unloading > Reference counting >

Run-time requirements for Streaming > Resource Management System Dynamically loading/unloading > Reference counting > Memory usage information > Resource dependency information >

Run-time requirements for Streaming Time stamp to evaluate the last time a resource was

Run-time requirements for Streaming Time stamp to evaluate the last time a resource was used > Resources that have not been used for x seconds can be unloaded > Hard and soft memory limits > Distinct resource pools for textures, meshes etc. >

Run-time requirements for Streaming > <resource viewer screenshot>

Run-time requirements for Streaming > <resource viewer screenshot>

Run-time requirements for Streaming: Zones Streaming Zones > Pre-caching for all resources: > >

Run-time requirements for Streaming: Zones Streaming Zones > Pre-caching for all resources: > > Separate thread: > Load resource data from file > Optional data conversion/generation > Main thread: Create resource

Run-time requirements for Streaming: Zones > Create all object instances in the zone once

Run-time requirements for Streaming: Zones > Create all object instances in the zone once the resources have been loaded This is fast since the resources have already been loaded > Optionally spread over time (i. e. start with largest/most important objects) >

Run-time requirements for Streaming: Zones > What if the player teleports directly into a

Run-time requirements for Streaming: Zones > What if the player teleports directly into a zone with pending resources? > Option A: Show replacement resources (e. g. very low res textures) > Option B: Objects pop up as soon as relevant resources are available > Option C: Pause the game and load remaining resources from the main thread

Run-time requirements for Streaming: Terrain > Terrain sectors Distant sectors load and render using

Run-time requirements for Streaming: Terrain > Terrain sectors Distant sectors load and render using lower detail geometry and textures > Stream in high detail versions > Use world-space normal maps to avoid lighting artifacts/popping >

Video

Video

Questions?

Questions?