Dual Universe is what we call a Continuous Single-Shard universe. What does it mean? Basically, it means that there is only one world, one reality, shared between every player, and where people are free to move and gather as they see fit. It is what you would naturally expect from a persistent virtual world if you could forget about all the technical challenges that usually come in the way to implement such an idea (which are all very good reasons as to why you haven’t seen it in a game yet). To better understand where we stand, and what we have in mind (and currently in testing) to solve the underlying issues, let’s have first a look at the more usual ways MMOs are dealing with virtual worlds’ sharding.
The core issue that every MMO game is facing is to handle the problem of having ‘n’ players moving around and seeing each other. In the most basic implementation, this leads to n position/orientation updates several times per second, each of which has to be broadcast to n other players watching each other. This is a total of n*n updates, and it grows very fast with even small values of n, like 100 or 1000. The result is a saturation of bandwidth, CPU and globally a practical limit around a few thousands individual players.
The simplest solution used by most MMOs is to limit the number of concurrent players to a hard ceiling. When the number of concurrent players exceeds this limit, they are either queued or another copy of the virtual reality is created where new players are redirected. This is called multi-sharding, and it has many variants. The simplest one divides the world into zones and players are free to move from one zone to the other. When a zone is full, a new instance of this zone is created, and inter-instance visibility is not possible. Players are never living in the same place at the same time. Examples of games following this pattern are D&D Online, LOTR, StarTrek Online, SWTOR or Neverwinter. World of Warcraft has an evolved version of this model : you have a global zone for everyone (a “continent”), and the instance duplication model is limited to selected areas called “dungeons”. Players enter these dungeons in limited batches and new versions of the dungeons are constantly spawned for new entrants. Each dungeon is attributed a set of servers that can handle many 5-players, 10-players or 25-players groups.
A more sophisticated approach is illustrated with Eve Online, where there is only one reality, shared by all players, but divided into small zones centered on solar systems. Each zone has a max number of players allowed in it (with a queue when there is an overload), but no instance is ever created. There are no parallel worlds around, and all players can experience the same reality, influence each other and basically do things that matter because it affects everyone. This is a huge difference in terms of gameplay compared to WoW-like traditional models, a shift from the “theme park” model to the “sandbox” model. One example of interaction that applies to all participants across the cluster is market exchanges. No matter in what zone you are, if you have enough skills to do so, you can see other people’s market orders and interact with them. While being a single shard universe, Eve is however not a continuous shard: each zone, or solar system, is limited to a few thousands players capable to physically interact with each other.
This simplified model would not be possible in Dual Universe, because we have very large planets, that will (hopefully!) host hundreds of thousands of players, and you cannot segment the planet into arbitrary zones. Think about a very large capital city, you could have a lot of people packed into a relatively small area, impossible to predict in advance. A planet therefore must be split into different servers, because the n*n limit is still there, but you cannot simply physically cluster these servers according to geographical boundaries (like solar systems in Eve).
The approach we have developed is based on the idea of subdividing zones according to their population density, in a recursive way. If only 5 people are roaming the surface of a remote lonely planet, it will most likely be handled by one single server. Come thousands of visitors spread on the surface and the initial area will automatically divide itself. Player clients are dynamically reallocated to the new servers in charge of their area. This process can repeat itself up to areas as small as 8 meters large. The interaction between different areas is handled with a complex cluster-wide synchronization mechanism, and an actor-based model that we might talk about in another post.
The other crucial part of this algorithm is that we have designed a method that is efficient to guarantee that the further a player is from another one, the less frequent the updates of position will be between them. When two players are close to each other, they will be updated very frequently and see each other with a great level of fluidity. However, when players are far away, there will be some delay in movement (because interpolation needs several updates to proceed), but they will still see each other in a visually convincing way.
The prototype is working, but we need to make much more testing of the current implementation to have hard results to show in terms of the max number of concurrent players. So far, it’s looking pretty good, and should allow us to provide a continuous, single-shard universe, where you are totally free to move around without instances or zone limits. If you have a few hundreds of thousands of friends, don’t hesitate to invite them to join our future beta testing! ;)