[FE Blog] Streaming Worlds

By AdamThompson 7y ago

A streamed world is a game world where only nearby world data is sent to players. A completely streamed world would stream everything to the player including terrain, environment, objects, and other players. First Earth is this way, as are a number of other indie games, such as Minecraft. Most online games are not.

A little bit of history


Streamed worlds have a long history, technically starting with the first online RPG in 1978, text-based MUD1 by Roy Trubshaw and Richard Bartle:
Player sends: *n
Game responds: Path. You are standing on a path which leads off a road to the north, to a cottage south of you. To the west and east are separate gardens.
Ultima Online was released in 1997. UO was not fully streamed; the world was made up of 25 million+ tiles contained on the original retail install disc and subsequent patches. But tiles could be changed on the game server, and those changes were streamed to players based on proximity. Objects, including items and houses, could be dropped anywhere and were also streamed, though their graphics were not.

Minecraft was released by Notch in 2009, the multiplayer version being completely streamed.

Over the years, many other MUDs and graphical games have used streaming, though they seem to be a minority in the last decade.

What streaming is good for

  • Vast worlds. A server-side game world of terabytes of data can be played by downloading just a few megabytes.
  • Dynamic worlds. Anything that's streamed is simply re-sent upon changing, perfect for changing terrain, newly-created objects, character clothing, and much more.
  • Distribution over the internet. If a game's resources can be streamed, players don't have to wait for gigabytes of downloads. World of Warcraft was guilty of those huge downloads, but recently they developed
    ">an elegant sort-of-streaming that allows players to play while assets are being downloaded.
  • Updates. The game world can be updated at any time without patching the client in most cases.
Streaming is more complex to develop, and is limited by players' connections. More detailed graphics require even more bandwidth. If a player can't load world data fast enough, the player will have to pause and wait for the world to load.  That can be game-breaking for some designs.

How streaming is done

All types of game world data can be stored on a server computer. The main types of world data are:
  • Graphics such as skins, textures, and images.
  • Shapes, like models, objects, or geometry.
  • Terrain, often treated separately from graphics and shapes.
  • Properties like position, dimensions, etc.
  • Player information including things like actions and typed messages.
  • Events like weather, time passing, server state, and external resources.
Once stored, this data can be retrieved based on the player's in-game location, then serialized and sent to the player's game client.
Serialization is the process of turning an object in memory into a stream of bytes so you can do stuff like store it on disk or send it over the network.
Deserialization is the reverse process: turning a stream of bytes into an object in memory.
[source]
One of the the most impressive features of the Unity3D engine is that it can receive game-engine resources, like graphics and models, over the web as "Asset Bundles", without any need for programming serialization.

The player's game client receives the data and applies it to the local world simulation. A game should load the world while it's outside of the player's range of vision, so that it doesn't appear while it's loading. New objects are added visually, new graphics are updated, positions of players and objects are updated, terrain is formed, and events happen.

Playing in a streamed world should be a seamless experience of being in a real world.

Login or Register to reply.