Fast Iteration for Level Design

With the fast development iteration in mind, I implemented a game level editor tool that supports real-time collaboration, in which several developers (game designers and artists) could participate in level design process collaboratively.

In a typical game development environment, a level design collaboration requires merging processes which are very complicated, time-consuming, or even impossible if conflict occurs. You’ve also seen similar merging problems many times in file-based collaboration systems such as Subversion.

However, our real-time collaboration system makes the level design process simple, fast, and intuitive. Just as in a co-op game playing mode, developers can work together, seeing others moving the trees, placing wood barrels along the fence, changing the color of the lights, and so on. All of these are in real-time with no merges. Furthermore, because the game client also supports the synchronization, we could test (play) the game levels in a real game client while designing very that level.

With this real-time collaboration system, our team could effectively achieve better quality and enhanced productivity at the same time, and I think that’s the fast development iteration as a result.

Algorithm Overview

This system consists of synchronization clients (level editors and game clients), a synchronization server which coordinates all kinds of things needed to make everything synchronized across the entire clients, and the automatic global entity synchronization algorithm at its heart.

An entity is the smallest unit of synchronizable objects and each entity has a set of synchronizable data items such as character’s position (vector3), prop’s orientation(quaternion), or light’s color and attenuation factors. And, because each data item is tagged with timing information, only the changed values of entities are synchronized over the network. As a simple optimization, a viewer’s location and direction were also considered to limit the maximum number of synchronizing entities for each clients.

Using this simple and generic algorithm, our real-time collaboration system was built in less than a month with lesser lines of hard-coding, and it was easily integrated with our light pre-pass renderer.