In the development of 'Around The World,' a game focused on maritime exploration, Thomas ten Cate has been refining the visual fidelity of the sky and clouds. A primary challenge involved simulating how light interacts with clouds. Using a lookup table (LUT) from the Povray renderer, ten Cate initially found that the clouds lacked the proper brightness at their base. He suspected that Povray did not simulate multiple scattering—where light bounces between particles multiple times—and confirmed this by writing a custom multithreaded recursive Monte Carlo ray tracer in Rust. The new data showed that with multiple scattering, light is distributed more uniformly, removing a 'metallic' look and making cloud bottoms appear significantly brighter and softer.

This image illustrates the initial challenge where clouds lacked proper brightness and had a 'metallic' look due to the lack of multiple scattering simulation.

This image demonstrates the improvement after implementing a custom multithreaded recursive Monte Carlo ray tracer to simulate multiple scattering.
To achieve realistic coloring, ten Cate addressed how clouds receive indirect light from the surrounding sky. In the Godot game engine, indirect light is typically sampled from environment cube maps based on a surface's normal. However, for clouds, a downward-pointing normal (towards the ground) results in little indirect light at the bottom. By tweaking the normals to point upward toward the sky, the clouds began to adopt a blueish hue from the atmosphere. This also improved sunset rendering; by mixing red direct sunlight with blue indirect sky light, the clouds achieved a pinkish hue that more accurately reflects real-world atmospheric conditions.
Several technical 'hacks' were also employed to correct rendering artifacts. To fix an unnaturally yellow horizon caused by the order of operations in the raymarch (where outscattering was applied before inscattering), ten Cate reversed the sequence to reduce excessive attenuation. Additionally, because the game's planet is 75 times smaller than Earth, the horizon curves more sharply, causing the sky shader to create a dark band where the atmosphere's density appeared to increase toward the planet's center. He corrected this by adding a small value to the vertical component of the global view vector before re-normalizing it, effectively 'pulling down' the sky to align with the physical horizon. Finally, he implemented a Filmic tone mapper with a white point of 2.0 to manage high dynamic range (HDR) values, ensuring clouds fade smoothly into the distance without becoming oversaturated.

This image depicts the rendering artifact caused by applying outscattering before inscattering in the raymarch sequence.

This image shows the fix for the yellow horizon artifact by adjusting the order of operations in the raymarch.

This image illustrates the high dynamic range issues before the Filmic tone mapper was used to manage HDR values.

This image demonstrates the final result of the Filmic tone mapper, ensuring clouds fade smoothly without oversaturation.