Cloud Imperium Games’ Star Citizen is a unique proposition: a game designed from the ground up to support the seemingly limitless scalability and scope of the PC platform – something of a rarity in the multi-platform age. Unfettered by the limitations of the current-gen consoles, CIG’s efforts stand apart simply by virtue of the fact that it is not beholden to locked, ageing hardware designs – it’s forward-looking in every regard and the way the technology scales and renders everything from a far-flung star system to the smallest piece of debris on a barren moon is an extraordinary technological achievement.
Of course, Star Citizen is a game that has attracted plenty of controversy in the way it is funded and related to that, how CIG has interacted with customers unhappy with its extended development. In 2012, the game raised $2.13m from its initial Kickstarter from 34,000 backers with a mooted 2014 release date. Recently, the studio revealed that investment stands at around the $250m mark with over 2.5m backers. The scope of the project has evolved alongside the size of its backing. An actual release date for what could be considered an actual game remains unknown but this clearly isn’t vapourware – there is a real achievement here and on a recent visit to CIG in Wilmslow in the UK, I got to see something rather fundamental: how Star Citizen seamlessly scales from solar-level rendering to offering up the most minute detail on its richly rendered worlds.
One of the greatest challenges in getting Star Citizen working in the first place as a massively multiplayer game is due to the nature of its scale. In a typical game, you have dedicated levels or dedicated open worlds of limited size. Star Citizen operates on an entirely different level of magnitude – and to enable this, the developers converted the engine to use 64-bit coordinates to enable solar system-sized game spaces – 536,870,912 times larger than a space based on 32-bit float coordinates.
However, the size of the play area is only one aspect – speed of traversal through this space is another key issue, and in the current generation, it’s typically achieved by streaming world data or having dedicated loading. Taking Marvel’s Spider-Man as an example, the design and presentation of the streaming world is built around the fundamental limitation of how quickly the player can travel through it (a point Sony itself has demonstrated via its PS5 SSD demos). Star Citizen has a vastly more complex challenge: the player can move at great speeds, requiring a new way to access a lot of high-detail world data. Imagine jumping to a planet or entering a space station and suddenly having a loading screen pop up, or even worse, a massive stutter – traditional systems might have that, but that would not live up to the game’s design ambitions for being seamless.
Even if the user had hundreds of gigs of system memory, this still wouldn’t be enough to get the job done. Star Citizen’s solution is the use of what CIG calls object containers. Put simply, this is any world object large enough to have a number of nested objects within its bounds or an object with an extensive amount of sub-detail. It could be an entire planet, a space station, a city or a ship.
In a traditional game structure, these object containers themselves would be levels or multiple game levels in their own right, which would require dedicated loading sequences. In Star Citizen, as you move through the 3D game space, this hierarchy of object containers is loading in and out in the background in an efficient multithreaded manner to keep slow-down to a minimum. In Star Citizen, the planet itself is an object container, the space station in orbit above is another and then various points of interest dotted around the surface of the planet are other object containers, streamed accordingly.
In combination with the 64-bit coordinate structure, object container streaming allows the player to travel at incredible speeds while also maintaining detail at both the macro and micro level. In the embedded video above, you’ll get to see a key example of macro scale rendering. Star Citizen sets about rendering properly three-dimensional volumetric clouds of dust or gas at a solar scale. The galaxy is handcrafted to a certain extent, with artists and designers creating large swirling nebulae or planetary rings, using similar ‘froxel’ techniques seen in other engines. In Star Citizen, the gas medium itself is lit and shadowed in real-time from the sun or any other light sources placed into it, representing pockets of especially active gas, chemical reactions or other phenomena.
Since this is all carried out in real-time, this means you can fly into it with your ship and watch as the larger structures from the distance become more diffuse as you progress until you are completely enveloped by the gas cloud. For those areas where designers want even more detail, smaller formations of voxel gas clouds can be placed into the overarching gas cloud to represent hero details such as smaller clouds forming around a jump gate, for example. Or they can add in scattered objects into the clouds, like asteroid fields where even the comparatively miniscule asteroids can cast real-time shadows on the extremely diffuse medium of gas surrounding them.
The sheer scale is difficult to process at the cockpit level but perhaps more comprehensible are the game’s planets – where the technology behind their creation is now onto its fourth iteration, changing greatly in the latest 3.8 alpha. Planetary development involves the work of graphics programming, physics programming, environmental artists, hard surface artists, video effects artists and many more. A variety of different skills and disciplines re required as the planets themselves are so much more diverse.
You have colder worlds, warmer worlds, barren worlds, and so on. An individual planet may be diverse in its own right with various distinct biomes – with each having their own weather effects. It’s a fascinating development challenge as CIG wants a certain level of handcrafting in its game world, so a more straightforward level of procedural generation as seen in a game like No Man’s Sky isn’t a good fit. That entails the development of a system that allows for minute detail and diversity on a world level that doesn’t require an eternity to produce – and that’s what this fourth iteration of CIG’s world-building tech is all about.
The basic idea behind planet generation in Star Citizen is all about unifying much of the creation of the planet into interacting systems – and this all starts with two basic variables in describing a planet: how warm it is and how wet it is – temperature and humidity, basically. These aspects work in tandem with a height map defining mountains, plains and valleys. With this the developers essentially map out an entire texture set describing how humidity, temperature, and elevation are scattered across an entire planet surface.
Combinations of these variable define a biome – so, for example, you could have a biome type that is semi-humid and of a moderate temperature while at a specific elevation range, as well as another biome at the same elevation but with different ranges of humidity and temperature. Imagine the difference between coastal cooler grasslands of Scotland and the stretching deserts of the Sahara as it meets the sea. They could be at similar elevations but the temperature and humidity ranges found in each are very different.
The 3D terrain underlying the biomes is based on the texture height maps created offline and then generated in real-time with CPU-based in-engine tessellation. To keep performance high and with as few visible edges as possible, the GPU further tessellates the geometry as the camera gets closer to the ground, to the point where geometry size is just a little larger than a centimetre.
With the terrain in place and humidity and temperature decided, artists cooperatively build assets like ground textures, rocks, bushes, boulders and the like based on different biome types. These assets are then placed on the planet as the artists sees fit. As the assets are placed, they are tied into a specific biome range. For example, a formation of rocks an artist places in one location will also be found in any place of similar biome type – so it’s at this point where procedural generation kicks in, shaping the world according to the basic rules and precedents laid down by the developers.
To keep it all coherent and believable and not looking oddly stratified or just crudely placed, a number of other features come together – like the ability for objects and particles to partially inherit the colour from the terrain they are located in so they fit together, or for temporal dithering to occur between biome zones to smoothen their fall off as the view slowly moves away from the terrain. At the planetary scale you can still see how the planet’s textures manage to show the colour of tree canopies, even though the camera is much too far away for the tree models themselves to be rendered.
Ultimately, the new system allows the developers to create planets with as many scattered biome types as the designer wants, based upon how they want to divide up the various ranges of height, humidity and elevation. While this may sound like it only would work on Earth-like planets, a simple changing of the paradigm allows this system to describe a whole host of other world types. Instead of describing humidity and temperature on a moon that is extremely cold and has no water, the two texture types could describe the level of acidity or the presence of some other element.
From there, the artists can vary the terrain and asset scattering for more hostile environments with unique biomes, while the game’s remarkable weather systems are also derived from those three key world data parameters. At the macro level, the height map is used to generate real-time soft-shadows from the sun, with proper penumbra and umbra that stretches as far into the distance as the eye can see with no level of detail switching. This also means so you can see massive shadows from the terrain on the planet from space.
Procedural generation is also used to aid in the creation of Star Citizen’s space stations. Given how these structures outnumber planets in the game, they also needed to be able to be varied, efficiently built but also highly detailed. To achieve this, artists design rooms or tiny cubbies and other modular areas of details and pieces within the rooms with a variety of props and useable game items. Using these bespoke modular bits (which can be further customised) a procedural tool takes all of these elements and systematically generates commonsense layouts based upon a generation graph. In the end, an entire space station can be generated with lodging, a food court, landing spaces and the like.
The power of that same idea in the layout tool is harnessed to generate other areas of the game as well, such as the cave systems found on a number of planets where you can go spelunking for mining purposes or set off in search of loot. The same system can also populate planets and moons with a number of tiny research outputs or mining stations. Viewed from the top down, the mixture of artist-driven work backed up by procedural generation looks set to radically improve efficiency in creating Star Citizen’s worlds. To give some idea of this increase in efficiency, all of the game’s pre-existing moons and planets required almost two years of work to create manually but took just a few months to remake using the new system.
There’s a lot more I discovered on my visit to the CIG studio and while the focus of this piece has been on the innovations found in the recent 3.8 alpha, there’s a lot more to come. For example, at the moment, the pop-in you see no longer comes from the planet generation textures or geometry, but rather the level of detail ranges for cascaded shadow maps or the LOD ranges for scattered objects like smaller rocks, trees, or boulders on mountains. These are all tuned for the current performance level of CPUs and GPUs – but some fundamental shifts in the game’s rendering setup look set to shake this up significantly, with some profound implications across the game.
Other work in progress includes a much more realistic atmospheric simulation. Currently, this is handled by local froxel fog volumes going out in front of the camera with very distant atmosphere rendering that looks rather uniform. The next iteration utilises the planet’s height map data to draw fog into valleys far into the distance, beyond the local froxel grid. And similar to the terrain shadows, ray marched volumetric shadows will pierce through this extremely distance fog. This would mean you could see massive columns of fog being lit from the sun and shadowed by terrain all the way out into space.
All of which suggests a game that is still deep in development, where progress is defined as much by work in overhauling existing systems as creating new ones. So if you do back Star Citizen today and load up the latest alpha, what should you actually expect? Well, the goal is to be a massively multiplayer first-person space simulation – but clearly, it is not there yet. As I see it, there are three main elements required to transition Star Citizen from large scale demo to an actual game. First of all, the current servers do not hold thousands of players – perhaps up to around 60. To get so many more people in one playable instance, this requires so-called server meshing technology to be added into the game. This is where multiple different servers work in a lattice and hand off information, simulation and tasks to each other cooperatively. It’s a key piece of technology and right now, it’s still in development.
The next key technological milestone is NPC behaviour. While NPCs are in the game right now, their behaviour is odd at times or rather limited – and they certainly aren’t the player facsimiles they are destined to become. To make them better in general and to have more simulation of the game world, the game still needs to fully integrate server object container streaming. At the moment, the game servers are pretty overloaded with tasks and can slow down as more AI and simulation occurs over time after players spawn and interact, limiting NPC counts and behaviour. Server object container streaming intelligently culls and time slices aspects of the simulation so that much more of it can happen simultaneously – paving the way for more detailed AI simulation. With server object container streaming in, game development can move on, delivering crucial additions to make NPC behaviour more believable.
The last element we need to see (from my point of view, at least) is persistence tracking. Right now, your characters, ship items and status won’t persist from patch to patch – every time a new update arrives, progress is reset. This is possibly the most crucial test of Star Citizen’s transition into an actual game. Full persistence tracking for item placement and the status of all NPCs and characters requires some extremely beefy servers – not to mention some level of finality in core game technology – but it is scheduled to arrive concurrently with server object container streaming, the first iteration of which we’re seeing in the latest 3.8 alpha.
In the here and now, Star Citizen is still very much work-in-progress and whether you decide to join the 2.5m backers needs some consideration because clearly, this isn’t a game as such. Not yet. However, that’s not to say that there isn’t a huge amount of work-in-progress development to check out. Whether it’s playing and exploring with friends, or simply enjoying some exceptional technology, I’ve personally enjoyed my time with each new version – and those updates do keep coming, allowing you to appreciate the progress the developers are making. But on the other hand, let’s be clear, it’s not an actual game as such in the here and now – and there are still big challenges to overcome. My visit to CIG gave some idea of the progress being made and the amount of resources being poured into the development and having had a preview of the new technology to come, I’m really looking forward to seeing more.