Here’s a brief summary of the progress and scope of our voxel game engine.
Interest in putting together a game with voxel terrain motivated a number of prototypes in spring of 2011. These prototypes covered a few basic features we wanted to play with – unlimited distance in any direction with data streaming from a server, a full scripting interface, and some different approaches to rendering the voxels. In summer and fall, work began on the actual engine, and we’re nearing our first milestone.

One early prototype was a high-level algorithm for designing believable continents with biomes, rivers, lakes, and eventually fauna and civilization. The parameters for this generator could be designed in a node-editor based system for stringing together generation primitives.

For simplicity the engine currently only draws voxels as cubes, iconic for this genre. More advanced methods of hybrid cube and isosurface rendering are in development. One of the prototypes demonstrates this isosurface rendering of discrete terrain (in 2d) in a way that is compatible with certain materials rendering as cubes, and others rendering with varying density levels.

To better render a dynamic smoothed terrain, the terrain shader implements tri-planar texturing over multiple voxel faces. In the case where the voxels are rendered as cubes, this results in a high resolution texture being tiled across multiple faces, helping to break up repetition artifacts.

One of the biggest problems in voxel engines to date has been view distance. We have some ideas in mind to help give the impression of a massive view distance without needing to load (or generate!) terabytes of voxel data. They borrow from the standard LOD techniques of contemporary games as well as taking advantage of the nature of the data we’re dealing with. It wasn’t so much a prototype for this effect as just a side project, but over the summer a simple space flight simulator was written. It uses the same unlimited-distance mechanism as the voxel volume to let the player travel light-years, seeing procedurally generated stars and planets. These stars and planets are rendered with some fairly complex level-of-detail systems to prevent z-buffer fighting, etc., that we plan on using in this new engine to allow players to see distant mountains and structures.

This first milestone represents a stable version with limited features that we can use to set up a build system and stress test the most basic and crucial components of the engine: networking, player characters, and of course the voxel volume. Players should be able to run around and modify the terrain freely using a subset of the materials we plan on including in the game. The scripting interface is also going to be available for people interested in modding to start getting a feel for it. There may be future open testing releases as we implement more features and begin working on elements of gameplay.

At the moment, the networking is almost complete. The scripting interface is sufficiently finished to allow for development of multiplayer actors and simple non-voxel objects. The voxel renderer only supports block meshes, but it does so very efficiently. Once the final engine bits have been completed, we’re going to spend a little time making a presentable set of materials and textures, and a new worldgen algorithm that knows how to place them. And maybe, just maybe, by then we’ll have come up with a name.
The engine is written in C++, and builds as singleplayer, multiplayer client, and dedicated server. Our development focus is on Windows, but Mac and Linux support is soon to follow (especially for the server!) The client uses Ogre as the primary graphics library and irrKlang for audio.
Subscribe to this blog if you’d like to get updates about our progress, as well as be the first to hear about any releases. Thanks for the interest!