Hello to all. My name is Elliot Gibbs, and I am the developer for Distant Worlds 2. This article has a slightly different focus. It will give you a behind-the-scenes look at a small slice of the game with an important on-screen role: the natural environment of the Distant Worlds galaxy.
While this article is more technical, it will help you see “under-the-hood.” It will give you insight into how we solved some of the unique problems faced in a game as vast as Distant Worlds 2.
What is procedural rendering? This refers to drawing various parts of the game without using hand-made art assets. In other words, an item is rendered on the screen without using any artist-created models or images. Instead the item is drawn using only software instructions – the item is rendered in code.
That might not sound very useful. Why would you bother writing a lot of software to draw something in code instead of just having an artist make a 3D model, or draw a 2D image?
That depends on what you are drawing and the number of different items that need to be drawn.
As you probably appreciate, in Distant Worlds there is a vast galactic environment, filled with many items to explore and discover: stars, planets, moons, black holes, nebula clouds, and many others.
In Distant Worlds 1 (Universe and earlier) these items were mostly hand-drawn 2D images: there were a set of images for desert planets, another set of images for ocean planets, a set of images for nebula clouds, etc. In total there were about 250 images for planets alone. So there was a lot of hand-drawn art!
The advantage with static, hand-drawn art is that you can have very specific details in the art. For example you could have an image of the planet Earth in the game, complete with the continents, islands and oceans we know so well.
However there are some big drawbacks with static art:
Procedural rendering is an alternative to making a lot of hand-drawn art. It means writing software that knows how to draw a particular item. We can then draw as many variations of this item as needed, tweaking parameters to make changes to its appearance.
In Distant Worlds 2 nearly all of the galactic environment is procedurally rendered. That means that we use minimal hand-made art to draw the stars, planets, moons, black holes or nebula clouds in the game.
Instead there are a set of custom shader programs that know how to draw each of these items:
At the core of these shaders is a concept called fractal noise. Fractal noise refers to a set of special random values that are tuned for drawing a natural environment in a realistic manner.
Fractal noise is a huge subject, which I won’t go into detail about here. But if you want to learn more you should look it up. You’ll see terms like Perlin noise and Simplex noise, which are good starting points.
But how do these procedural shaders work? What process do they follow, and what do they allow us to do?
Thus procedural shaders provide a vast improvement when rendering the natural environment in Distant Worlds, giving us an incredible level of detail and variety. The advantages of procedural rendering directly address the weaknesses of static art that we had in DW1:
Procedural rendering also enables another feature: animation. The fractal noise used in the shaders can be multi-dimensional, so you can use one of the dimensions to represent change over time. This allows you to smoothly animate things that you draw. For example, we have the following in Distant Worlds 2:
Thus procedural rendering helps to bring the galaxy of Distant Worlds to life, with motion and activity even in the natural environment. It gives infinite variety and depth of appearance to all of the planets and stars.
You might be thinking: how does this affect modding? Can you easily mod new planet and star types into DW2? Or does this require special coding or shader skills?
The good news is that modders also have access to these same shaders to make their own unique planets and stars – no special skills are required. By simply adding a few values to a file you can have a completely new type of planet available in the game. Your planet will have all the same features as the built-in planet types: hyper-detailed height maps with shadowing, animated cloud layers, city night lights when populated, planetary rings, etc.
So how does procedural rendering improve the galactic environment in Distant Worlds?
I hope you enjoyed this look at the galactic environment of Distant Worlds. I’ll be back later with more behind-the-scenes information about other features in Distant Worlds 2.