Thank you Richard. If I find some more ways to improvise for optimization, then I'll tell you definitely
would love to see the substance graph.
The visual shader system will be great for modular asset pack makers. You see some incredibly high quality modular asset packs on the Unreal store, whilst the ones for Unity are so-so, which I think is down to the ease of creating shaders on Unreal vs Unity. Alternatively you have to make your shaders in something like Uber Shader system which immediately splits your customer base.
We talked to Andrzej Koloska from Fireline Games, the studio behind Intensive Exposure. Intensive Exposure, which is currently on Greenlight, was created during AMJam 2016 and won both first prize and people’s choice award. Developer discussed using voxels, UE4, animation and meeting a tight deadline.
We’re a group of 4 gamedev professionals from Poland. We’ve worked on many games before (e.g. Hellraid: The Escape, Dying Light, The Witcher 2, Real Boxing and a lot more). In total we have around 30 years of experience in game development between us.
In our spare time we’ve been taking part in game jams (weekend contests where you have to create a game in under 48 hours). That’s how Intensive Exposure was initially conceived – during a game jam organized by a Polish game development studio Artifex Mundi. Our game won the contest and also received the People’s Choice award. That was a sign for us that people liked the idea and we decided to further develop the game and hopefully release it on Steam.
Intensive Exposure – main character – face concept
In our day jobs as game developers, we usually work on serious games that aim to have an impact on people, maybe to cause a moment of reflection. But from time to time we want to do something totally different and game jams are a great place to do that – create something silly, just for fun.
In this case the theme of the competition was “No one knows who I am”. There are different ways to interpret it, but one particular idea got stuck in our heads pretty quickly – it was this meme:
So our colleague came up with the idea: “Guys, maybe we create a game about an exhibitionist hiding in a corporation full of women”. It sounded ridiculous at first, but then we remembered the flash game Sven Bomwollen and we recognized that this kind of gameplay could be fun.
So we started working on a prototype and it showed gameplay potential really fast. We knew the theme would be controversial, so we tried to make all aspects of the game as light-hearted and goofy as possible, to make sure it would be received as an innocent joke. Cheerful music, bright colors and voxel-based graphics all contributed to that goal.
We had been working with voxels long before creating Intensive Exposure. We were excited both for the unique art style and the gameplay possibilities, like making every object in the game fully destructible. We developed in-house tools to support voxels in UE4 by importing .vox files directly from MagicaVoxel and it worked amazingly well when paired with Unreal’s PBR (Physically-Based Shading) capabilities. The graphics in Intensive Exposure are just a taste of what can be achieved by combining UE4 and voxels.
And last but not least – 3d pixel art just looks great. It has its own unique style and we love it!
Rafal Rybak – our graphics artist – voxel fan art
Intensive Exposure – characters
Intensive Exposure – level items
When we first tried it, we quickly found out that voxel models could be produced much faster than traditional meshes. Rafal, our team’s artist, was able to create all the characters, architecture and props for our initial level in a matter of hours. In another prototype we were able to build a whole city in less than a week.
The beautiful thing about voxels is that you can just open an editor and start creating. At its heart, it’s no different from playing with Lego or building a house in Minecraft – and millions of people already do that.
Unreal has been our engine of choice for years now. In our opinion it’s the most advanced engine out there, full of features that make your life as a developer much easier. Additionally, full source code access means that our programmers can modify and extend the engine to tailor it to our specific needs.
To help us create voxel-based games, we added custom voxel model support to the engine. This allows us to import .vox files from MagicaVoxel, adjust colors in the editor and even add effects like glow or reflections. Additionally, we have the possibility to remove any parts of the model in runtime, allowing us to simulate damage and large-scale destruction (to be used in future projects).
As mentioned above, the only external tool we use is MagicaVoxel – a free voxel model editor. We recommend everyone to try it, it’s very easy to use.
Peculiarities of Working with Voxels
There are a couple things we’ve learned so far by using voxels:
- Build modular models. This will help you create more variations of objects in your level. For example – if you’re building a house, consider modeling each floor or even each wall separately and then compositing them into a various buildings back in the game editor.
- Try sticking to big single-color surfaces. Using intricate color patterns will result in much more complicated meshes and will cost you precious performance (example below).
- Be sure to use dynamic lighting. We found that lightmaps for static lighting were being generated with error, due to the complexity of voxel meshes. If you need to use static lighting, you would need to import .obj files to Maya and create UVs by yourself. But then you wouldn’t be able to use native voxel support like ours and just settle for static meshes.In our case, we use only one Movable Sky Light that emits lighting from a custom cubemap. The rest is done in postprocessing (mostly using Ambient Occlusion and lookup tables).
In Intensive Exposure, we aimed to have strong variety in the mood of each level. We modified the parameters and colors of the lighting to make them all feel unique and evoke different emotions.
When working with voxels, you should also think about the camera positioning – voxels look better from some angles than from others. The easiest way is to have a fixed-angle isometric camera like we do. That lets you use simple occlusion culling to greatly improve performance. We have 80 draw calls on a scene with 100k triangles – this game could potentially run on mobile platforms! The only thing we wish we had available is forward rendering on PC – we don’t need deffered rendering here. We hope it’s added some day in UE4 as an option.
Animation is one of the toughest problems to solve when using voxels. The traditional approach of skeletal animation just doesn’t work here – voxel models exported from MagicaVoxel aren’t suited for skinning. Our tip is to create characters (or other things that need to animate) directly in Maya.
However in Intensive Exposure we approached the problem differently. We didn’t need realistic animations – in fact we were aiming for the opposite. We chose stop-motion animation, because it felt more in sync with the blocky look of the game. There were two parts to it – flipbook animations (where the model of a character is sequentially replaced with different poses, creating an illusion of movement) and simple procedural animation (like the bobbing effect during movement).
We ended up not using Unreal’s animation system a lot,because of the specifics of our game. But that’s the power of UE4 – you can seamlessly integrate your own custom systems into the engine whenever you want to.
Meeting a Tight Deadline
This is a testament to Unreal’s amazing workflow. We have 3 programmers and an artist in the team and we all have been working in Unreal Engine 4 since it was released. To be honest, we believe that we could have done it even faster if we could work on it full-time. As it stands, we all have day jobs and could only devote evenings and weekends to Intensive Exposure.
We have worked out a kind of workflow that works well for us – implement game systems in C++ and then configure them in Blueprints (Unreal’s visual scripting system). This gives us the best of both worlds. We also split every map into several sublevels to be able to work on them simultaneously.
The same goes for gameplay classes. For instance, the player’s logic is split into three classes – the base one in C++ and two others in Blueprints, one for gameplay and one for art/animations. Thanks to that setup, we never step on each others’ toes and everyone can work at full efficiency.
Other than that, we have one rule that has helped us many times in the past: “doing is better than talking”. What it means in this case is that it’s often more useful to create a prototype of a game mechanic than spend the same amount of time just talking about it.