The Umbra Voxel Engine is a voxel engine my friend (sondre99v) and I are developing. We started developing the engine March 1st, 2011, and we are currently in alpha-phase.
The engine may look a lot like other voxel engines such as Minecraft and Infiniminer at the moment, but this is mostly because we are currently “borrowing” textures from Minecraft. What will separate this engine from other voxel engine is its ability to generate a virtually infinite landscape in every direction. This includes, not only the X- and Z-axes (like many voxel engines to date), but also the Y-axis. This enables the player to build as high and dig as low as he or she could ever manage.
What we hope to achieve before the beta-phase is a fully-fledged game engine which stands out in the current ocean of voxel engines. The engine will have small loading times where the landscape will be generated on-the-fly without the player experiencing lag of any kind. As mentioned, the player will have the ability to build and travel virtually endlessly in any direction. By using a complicated landscape generator, the engine will render beautiful landscape ranging from vastly deep oceans to mountains higher than the eye can see. A little further out, we hope to add scripting through Lua. We also aim to make an adventure game with a lot of adventure-like features, often reflecting needs we have in real life. These are needs like eating and drinking to stay alive.
The development blog can be found here.
You can download the latest public release here:
Download latest version.
The engine is written in C#. Rendering and managing content is done with OpenGL, through OpenTK. Though, we have just migrated from the XNA library, so quite a few of our engine's features are not functioning properly at this time.
The world is divided into chunks, each consisting of 32x32x32 blocks. In simple terms, the engine only holds a fixed number of chunks in memory (about 3500 on high-end settings) while the rest is stored on the disk. When the player moves far enough, the chunks furthest away get stored on the disk, and unloaded. The empty “spots” in front of the player is filled in, either with new chunks from the landscape generator, or stored chunks from the disk.
There are some memory-improvements under developing, and were currently looking into a method of only holding vertex buffers, and not the entire data-array for the chunks more than 64 meters away from the player.
The landscape generator has been rewritten multiple times. One major problem has been ensuring the terrain matches from one chunk to the next. The past version used huge structures to store random numbers from which to generate terrain, but this has been slow, memory-inefficient and extremely cluttered. The current solution is much more elegant. It uses a hash-function that takes a position and a seed, and produces the same “random” number for each position/seed-combination.
Using this method, the landscape generator implements a few height map-functions such as bilinear and bicubic interpolation and perlin-noise, and merges them to make a finished height map.
We have just barely started scratching the surface on vegetation, so I won’t detail that just yet.
Rendering is done on chunk level. We have created a custom vertex format, tailored to store just what we need. Each vertex is currently 8 bytes, but we are probably going to add some more compression and get it down to 4 bytes.
The faces are only generated where they are needed. That means faces between two opaque blocks aren’t generated. This has also been an area subject to much discussion and change. The current, and hopefully final, solution is using octrees. Each chunk is divided into an octree based on the visibility of the blocks, opaque (stone, dirt…), translucent (glass, water, leaves…) and invisible (air). After this, each octree-leaf checks its perimeter. Each meeting-case is handled differently (i.e. opaque/opaque shouldn’t draw any faces; opaque/invisible should draw one face).
This section will be expanded.
The following are videos posted on our official YouTube channel, ranging from newest to oldest.
July 31st, 2011:
July 15th, 2011:
May 5th, 2011:
March 4th, 2011:
And here are a bunch of screenshots. You can always check out the newest screenshots from my public Google+ album.
The picture shows a shore leading to some hills:
A large ocean:
A forest near the sea:
A forest seen from a first person view:
A shore with some lagoon-like traits:
Another forest by the shore:
A large forest:
A cute island:
A picture illustrating what I meant by "vastly deep oceans":
A huge forest area:
A tower on a hilltop seen from the side:
The same tower seen from the bottom:
An old screenshot, one of the first buildings ever created in the Umbra Voxel Engine:
Lastly, an animated gif showing our landscape generator: