Building Open Space for Video Games

Marc Fabricius did a little overview of the way he produces space environments in Unreal.

Marc Fabricius did a little overview of the way he produces space environments in Unreal.

Introduction

Hello everyone! My name is Marc Fabricius, I’m from Copenhagen, Denmark and I’m a self-tought game developer. I’ve worked on Welcome to the Future since early 2015, and it all started with making 3D models for a futuristic game I had in mind, heavily inspired by my favorite TV series “Futurama”, using Cryengine as the game engine. I eventually switched game engine about a year later to Unreal Engine 4, which is probably the best decision I’ve ever made for the game. UE4 has, in my opinion, many benefits over Cryengine, one of which is their tool “Blueprints” which is a visual scripting tool. As i’m a very visual kind of person, Blueprints was a perfect fit for me, and with it I was able to make some of the game mechanics I imagined for the game. I’ve worked on other smaller games since, but I keep coming back Welcome to the Future.

1 of 3
1 of 4

Welcome to the Future

The game is actually not inspired by No Man’s Sky, I’ve gotten that question countless times though, which is understandable! So as said, the game is heavily inspired by the TV series “Futurama”. The game is about you being a delivery guy in the distant future, and your job is to grow your company by completing deliveries from various companies around the solar system. You’ll be able to explore large areas of each planet and major moons, some with sprawling futuristic cities and some with small colonies and outposts. So as you can hear, huge inspiration was taken from Futurama. As a big sci-fi nerd I love the whole futuristic setting, and the bright and colorful, cartoony visuals is just a great combination in my eyes. So that is definitely the main inspiration, but it was also important for me that the game looks “up to date” and uses some of the newest real-time rendering techniques, like dynamic lighting, real-time global illumination, etc. Low-poly is also a big part of the art style of Welcome to the Future, which is another decision I’m really happy I made, as it’s much more efficient, both with performance as well as development time, and also something that I think works great with the art style I’m going for with the game.

Background

Yes, a skybox was used here. I made a blueprint (script), that allows me to customize the skybox with different textures like gas clouds and stars, then I can control the density, brightness, opacity and more of those textures. The way i’ve done that, is using Scalar Parameters and Vector Parameters in the material that can be accessed and changed on the fly by code. To do that, I went into the construction script of the blueprint and used the blueprint node “Create Dynamic Material Instance”, here you need a Source Material which you can get that from the component in the blueprint that has that material attached (in my case, the skybox mesh). You can now make a reference to that material instance, so now i can change the parameter values using the “Set Scalar Parameter Value” or “Set Vector Paramter Value” depending on which parameter value you want to change, then type in the name of the parameter and plug in the reference of the material instance. I’m also using an Exponential Height Fog, which comes with UE4, and is the blue fog you’re seeing in my scenes, which really adds that depth.

Planets and Meteors

So I have a simple ring with a material applied to it, and I have asteroids procedurally generated so fit the ring. Let’s start with the ring material, it has a lot of elements to it, but the main one is the “Subsurface Color” which adds color to the material to simulate shifts in color when light passes through the surface. I then use an opacity texture with the subsurface color and base color to simulate a shadow on the ring material, as Unreal are not able to render shadows that large. I then created a blueprint that finds the sun and rotates the shadow in the ring material, depending on where the sun is. The procedurally generated asteroids is made using “Hierarchical Instanced Static Mesh”, that is basically able to render tons of static meshes very fast, as they all share materials and mesh information with each other.

1 of 4
1 of 3

So this way I’m able to render hundreds of thousands of asteroids, without much of a performance drop! I then I procedurally generate the asteroids locations, rotations and scales by first calculating the asteroid transforms using various variables, then generating them based on those transform values I put into the variables. This create a very good asteroid ring system, but it’s not possible to interact with the asteroids, as they have no collision, because that would be extremely heavy on performance to calculate so many collisions. So to work around that, I made a system that swaps out the Hierarchical Instanced Static Meshes with meshes that are interactive. I made this by using the blueprint node “Get Instances Overlapping Sphere” which gets instances that overlaps a sphere, and creates an array of instances from that. To use this node, I needed to create the sphere first, by using a center location for the sphere and a radius. I got the center location from the camera transform in my controlled pawn and the radius is just a variable I set to whatever I want, a higher value means a bigger sphere, vice versa. So when an asteroid overlaps this sphere, it gets swapped with the interactive mesh and when it leaves the sphere, it gets swapped back.

Lighting

I use a regular Directional Light (as the sun) that comes with UE4, I’ve then modified some of the values like the Intensity value which I have quite high, as bright directional lighting fits the art style I’m going for well. I’ve also modified the Temperature of the light to get a slightly colder light, and then I’ve enabled Light shaft occlusion, to occlude fog from the light as well. So yeah Unreal already has tons of great tools for you to use, you just have use them right and make it fit with your art style, then do that consistently throughout your scene(s). Other than the lighting, I’m also using a color gradient texture, to achieve a very colorful and vibrant look. In the planets materials, I’ve used a slightly higher specular value to achieve kind of a shine on the planets from the sun. I’ve also used a similar technique to simulate a dark side of a planet, as I used making the shadow on the ring. Finding the sun and rotate the shadow in the planet material, depending on where the sun is.

Chellenges

I can’t say how long it’s taken, I keep coming back to try and improve it and will definitely keep doing that in the future. But if you just wanted to make these scenes you could do it in a day or two, but as i’m making a game it has to work in motion as well, which is time consuming because Unreal has a lot of limitations when it comes to scale. That is probably also the biggest challenge as well, to find ways to work around UE4’s limitations. But while it is a challenge, it is not impossible, you just have to make your own solutions to these issues, and UE4 offers a lot of great tools to do that.

Marc Fabricius, A Game Developer

Interview conducted by Kirill Tokarev

Join discussion

Comments 1

  • Atakan Gürkan

    How can you make planets? Is it hard

    0

    Atakan Gürkan

    ·5 years ago·

You might also like

We need your consent

We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more