top of page
Search
  • Writer's pictureJoshua Ellis

IsoEngine update 26/11/19 | Combining voxel and isometric technology.

Before we begin.

I just want to note that before diving into this post, I expect that this post will be a little longer than those I wish to write in the future, but if the format does well it could make a comeback. The reason for it's length is that there is a lot to cover and educate unfamiliar readers on about the technologies we are using and implementing. That being said, enjoy!


An introduction to our project.

So those familiar with ourselves will know that we've been developing what I've been referring to as the IsoEngine for a few months now. This is a project within the Unreal Engine 4, which is the foundation for a currently unnamed game that we plan to have ready by the start of the next academic year in September (when both myself and Joshua Matthews go back into our third year of our course). The game, we hope, will be a great addition to systematic survival games, where the world feels truly alive around you as you play. A true ecosystem.


The engine behind our game is shaping up to be an interesting hybrid between voxel based technology such as with Minecraft's terrain system, and isometric tile based game editors such as with Age of Empires 2's scenario editor. I'll provide a quick breakdown of what each technology entails and then how we've Incorporated design elements of both so far into what I think is a great sweet spot that offers a lot of creative freedom. I'll also give a brief overview of what things we hope to do in the future, to give you a sense of why we are doing what we're doing.


What is a voxel engine?

Traditionally, and this is true outside of games, a voxel engine is anything that makes use of cubes or data-points laid out in a 3D grid to represent some form of data. Now this is a very broad definition (one that even extends to fields such as medical science), but what does it mean in our case and in games in general? The most famous example of a voxel engine is Minecraft's terrain system, which is something I'm sure many of you are familiar with.

Minecraft's terrain, is all represented in the back-end by a massive grid like data structure that stores information about what occupies each terrain space in the "world". This is then read and represented visually whenever you go near a certain section of the world as the player character. We are attempting to create something similar, but want to move away slightly from the simple blocky aesthetic that Minecraft has established for itself (it's a great design choice, but we want our own unique style).


What is an isometric engine?

This leads me nicely on HOW we are differentiating our look and feel. One point of inspiration in games for me has always been games like age of empires and sim-city when it comes to delivering a customisable, visually simple yet pleasing design. The term isometric comes from the mathematical perspective of using certain angles and length ratios as shown here:

In gaming the term has been misused somewhat, as no longer is it common to actually use this side on, elevated perspective in all cases, but it is a convenient and quick way to make reference to a broad set of design choices that have been established over the years. Age of empires 1 and 2 are early games that made great use of the idea to give the illusion of 3D and depth to the screen while still only using 2D sprites. The remasters of these games REALLY make full use of the technologies layered on top of this base concept to deliver something that at first glance you wouldn't think is just a 2D game:

Under all of the glamour however, there are a few simple terrain shapes that make all of this possible, and this is what I was interested in the most for our game as it stores these tiles in a grid. A perfect match for what was our primitive voxel technology. GO GRIDS! Here is a good example I've found of some of the pieces that you can make from very little, and illustrates the types of shapes used in the early Age of Empires franchise:

These can be used to achieve this kind of result in 2D:

We wanted to take this simplistic terrain (shapes like those seen above) and blend it with 3D voxel technology, which has spawned the engine that is currently under development by ourselves. It's clear to us that isometric at this point is no longer a truly appropriate word to describe this engine once converted into the 3D realm, but it's simply the most relatable term for most game players and developers that we can think of to illustrate our concepts, and so if anyone has any alternate suggestions then by all means let us know!


What have we built so far?

So to show this combination in action I first need to explain a few things. Firstly, this is an early work in-progress and all of the things I'll be showing off are far from final, so please judge it as such. Secondly it's just a technology at this stage, and a growing one at that. No game-play features are present. With that out of the way lets look at what this combination of ideas actually results in.


Firstly we had to decide what shapes we actually wanted to use in our 3D implementation, so we came up with some rules. Each corner for each "block" can either be lowered or raised one block height high with no exceptions (we experimented with different heights and decided it was too complicated to create more variants on this rule-set). Here are some of the shapes that we have experimented with (most of which we are using now in engine):

It's a bit hard to make out what each block represents from this photo, but just imagine each block having one of these planes as it's top piece, and each corner either being at height 0 or 1.


We then needed to be able to store voxel data within our terrain editor, which I did a lot of work for on my earlier personal live-streams (they can be found on our YouTube channel). To test this I originally placed single voxels in the scene, which was obviously not a feasible design tool, and so this lead me to implementing brushes, which took a substantial amount of time to get to the point they are now. A brush for example is just a function that can tell the engine to place lots of a particular voxel in a shape or pattern, such as a sphere or cube.

(Looks awfully similar to a game I've already mentioned doesn't it?)


Finally it was time to implement materials and new models. Once complete, it was possible to place the previously shown shapes in the scene (with side pieces to make them actual blocks), but this wasn't the end goal! The end goal in fact was to get the engine to automatically "smooth out" the top and bottom surfaces of exposed voxels based on adjacent empty space, using the tiles I've shown previously.

The above result took a very long time to develop as a lot of time had to be spent thinking about exactly how this would work. The end result is something that I am very proud of! The last touch for ourselves was to create a temporary UI to tie all of the features and brush settings that had been developed so far, as well as tying it to a camera and keyboard input.

Now this is only temporary in terms of editor UI and controls, but it allows us internally to have faster testing and iteration cycles as we can both actually use what I developed on the back-end. I hope that this has shown a compelling case for combining two technology sets from a game standpoint too. I personally think the possibilities moving forward are very exciting now that we have a tool as a basis for emergent experiences.


What's next?

I hope you have enjoyed this brief overview of what we have created so far, and I hope you stick around for what comes next! The next stage (besides continued improvement on our editor) is to start incorporating props and eventually AI into the engine so that we can really start to see it shape up as a potential space for entire ecosystems. One of my key philosophies in designing the engine is that I want everything to be running in real time. No weird faking of AI routines or annoying loading issues (these are the two things that I dislike in Minecraft despite it being one of my favorite games).


I am determined to build every system in such a way that is performance oriented so that we have complete creative freedom in the game Matthews builds with my back-end tech. Performance improvements will actually feature heavily in next week's blog, as I talk more about what has been done so far, and what will hopefully be completed in the coming week, so stay tuned.


Conclusion.

So if you made it to the end, then thank you! I appreciate that we are a new team and will have to win the interest and trust of new readers and followers alike, so it means a lot to the both of us if there are people that find what we are doing interesting. If you have any suggestions for future development updates in terms of content or formatting, or even if you want to see more of a particular feature then let me know and I will do my best! Hope you all have a great week :)

40 views0 comments

Recent Posts

See All
Post: Blog2_Post
bottom of page