Proksim’s Net-Z 2.0by Crosbie Fitch (originally for Game Developer, June 2001, but not published) Net-Z represents an exciting step into the next generation of networking middleware. Before I go into Net-Z though, perhaps I should first define ‘previous generation’. I don’t mean complete game engines that have already had networking built into them, rather the networking layer APIs, e.g. WinSock, DirectPlay, RTime, etc. These provide an ‘easier to use’ networking API, i.e. ‘sockets’ but easier to use. Today such middleware has become a little more refined and polished, and ever more facilities have been added to help the developer monitor and compensate for the behaviour of the underlying network. Further goodies have also been added over the years to try and sweeten the bitter pill that is the task of incorporating multiplayer capabilities into a game. Typical sweeteners are multiplayer services such as lobby server, chat, score ladders, teams management, account and subscriptions management, digital rights management, the kitchen sink, etc. When it comes down to it though, a pig is still a pig no matter how you tart it up. Net-Z moves into the next generation by abandoning the low level notion that it’s just messages that are being sent between computers, and adopting as fundamental, the concept that objects are duplicated across computers. Net-Z takes care of the messages used to synchronise these duplicates, leaving you to worry about which objects these should be and how they need to be synchronised in more abstract terms. In other words Proksim has noted like few others in the games industry that there is a higher level objective to address in enabling multiplayer games, and this distributed systems approach is to obtain a consistent or synchronised game state (or simulation model). Naturally, there are many aspects of the synchronisation process which require knowledge specific to each application, and sensibly Net-Z has many features to address this. So with Net-Z you’re straight in at the level of thinking about how you’re going to architect your distributed system, whether it’s simple client/server, totally egalitarian peer to peer, or somewhere within the spectrum of those bounds. Thus Net-Z allows you to control how object state is arbitrated, whether tied to a specific machine or spread across all or a subset of machines. Given that there is some burden to hosting an arbitrated object, or ‘duplication master’ in Net-Z terminology, the policy by which this burden is shared is where Net-Z’s feature of load balancing comes into play. You can either use a built-in policy (‘equal object numbers’ or ‘equal weights of weighted objects’) or you can hook in your own if, say, some objects need a dynamic weighting. ScalabilityWhere Net-Z really demonstrates its next generation credentials is in the aspect of scalability, i.e. being able to cope with ever greater numbers of players and an ever increasing size of game world – without necessitating the use of expensive game servers and administrative nightmares. In its earlier releases, Net-Z duplicated the complete game state across all participating computers. This meant that although Net-Z based games were able to break through the bandwidth barrier of the client/server architecture, they were still ultimately bound by bandwidth limitations, i.e. although spreading arbitration across multiple computers greatly reduces the need for a dedicated high bandwidth game server, the entire game state still needs to be synchronised (and 56Kbps isn’t much). However, now Net-Z supports a feature called Duplication Spaces. This is an extremely useful and flexible concept that can be used to decompose a game world into relatively independent elements – termed ‘cells’ in Net-Z’s literature. This is better than imposing an ad hoc requirement as to how you segment your game world, e.g. into a cubic grid (regular or octree), portal connected rooms, or server tied territories. Whilst these ad hoc zoning mechanisms might still allow location transparency (zones could be mobile between computers for load balancing), they’d still exhibit a hardwired nature, i.e. a solution oriented for a specific class of application. A duplication space allows you (rather than the middleware vendor) to decide your own zoning policy because it is an associatively computed mechanism. It could be based on spatial co-ordinates; it could be based on which room an object is associated with; it could even be based on a dynamic spatial partitioning scheme. You can have different schemes for different purposes, e.g. duplication spaces for high-scores or other sensitive player stats, duplication spaces for static scenery, and duplication spaces for dynamic objects. Perhaps visibility based cells might be useful? What duplication spaces do is allow a much larger world to be simulated by breaking it down across clear or fuzzy boundaries so that players’ computers only need to synchronise state concerning the parts of the game world that are relevant to them. Cells do not have to be exclusive either, you can even have a multi-resolution duplication space with small cells intended for distributing across small computers, medium, and large super-cells for more capable computers. In Use |
|
Proprietary
Middleware |
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
Commercially
oriented Open Source |
||
|
|
||
|
Academic
and/or Open Source |
||
|
|
||
|
|
||
|
|
||
|
Military |
||
|
|
||
|
|
(MÄK) |
www.mak.com (a gamer-friendly HLA/DIS vendor) |
|
Non-Simulation
oriented |
If you’re comfortable with the distributed objects paradigm, particularly in terms of object location transparency, then Net-Z is ideal. If you still prefer to think in terms of passing messages between machines, or in terms of collecting player input and publishing client updates, then you can still use Net-Z, but you may not be fully exploiting its next generation features.
If you’re converting a single-player game, or are interested in going beyond the ceiling of players provided by your current engine, then get the evaluation version of Net-Z now – it might be your best hope of avoiding ‘multiplayer’ being the feature that makes you miss your release date.
Let’s not repeat the bad old days of the transition from the ease of home-brew 2.5D sprite engines to the not so easy home-brew software 3D rendering engines. There will be those who reckon they can knock up a good distributed objects engine over a couple of weekends, try and possibly succeed, and those who wisely use Net-Z in the interim, and perhaps still have a go at the weekend – if they’re that keen. As Dirty Harry says: “A man’s got to know his limitations”. Use Net-Z first. You never know, you might use it happily ever after, never stopping to think of doing a home-brew engine.
If you’re happy with your current engine (Quake, Unreal, etc.) and aren’t finding its scalability limits cramped, then stick with it. Net-Z is unlikely to bring greater efficiencies for this specific application class.
If you’re using a military or academic solution such as DIS you might find Net-Z more in tune with the Game developer ethos.
Net-Z represents a programmer friendly integration of a distributed objects system into a game – not too isolated, not too spaghetti-like, just enough hooks and involvement to reassure you. There’s still a big benefit if you understand what’s going on down below, but it’s nice to leave the mucky plumbing to someone else. Of course, if you want to get your hands dirty, Net-Z is flexible enough to allow you precise control and the ability to explore a wide range of options.
If I had to convert a game, or was comfortable with a single player game engine and had to use it to produce a multiplayer game before Christmas (the one after next), then I’d use Net-Z. If I had to write a game from scratch then it’s probably a matter of economics as to whether to go for a full engine with networking built in, or whether to hook up a cheap engine to NetZ. Of course, if I had two years going on five, then I’d write everything from scratch, but then I’m a bit mad and don’t know my limitations...
NB Net-Z v1.6 software used, but features of Net-Z v2.0 described.
NB The following info is now out of date. Please see www.quazal.com for latest contact info.
General inquiries: info@proksim.com
Sales information: sales@proksim.com
Technical questions: support@proksim.com
Proksim Software Inc.
433 Place Jacques-Cartier
Suite 200
Montréal, QC
H2Y 3B1
Tel: (514) 940-9090
Windows 95 / 98 / ME / NT 4.0 SP3 / 2000
WindowsCE / PocketPC (Compaq iPAQ, HP Jornada)
Linux (Intel Architecture (i386))
Sony PlayStation 2
Proksim is committed to making its technologies cross-platform, i.e. PC, console, wireless, etc.
It is also exploring arrangements with network providers able to provide enhanced network performance, e.g. quality of service guarantees, packet prioritisation, dedicated backbones, etc.
Further tools for simulating network and player behaviour, scalability and stress testing, are also in the pipeline.
1. Next generation middleware, in a more reliable, ‘version 2’ release
2. Supports a more scalable, higher level networking model
3. Still provides facilities for fine control and low level access
1. Not yet a battle hardened product (Zero-G Marines is one of the first games)
2. Scalability limitations still present, and as yet unmeasured
3. Proksim is not owned by Microsoft, Sony, Vivendi, et al (yet)
Three and a half stars (promising, but needs battle hardening)