Marie Lazar shared a breakdown of her stylized organic scene discussing the creation of vegetation and rocks, lighting setup, FX, and presentation.
In case you missed it
You might find these articles interesting
Hi, my name’s Marie and I’m currently a 3D artist at Blizzard Entertainment. My day job is making environments for World of Warcraft, but back around the beginning of the year I felt inclined to do some stylized plants in a more contemporary game engine. I had dozens of photos saved up from a trip to Vasquez Rocks north of LA two years ago, and I was inspired to make a small plant kit based on the California chaparral. I started out intending to make a tree and a few plants, then a diorama, and from there the kit just sort of grew into a small map.
The first step was picking some plants to work with. I’m no botanist but thanks to some websites on the flora of the park I was able to put names to the plants in my pictures. This was a good start, but I needed to focus my attention. A good plant kit has large, medium, and small plants with variety in shape and height and a mix of unique and filler plants. The manzanita trees with their distinctive candy-striped bark made a great starting point, they’re visually distinctive and add a color accent to the mostly gold and green landscape.
I made four versions that were all different from each other in shape and size and made tiling white, red, and striped bark textures to mix and match. A good tree is always worth making a few variations of but more than four or five become hard to work with. Level designers will probably end up sticking to their favorites and ignoring the rest.
Maps I used for the manzanita branches. Base and AO were painted in Photoshop, normals were generated from painted heightmaps using Crazybump or the Photoshop normal map filter. I skipped roughness maps for branches and grasses. Here the base maps are shown with their alphas so the silhouettes are readable.
Variations for the tree bark. I ended up mostly using the solid red one but the others did get mixed in on the big tree.
For a medium plant, I needed something generic to balance it out – chamise plants were a good choice, a classic scrubby bush that could be copied many times over to fill in space. I did three versions: a green one, a dead one, and a short one that could transition the other two with the short grasses.
I also decided to go with a chaparral yucca, another distinctive plant that would make this clear this is the Mojave we’re looking at and not the Savannah or the Outback. Blooming yuccas could be placed sparsely and make good signposts from a level design perspective as they stand taller than their surroundings. Later I threw in some prickly pears on a whim. These were less essential but it’s nice to have multiple distinctive plant types to choose from, you can create a feeling of progression by switching which one you’re using from area to area.
The rest was filled in with grasses, and with these I could be a little more flexible. I liked the soft, fluffy texture of the red brome and contrasting long grains of Indian ricegrass so I did some taller and shorter versions of both. In the end I threw in a yellow flower for good measure, so areas without the manzanitas could still have a color accent. I also reused part of my manzanita texture for a small manzanita “weed”. Grass is tricky to make, it has to be low poly but still cover space both from the side and from above. As a final touch, I painted the parts of plants that would be affected by wind as white in my vertex alpha channel.
General plant tips:
For rocks I kept it simple, one small rock and one big rock. Both rocks were designed so that they would look different from every angle and would intersect with the terrain in interesting ways. The small rock is a little rounder to contrast it with the big rock. On both rocks I intentionally didn’t get detailed with the ZBrush sculpts. For the big rock, I mostly sculpted the edges and added more details later with tiling diffuse and normal maps. Later, I added a few pebbles that I could place next to piles of bigger rocks to taper them off. Rocks were the only assets I sculpted in ZBrush, retopo’d in Blender, and baked and textured in Substance Painter. Plants, by contrast, were made entirely in Blender and textured in Photoshop.
Rocks of all sizes mixed together in the scene:
The big rock has some extra features in its shader. It uses detail maps that are masked by the vertex red channel to not appear on the edges or tops of the rocks. The detail UVs scale inversely with the model and are additionally offset by the rock’s location in world space, so each version of the rock will look slightly different. The vertex blue channel blends in a (seldom used) cooler version of the detail color, and the green channel makes the rock darker and glossier as though it were wet. The rock’s overall color is multiplied by a world space gradient that goes from white to red as its Z coordinate increases, nicely unifying formations of bashed-together rocks.
For the ground textures, I went with a low contrast sand, a low contrast rock, and a high contrast pebble texture to transition between them. Later on, I made a striated rock based on the detail maps from my big rock and then an eroded hole rock – holes were another neat feature of my reference I wanted to include. The ground textures were sculpted in ZBrush where normal and matcap passes were captured. I mixed the matcaps with traditional texture painting in Photoshop to generate base and roughness maps.
As a final touch, I added a few props to fill out the scene. I don’t have a lot to say here, I used face-weighted normals (more info here) and generous bevels so I didn’t have to bake normal maps. The exception was the trashcan, where I modeled both highpoly and lowpoly in Blender and baked maps in Substance Painter. I probably could have avoided baking for this one as well but I wanted to refamiliarize myself with the highpoly to lowpoly baking workflow.
Atmosphere and Lighting
I haven’t done an Unreal project in some years so I had to catch up on lighting. Above all, I wanted to chase that pumped up indirect lighting you see in games like Overwatch and The Witness. I originally thought I would have to bake lighting to get this sort of intense GI, but once I enabled lightmass propagation volumes on my project and upped the indirect lighting intensity from the sun, I found I was mostly happy with the results and could get the rest of the way there by placing dynamic lights where I wanted an extra boost. The downside to the LPVs was lack of control. Any change I made to the indirect light affected the whole level, and because the sunlight is white and the rock and ground textures are orange, my indirect light was predominantly orange everywhere. I would’ve liked to make the caves cooler, but no amount of blue point lights or post effect volumes would get me there.
The scene with just a dynamic directional light and skylight:
With light from a lightmass propagation volume, indirect lighting intensity set to 2:
The scene also uses distance field shadows, cascaded shadow maps, distance field AO, and screen space AO. I didn’t use realtime raytracing on this project. Distance field shadows worked great with the foliage but cast grimy black shadows in the recessed areas of my rocks, I had to override the distance field self shadow bias (what a mouthful) on the rocks to minimize them.
After adding distance field shadows, distance field AO, and screen space AO:
Even after that I found I still wasn’t getting the color harmony I was looking for, so I tried making a post-process material that overlaid the scene with light yellow in the foreground, red in the midground, and blue in the background. This small change made a massive difference enriching and unifying the scene.
With all the lighting and post-processing material applied:
The color pass overlaid on top of the scene; it doesn’t take much to make a difference:
For the skybox, I started with the default Unreal skyscene and painted over its main cloud texture to make it more Ghibli-esque, a couple of hours’ work. The default skyscene blends together two cloud textures but for the sake of simplicity, I removed one of them.
The default skybox and my version:
I also made some quails and an eagle (unfinished, since only its shadow is visible). I’m not a professional animator but it’s fun to step outside your specialization now and then, and after fiddling with the lighting for days it was refreshing to work on something different for a while.
Not all critters were created equal.
FX and Presentation
Around this time I started talking to my friend Lucas Annunziata who, fortunately enough, is also an environment artist on Overwatch. I wanted to make the scene more impressive and together we decided to add two more vistas, a waterfall and a big tree, and connect them all in a small circuit.
He also got me to think about ways of making the world feel more alive. I leveraged some water shaders I got off the Unreal marketplace for the waterfall and river and modified a waterfall shader into falling rivulets of sand. Additional sand and mist particles came from an Infinity Blade FX pack and went into the scene unchanged. I also made some leaf particles using a flipbook texture I created by animating a spinning leaf in Blender.
I also modified the SimpleGrassWind on my foliage shader to be less uniform. Nothing too complicated, essentially the wind is being masked by a sine wave that rolls over the scene in worldspace.
Decals were used heavily in the scene, mostly to hide intersections between rocks but I also made some effects decals like rivulets of water for the waterfall and this rippling sand, which is made by blending together two normal maps with scrolling UVs distorted by noise textures.
I originally made a camera flythrough of the level but Lucas suggested doing an additional Overwatch-style presentation reel. This took an extra week but was far more effective for showing it off. For music, I found an open-source track from an artist called Dr. Turtle that had a good beat to it. It was originally too long so I edited it down using the free sound editor, Audacity. The shots were set up and recorded from the Unreal sequencer, and music and watermark were added later in Openshot. For the reel, I was careful to match the length of each shot to the beat of the music, and even the quail at the end has its movements timed to guitar notes. I used a mix of slow pans, combination rotation/pans, animated bloom, and shifting FOV. To make the scene feel larger than it is I also staged my shots in such a way that you never see the same thing twice in a row.
Big shout out to Lucas Annunziata for helping me on this project. Also thanks to Tina Wang for introducing me to many of the plant tips and to my partner Dan for keeping me motivated and bringing me sour gummy strips.