Home

We are proud to announce that the Open Alpha phase of our upcoming title, Stellar Codex has just began! Anyone willing to participate can simply download the game launcher from the link below. Joining the Alpha is free and open to everyone!

Join our growing community of fans and help us make Stellar Codex the awesome game we want it to be!

Our talk in Digital Culture Festival 2017 with subject “Artificial Intelligence and advanced level design concepts” was a huge success, and we have you, our fans, to thank for it. For anyone who couldn’t make it to the event and missed our talk, we decided to upload it in its entirety.

The outer space is massive, and the emptiness of deep space is always contrasted by the massive wonders it contains.

When designing a game set in outer space, we’re often confronted with the problem of integrating super-massive objects within the limited resources allocated to us from the hardware running the game. Even an asteroid mining base can be complicated to integrate without suffering frame rate drops.

An object as big as this can be seen from huge distances which forces us to have it loaded inside the level from the very beginning. This however adds stress to our graphics card, as it has to render a very complex object always, even when we’re not even remotely close to it.

To combat this issue, it is standard procedure to load a lower polygon version of the model that can be seen from afar, and then load the higher polygon model to replace it once the player moves closer to interact with the structure.

This however leads to another issue. Loading a complex model such as this while the player is fighting can drastically reduce the frame rate during loading time. In order to address the issue, we created a sophisticated asset streaming system which gave us the option to load an object over a long period of time, in order to spread the load over multiple seconds. This allows us to set how long we want the loading time to take; the slower the load, the smoother the operation becomes. By loading the higher polygon version over a time of 10 seconds for example, long before the player reaches it, we make sure the change is not noticeable at all.

However, our problems are not done just yet. The example mining base is an interior space; the player flies inside its corridors, from entrance to exit. This means that the interior spaces need complex collision systems, since dodging obstacles now becomes part of the game-play. And as with all physics related issues, colliders are heavy on the CPU.

First optimization in order is to replace the game engine’s mesh colliders which are extremely heavy, with simpler clusters of primitive sub-colliders (cubes, planes and spheres). This can take an extremely long time to set up, since all the work is manual, but in regards to performance, the payout is worth it.

Even with primitive colliders however, loading hundreds of colliders even when the player is far away from them still impacts performance; the physics system still checks them all, regardless of distance. And this results in constant frame rate drops. To combat this issue, we created a collision optimization system, in which colliders far from the player are turned off, while colliders close to the player turn on.

This drastically increases performance, as physics are only calculated around the player now, where it is most relevant.

Colliders are shown in green outlines

Having the above technologies already developed, we can introduce to the game a seemingly infinite amount of super-massive structures; as infinite as the universe ought to be, but still fitting inside our palms.

When creating a game based in outer space, one issue quickly becomes apparent – vast distances. In order for the scene to feel rich and full, we require landmarks that can be seen from huge distances, often from different orbits, like asteroid belts, planets, moons even suns and nebula. And that means that said landmarks must be huge in order to be visible.

This poses a problem when designing a scene. The player’s camera cannot render (or “see”) as far as is needed for those objects to become visible, because if it does, it will need to render all objects in-between; spaceships, debris, dust clouds, etc. These objects can pile up fast, causing low performance or even worse, game crashes.

There are various solutions to this issue; rendering everything to a 2D skybox, like a backdrop image, or selectively switching objects on / off are some popular approaches to solve the issue.

We have opted to use the 3D skybox approach, as it’s the most elegant solution, albeit most difficult to set up.

The 3D skybox exists between the standard 2D skybox backdrop and the normal scene where the game takes place. It contains a scaled down and low-polygon version of all distant landmarks (on a 1:100 scale in our case) and it’s typically rendered by a separate camera. The separate camera receives instructions from the main camera on how to rotate and move, in order for all images to sync.

Every frame, each camera outputs to the frame buffer what it sees, stacked in layers, much like we’d super-impose image layers in photoshop to generate a composite image.

The result is the illusion of a unified image, while in fact, it’s a composition of many separate images.

This technique, not only offers good performance relative to the other methods available, but also allows for clever ways to expand level design. By manipulating the 3D skybox camera’s movement, we can cause the 3D skybox to “approach” the player as he moves towards it, and then, through the use of LOD (level of detail) techniques, cause a seamless transition from the 3D skybox to an actual non-scaled scene which would load on demand.

This is precisely the way we’re able to perform planet drops from high orbit in Stellar Codex!