The Making of Gaea’s Hero Image
To test Gaea’s viability for release, we challenged ourselves to create a realistic terrain scene using as few nodes as possible. We wanted the “hero image” to depict the software’s contribution to the broader project, not just hero the terrain itself.
This detailed walkthrough of the scene’s progression highlights artistic considerations, as well as instructional steps to efficient scene construction in Gaea.
Last year, we released the Biome node to Early Access Users. To illustrate how the Biome output could serve as a texture base, I created a “Biome hero” scene using a single terrain.
What I liked about this image was that, while the terrain was a prominent and almost central component, it would not steal the focus from the addition of a new focal element. Maybe a Stålenhag-esque reactor with children playing around it.
That is Gaea’s role as an asset creation application: to provide the foundation (literally!) upon which the artist creates the rest of the scene.
Over the next 6 months, Gaea evolved dramatically. I kept returning to this image, contemplating how to develop the scene as well. I was very eager to add our new Snow.
The core concept was to take the lonely hill from the original image, and recreate it within a more expansive environment, inspired by the US Pacific Northwest — specifically, the area around Mt. Rainier.
The terrains would be split into two: the foreground terrain and the background terrain. Often, it is possible to create multiple terrains and merge or overlap them in the scene. For this scene, however, I wanted two distinct terrains.
The foreground terrain would be the same as in the original scene, but reworked a bit and coated with a healthy simulation of snow.
While the snow needed to be an important scene element, the overall feel had to be colorful and interesting, not dour. So I decided to create partially melted snow, inspired by several reference photos that my friend Mukul Soman shared with me in the early days of Gaea’s development for inspiration.
The foreground terrain follows my personal philosophy: “every seed has at least one beautiful angle”. In other words, (almost) any random terrain can be shown off beautifully when you find the right angle. This is how the original Biome hero terrain was created — absolutely randomly.
Gaea’s primitives are geared toward getting a believable terrain from the start. So creating the foreground terrain was extremely simple: take a Mountain node, displace it to add more detail, autolevel it for height, and then erode it.
The texturing portion was slightly more complex, but only a bit. Different outputs from the Erosion node were mixed with a FlowMap to create two separate biomes: green and dry. The biomes were then mixed with a colorized Curvature map to add highlights to sharper regions of the terrain.
You will notice that Snow did not play any part of that process. This is for two reasons: 1) I always prefer to work with surface processing — like snow — in a separate file to avoid lengthy rebuilds and to explore more options; and 2) I don’t like mixing snow into my main texture.
Snow will alter the terrain shape, which also affects the base biome texture. So I always create my base terrains in a “dry” state.
The final snow output was CLUTed to create a simple 16-bit black and white mask, which could be used as both mask and material color. More on this later in the process.
The background terrain needed to be similar to the foreground terrain so they could fit in the same biome. However, because it would be a mountain and not a hill, the terrain’s structure needed to be stronger and taller. For a more dramatic look, I decided to implement some mild terrain folding to create jutting peaks.
This process was more elaborate than for the foreground terrain, but shared the same beginning: a mountain node that would be displaced and autoleveled. Then I applied the Fold node to introduce terrain folding. This created a multitude of folds, and strong jutting peaks as I wanted. To combat the lower altitude of the folded terrain, another autolevel was applied. Two passes of erosion were added: one for softer flows and general erosion, and the other for strong downcutting in harder rock.
The eroded terrain was blended back with the un-eroded terrain to restore some of the cragginess lost in the softer erosion pass. Since I was going to create High Altitude coloration in the biome for this terrain, I did not separate the snow (although you will see I still separate the mask).
The snow was critical for this terrain. It had to be melted to the perfect ratio so it covered the tops and also trickled down into crevices in neat flows.
The texture creation for this was more elaborate as well. The graph screenshots below illustrate the “what’s”, so I won’t go into much detail. The idea was to create two separate textures: a Biome base texture, and a SatMap based texture to layer on top of it.
This terrain is included in all Gaea editions as part of the quickstart collection.
For the Biome, the key element is fresh water. It colors the terrain based on access to fresh water, flow areas, altitude, and so on. So two different flows were blended with a Growth simulation to create the biome.
For the second texture, physical masks such as Curvature, Slope, and Velocity were combined to create two different SatMap powered textures, which were eventually mixed with the Biome output and the snow.
Both terrains were built at a medium 4096x4096 resolution. In the original image, the foreground was only 2048x2048. But this time, we needed the image detail to be higher resolution for printing and various HD scenarios. In fact, in the next section you will see that, from the 4096x4096 build, we only utilize about a quarter of the terrain. So in actual terms, our displaced terrain in the scene is just 1024x1024.
For VFX production, I would normally use at least 8192x8192 terrains. But with Gaea’s latest improvements, shapes are preserved very well at lower resolutions. This is incredibly useful! Lower resolution heightmaps helped me use more memory in 3dsmax for the dense vegetation.
I’m a huge fan of simplicity. While my scenes can be dense, I like to keep the elements very simple. This was something I learned from Eran Dinur back in the Vue days, and have tried to implement across all levels of my workflow. For example, tilting a terrain slightly can make it feel taller than stretching it vertically. This philosophy has saved me countless of hours. It applies to almost everything you will encounter in CG.
My initial idea for the image was just one word: Layers. I wanted something with lots of terrain folds that would be bisected by haze.
The starting point was the old scene. It had the terrain setup, a nice atmosphere, and vegetation all ready to go.
The terrain was replaced with the newer version with snow. I still did not have a clear idea of what terrain should go in the distance. So I tried to add a few elements to the foreground to establish a basic perspective that could continue into the distance.
I made a generic Matterhorn-ish terrain with lots of snow and put that in the background. By this time, I had moved from a widescreen to a square frame aspect ratio. In the previous version, I did that in post. This time I needed it to be square from the start so I could compose the larger mountains.
The scene was nice, but that’s about all I could say. It didn’t really pack a punch. So I started playing with the lighting. I settled for a more dawn light instead of dusk. This immediately gave the scene new life. It fixed a lot of the lighting problems on previous foreground elements, but also started highlighting the bigger problems in the scene: the backround terrain.
After several different attempts to modify the imposing terrain, I was sure it wouldn’t work in any form. It took over the scene rather than contribute to it. It started as a nice silhouette, but now, especially with the new light, did not have enough character. It was just barren slopes. And most importantly, the towering aspect I was aiming for restricted the scale rather than add to it. The big mountain was looming, and instead of making the scene feel expansive, it made it just made it feel higher.
I wanted the hill in the middle ground to be a somewhat lower altitude point that felt “approachable”. Instead, it now looked like the last gasp of green before the giant glaciers begin. I chose to ditch the secondary hill, and play on the main hill’s slope.
A few days earlier, I had worked on a terrain on a livestream. I fiddled with it later in a simple throwaway scene, which I pulled up and reworked to fit this specific context.
With a bit of trial and error, I found the ideal viewing angle for the large terrain. The overlapping slopes in the bottom right corner were perfect for hosting a forested valley. The new terrain was lower in height, but it made the scene look more expansive unlike the previous one. It created the feeling of a more open, sprawling valley.
Elements of the Final Version
For the immediate foreground, I would typically have a simple displaced plane, or a separate terrain. That makes it a lot easier to manage the scene. But the foreground terrain had a very beautiful slope that I wanted to use for the foreground.
In fact, I was composing the scene to be slightly tilted by bucking the golden ratio. Real jagged mountains rarely stay level. Plus, I also wanted to hint of a larger world off-screen and of how the slope of a mountain valley would be beyond the frame, inviting the viewer’s imagination fill in the gaps.
Wrangling an intruding terrain
You will notice a strange diagonal area in the background terrain. This is a cheat. If I kept the large terrain this close to the foreground terrain, it would poke through and block out the sky! So I selected the offending area’s vertices in the plane and pulled them down. This didn’t affect how the rest of the terrain looked, and I was able to keep the terrain as close as needed.
A high altitude terrain like this would feel barren without some exposed rock. So I went to Quixel Megascans, my go-to for such elements, and used a cliff face from their Icelandic collection in the foreground to break up the monotony of the terrain. I tend to use the high poly versions rather than displaced lesser LODs, so I can put all my displacement juice in the render toward the terrains.
Rock formations don’t exist by themselves, so I scattered several large Megascans rock models on the foreground terrain. (Visible as gray pyramids in a screenshot above.) My goal was to focus on the terrain, so not having to make my own realistic rock models was a blessing.
I modified the pre-built Megascans material to use a custom CoronaAO map so I could control lighting in the crevices a lot more than the baked maps.
The foreground vegetation is, with several different ForestPack populations: grass, weeds/groundcover, shrubs, rocks, and conifers. The middle ground — the main hill — has only rocks and conifers. The farthest mountain slopes are even simpler with just conifers.
Like with all my scenes, I used ForestPack Pro to create the distributions.
In the top view of the larger scene you will notice patches of vegetation. Since only a fraction of the terrain is visible, I prefer to hand paint the areas where the vegetation will be visible in the frame vs. populating everything and letting the camera frustum decide where to confine the populations. This method uses a lot less memory, and is far easier to manage.
I was careful not to paint vegetation near the large snow flows and pools. I like the effect created when I paint with a large round brush, and then erase with a smaller erase brush. When viewed from the side, it creates a believable natural grove.
I love Corona’s displacement! It is very efficient when using a giant polygonal model — especially when using Screenspace Displacement. For a 3000x3000 render, I used 2.0px for the screenspace displacement. However, Corona’s displacement isn’t visible in the viewport, and ForestPack can’t populate on a render-time displaced plane — or at least not without some extra work. Additionally, that limitation makes it difficult to compose the scene in the viewport.
So what I like to do is set up a duplicate plane without a material. This plane uses the Displace modifier to visualize the terrain in the viewport. But the plane’s Visible in Render property is set to false, and the object hidden when not needed. ForestPack uses this model as the base on which to populate. It is a fair bit faster too as it’s low resolution.
As in almost all of my scenes, I use only one light: a sun/directional light, and no HDRI. CoronaSky and CoronaSun are my only tools. For the clean mountain air, I used minimum turbidity and default Intensity.
The sky would render as a flat-ish blue, but that was okay because I was going to replace it with an image in the final composite.
The setup for the foreground terrain material was extremely simple: a diffuse map, a heightmap for displacement, and a generic noise for the bump. The snow mask was mixed into the base texture separately (using itself as a mask) to control the snow intensity separately from the base texture.
You may notice the diffuse map uses a Triplanar map with a rock bitmap. This is to battle a natural limitation of heightmap based textures. When the texture encounters extremely steep slopes on the terrain, it gets stretched. By simply projecting a rock bitmap on the X and Y (side) axes, the stretched texture is blended with the bitmap.
For the big, background mountain, the setup was similar. The diffuse setup used a bit of AO, as the diffuse map from Gaea was created without any occlusion coloration. This is important because without a bit of occlusion, the color would look too flat. The haze would lower the contrast.
The snow was mixed into the base texture, just like in the previous material. However, the snow was brightened (5x) and mixed using a copy of the snow mask (without brightening) as the Mix Amount. Doing this avoids bleeding the black edge pixels from the mask onto the base texture. Since the base texture is a bit dull, the brightened second bitmap helps control the snow brightness independently of the base texture.
For the volumetric atmosphere, a straightforward CoronaVolumeMtl was applied with a very distant absorption, and closer emission. This created a blueish haze that would be common on a clear day in such a mountain setting.
I used a 35mm camera with a 1:1 frame aspect ratio and 360 sensor width. A widescreen frame would not be able to do justice to an environment like this. I wanted a “big sky” feel to it, while still showing all the ground elements.
The render was 200 passes at almost default settings, and no tone mapping except for a LUT. I used only the primary solver (Path Tracing), as the vast outdoor scene would not benefit much from a secondary solver.
As previously mentioned, for the terrains I used a 2.0px screenspace displacement on 10x10 segment planes.
The image was rendered at 3000x3000 pixels.
Once the render was ready, it went through 3 separate passes of post processing in Adobe Lightroom and Photoshop.
First, I replaced the sky in the render in Photoshop with an image plate, and then exported it for Lightroom enhancements.
For color grading and adjustments, I often prefer Lightroom over Photoshop as I’m accustomed to these tools for my photography work. But the same can be done in Photoshop, using the Camera RAW filter for the most part. I used several of the local adjustment tools in Lightroom to manage specific areas.
The image was then exported to Photoshop, where I manually painted in a bit of mist and some final color grading based on the slightly altered tonality introduced by the mist elements. Ideally, I would have loved to use simulation in 3dsmax to create real scale mist, fog, and other similar effects; but given the time constraints on this project (approx 15 hours), I stuck to painting.
Using a clipped Z-Depth pass, I masked the farthest area of the image and applied a slight lens blur to add the tiniest amount of bokeh and exaggerate the haze/atmosphere. By using the depth pass, the bokeh was automatically masked by “distance”. I would normally avoid this route for adding bokeh, but because it was only accentuating the existing bokeh (I used a sensor width of 360 in Corona for the slight DOF at this gigantic scale) and was for a large, busy scene, it was worth the risk.
To avoid the clean lines that always scream CG, a bit of chromatic aberration was added using the Lens Correction filter.
The following video shows the entire creation process from Gaea → 3dsmax + Corona + Quixel Megascans + ForestPack → Lightroom + Photoshop.
This project took around 15 hours to complete, mostly in short sprints late at night. I think this is a good representation of how Gaea can contribute to a larger scene. This environment, while great by itself, is now ready for characters or other elements to tell a broader story. I almost ended up doing an alternate version with campers waking up to a plane crash beside them.