Ubisoft – Starlink: Battle For Atlas Cloudmaps

During development of Starlink: Battle for Atlas I was tasked to create cloud maps that look interstellar, conform to the art style/scale that looks believable for the player. These cloudmaps had to be in budget and spherical for all 7 planets.

I ended up using a procedural volumetric shader rendered in Houdini. This was a choice preferring quality over render efficiency.

The way the scene is set up is 6 frames which each has a perspective camera looking in a x, y, z, -x, -y, -z direction. with RGB lights from the locations. the RGB lights are filtered out in their respective positive negative and RGB channel so there is no double lighting and i don’t have to store more files besides one EXR with 3 layers.



Each planet has its distinctive style and had to be set up within the procedural shader. This shader does only function within Mantra (Houdini’s render engine). Because of this i had to make a custom visualization tool to make it workable within the view port.

The shaders all stem from the same multi noise graphs but all had some customization to make the clouds look extraterrestrial.  

The lack of a Houdini render farm meant that everything had to be initially rendered out locally. which should not be a problem rendering one cloud-map for the whole game. The problem is,  we had to render oud high detailed volume maps for each of the 7 planets times 6 for the cube map so 42 maps with 6 directional lights and an ambient light ending up with 294 separate gray-scale images. And that is excluding the dozens of changes and optimization per planet that had to be tested and rendered. So rendering locally was not possible at this point.

To combat the issue i managed to get a hold on some of the powerful build servers which  were not in use during the night. So i set up the Houdini HQUEUE farm starting with one and ending with four to render over night and in weekends.

After everything is rendered out in 6 EXR files they needed to be split into 12 (6 pos, 6 neg) files for nvassemble to stitch into two files and imported in the engine. This was all handled within Houdini with a bunch of CHOP and made a very rapid iteration process after the renders were complete.