With Streaming Join, Levels Load as You Play

September

11, 2013

by Yunpeng Zhu


Archive

Our Client Network Team is focused on getting players into games as quickly and efficiently as possible. Their top three goals: decrease join times, allow builders to make more complex places and creations, and offer support for all types of legacy hardware and mobile devices. The idea of real-time part streaming has been kicked around as a solution that is in keeping with our goals. Soon you will be given the option to enable streaming for your place or game via a new Studio setting. This brings about several ramifications we will discuss in this article, and ROBLOX Engineer Yunpeng Zhu will provide the details.

[do action=”youtube-iframe” videoid=”NAzGQ9Ks_IM”/]

Streaming In

Before you can play a ROBLOX game, your client must load the entire level. That means every single piece of data that makes a game must be loaded before your character spawns. With the new streaming system we’ve been developing, you can actually play games while they load.

This serves multiple purposes, but also lays the groundwork for some pretty exciting ideas. First off, this almost entirely removes any sort of load time on the player’s end, meaning if a builder or developer has the streaming feature enabled on his/her game, players can join it almost instantly. That’s because this method only needs to load your immediate surroundings before dropping you into the action, and loads the rest as you play the game, seamlessly.

Load times in ROBLOX wildly fluctuate because they’re based on so many factors–network condition, complexity of the place, and the capabilities of the machine running the game. Currently, if a place contains an abundance of parts (say, upward of 50,000), many people playing on mobile devices or dated hardware are likely to time out before being able to join. With streaming enabled, these highly complex places will become playable to a wider range of users utilizing a wider swatch of ROBLOX players, while also allowing builders to expand their creativity and make even greater and more complex games and creations.

Streaming Out

This solution not only streams parts in but also streams unnecessary parts of the game out. This allows us to dynamically adjust the amount of parts loaded in each level to scale with your hardware. So if you’re reaching the limitations of system memory in-game, the client will communicate to the server that parts need to stop coming in, and will begin dynamically removing parts that are less important (i.e., parts of the map that are extremely far from your position).

To understand how this works, imagine overlaying a grid of squares on top of your favorite map, and imagine your character is right smack in the center. This grid divides your favorite map into uniform, aligned cubes we call “regions”, and each of these cubes represents a container for any number of parts. With our previous method of loading the entire level before joining, this entire grid would be lit up, as you’ve loaded every part and then joined. With our streaming method, only the regions around you would be visible–and the circumference of that “vision circle” is sized depending on the hardware capabilities of the machine you’re running.

Try It Today 

If you’re a game developer, you can test this feature today on GameTest3. Simply acquire the test build of ROBLOX Studio by playing a game or editing your default place on GameTest3, then open an existing game and publish it. There is a “Streaming Enabled” checkbox under your Workspace properties, but for this test period everything will use the feature regardless. From a building and scripting perspective, this will slightly alter the way local scripts are written. In particular, be careful when referencing instances in your local scripts, as they may not have been streamed to the client yet. For more info on scripting check out this developer’s guide.

We will be implementing this in all of ROBLOX soon–for now, we are looking for your feedback. Upload your game to GameTest3 to see the difference streaming parts can make. We’re really eager to gather feedback across any medium–if you find that streaming works particularly well with your place or game (or have any other feedback), please be vocal about this new feature in our GameTest forums, on GameTest3, or right here on the blog.