Toivo Huhtaniska did a detailed breakdown of his Outskirts scene, discussed the concept workflow, adding details, shared his approach to modeling in ZBrush, texturing workflow in Substance tools, and showed his lighting setup.
Introduction
I'm Toivo, a second-year 3D student and an aspiring environment artist, born and raised in the buzzing design capital of Helsinki, Finland. Sit back, grab some snacks, and join me as I babble on about my latest project: Outskirts.
We begin our story in a time different than now, all the way back in May 2020, when sitting on a computer for extended amounts of time was suddenly madly in fashion. School’s out for the foreseeable future, so earlier in the year, I started learning Unreal engine with hopes of scoring a job in games one day. During my Artstation binge, I stumbled upon an amazing piece. Valley of the Fallen Grace by Otto Ostera, which I thought perfectly weaved through the restrictions of real-time graphics to create a beautiful cinematic composition. My work prior had been just this, cinematic pieces viewed from selected angles, but rendered offline with no thought put towards technicality and relied heavily on paintovers in post. This was high time to up my stakes, learn some nerd stuff and study how games are actually made.
The Plan
Deviating heavily from the concept is my forte, often I don't use one at all, which greatly lengthens production times. I knew sticking to the concept would be my key to good mental health after the project so I spent days looking for good candidates. During my research, I was watching (listening) [partial attention] to a lecture on MMORPG landscape design by Feng Zhu on my other monitor, where he was going through his thought process on painting interesting scenery, and one image really got my attention. It was a medieval-esque overgrown town landscape. Lots of juicy detail. Creeping ivy. Creeping ivy? I'm sold. Due to the speed-painty nature of the piece, it also left some detailing open to interpretation which was a bonus.
Knowing my habit of starting without much planning would impair my workflow, I did extensive planning and research. Tim Simpson has a great tutorial on this. Basically, I mashed together big collages of images in Photoshop - figuring out architecture, materials, lighting, which assets to make, whether to use trimsheets or tilables, etc. I also did a "quality check" board where I collected pics of similar AAA assets and materials I was going to make. God of war and the Ghost of Tsushima were big influences. Their environments are inspiring, being both photorealistic and semi-stylized, meaning silhouettes are easy to read and textures are low in noise.
Here’s an example of how I broke the concept down to pieces. The characters were kind enough to give me some help figuring out the dimensions of the buildings.
The Execution
Blockout & Modularity
I took extra care to match the concept as close as I could during blockout. I drew guidelines on top of the concept and used thin strips of geometry to match those lines in UE and began blocking.
Figuring out the camera settings first is crucial for this kind of blocking. During his lecture, Feng Zhu talked about the field of view, mentioning he often used a 35mm lens to achieve a greater sense of scale and to show more on the canvas.
Thanks to my careful planning, I got to asset creation fast, beginning with a set of beams and planks sculpted in ZBrush. I then used these, along with placeholder plaster/plank materials, and started creating a set of 2 & 4 meter high walls in Blender. I exported my blockout from UE to Blender so it's easy to check if the pieces fit.
After they looked alright, I used linked duplication (alt+D) to copy and slap the pieces all over the blocked out buildings. This proved to be very useful as I could quickly change everything by modifying the source set.
Architectural Detailing
Let's talk about roofs, roofs are cool.
In ZBrush, I sculpted a set of roof tiles, which I used to create a tiling texture as well as individual tiles to hide all the ugly stuff later. I like working in ZBrush because I love that sculptural feel in materials, which is definitely achievable procedurally but that's just beyond my understanding. There are many neat tutorials on Youtube for creating tiling textures in ZBrush. GrabDoc to get height & ID maps and pop those bad boys to Substance Designer for texturing.
Using my fresh-from-the-oven roof tile texture, I began "modeling" the roof pieces, and by modeling, I mean subdividing a 3x3m square a million times and displacing it using the heightmap. The resulting 5 million poly mesh looks cool, but unfortunately, UE5 is not here yet, so I had to decimate it back down to around 2k. The square kept it's UVS through the subdivision and decimation process so my textures matched the new geometry perfectly. Not only that but it automatically made the mesh tiling as well. The flat normal map might cause some shading problems so dialing it down to around .5 strength is a good idea. To get corners, I used the same piece, sliced it neatly and mirrored the other half, covering the seam with my individual roof tiles.
The same workflow of sculpting core pieces and baking them into tilables was used for plank, stone, and brick materials. This was useful because I could add local variation and create new stuff using the same elements, keeping the style consistent. For example, I used the stone blocks to lay the buildings foundation and planks to create barrels, barrows, and fences. Bricks and roof tiles were used to build a chimney.
Imperfection Adds Character
Once my hero assets, the main building and bridge, were complete, it was time for some trickery. I used the lattice modifier to slightly warp the buildings to sell it's age and break up that pesky perfection of 3D models. I did general wear and tear pass - manually adjusting overlapping parts, breaking holes into roofs, fixing those holes using planks and roof tiles, twisting and skewing stuff, and trying to undo that with ropes and other DIY fixes. I immersed myself in the world and thought about how I would fix all the damage if this was actually my house. Obviously, the people here haven't done the best job at that but hey, it's kinda cozy, and I guess the winters there aren't too harsh.
Once happy with everything, I combined everything into sizable pieces; the main building divided into four parts and the bridge into two. For these big pieces, let's call them chunks, I created a second UV channel. This channel would be used for an overall AO and RGB map for moss and grime, meaning it couldn't have overlapping parts (like a lightmap), which was easily done by just smashing that pack UV button in Blender's UV editor. Substance Painter is open, chunks are in. Painter uses the first UV channel by default so I had to duplicate the chunks and delete the first UV channel for this. Keeping the resolutions low for memory savings, I used the green channel to add moss with a smart mask and blue channel for AO. Running these through a slight blur filter reduced noise.
In UE, I added my baked RGB mask on top of the underlying materials - green channel handled moss, and blue was AO just multiplied on top of the base color. Controlling these with simple sliders was a blast.
In hindsight, this was quite a hassle, and although the results were quite nice, I probably could've skipped this and just used a Z-up mask the moss and let AO come naturally. But I feel like this ultimately tied up the buildings nicely and grounded them into the scene.
Materials & Texturing
All of the texturing was done using tilings and one wood trimsheet. The majority of my tiling materials were sculpted in ZBrush and textured in Designer - the only exclusively-designer material I created was the roots, for which I followed a forest floor material tutorial by Daniel Thiger. Sculpting this manually just would've taken too long, plus I could tweak it easily. Ground materials were created in Quixel Mixer combining and modifying Megascans surfaces to suit my needs. I really tried to keep each material as clean as possible and low in contrast.
In ZBrush, TrimSmoothBorder is my go-to brush for sculpting pretty much anything. Keeping fine detail in check is important - I create a separate layer for smaller cracks, etc. so it’s easily adjustable afterward. I’m also a fan of the free Orb brush pack, which is often used for heavy stylization but quite handy for more realistic stuff, too - especially, the Flatten edge brush which is good for achieving a sharper look on big surfaces.
The material renders themselves were done in Blender using EEVEE. It's just a rounded cylinder with lots of subdivision, a displace modifier and a couple of lights.
Vegetation
The final boss in the scene was, ironically, the creeping ivy. The same creeping ivy that got me hyped about the concept. I struggled big-time trying to get it to look lush and clean, trying different shading methods, such as using a fuzzy shader or even vertex paint fake SSS with an emissive version of the material. Finally, I kinda gave up and did some naughty denoising in Photoshop. The ivy material itself was done in ZBrush and textured in Designer. The stems were grown in Blender using the built-in Ivy generator, leaves sculpted, placed carefully by hand and the whole thing baked into an atlas texture. Using this atlas, I made a few bunches of ivy goodness for easy assembly.
Other plants are Megascans assets, which I again tweaked to my needs by running their albedo maps through like a hundred denoise filters in Photoshop to reduce, well, noise. Moss shader is based on a tutorial by Lukas Koelz, simple fuzzy shaded goodness scattered around using RGB masks, Z-up masking, and texture painting.
To get movement, I found an awesome free wind blueprint by Aaron Neal. This uses material functions that you can just pop into your own materials and hook to world displacement. This was used for the flags as well.
Now, the tree. It's a sculpt based on a Megascans dead tree that I cut up and reorganized to get a silhouette similar to the concept. It sits on a bed of Megascans rocks, which I also retouched in ZBrush removing finer detail and retextured it. Roots are modeled to follow the crevices of the rocks using curves. To get the thinner roots, I extruded parts of the tree, scaled them slightly to get it to sit on the surface and applied my opacity masked root texture on that. It's like the tree was wearing a shirt with the root texture on it. For the canopy, I modeled a few smaller branches, leaves come from an atlas texture from Textures.com, and the branches are scattered using Blenders particle editor. Finally, the whole thing received the same Substance painter AO+RGB treatment from earlier to give it that extra pop.
Unreal Gimmicks
The path was a fun challenge; after some iterations, I ended up using my subdiv-displace-decimation workflow once again. I used my stone wall material to make a slightly curved square which I laid down using Unreal spline editor. The material has slight dithering to help with blending.
Water is just a glossy plane with an animated normal that I got from NatureManufacture's "Meadow - Environment set" that I managed to grab for free from the Unreal marketplace.
To get wear on the plaster walls I made a material with a paintable tessellated brick layer.
The Lights & Post-Production
Lighting
The lighting is fully dynamic and hacky as hell, built completely to suit my camera angle. Skylight and directional light do most of the heavy lifting, and I added tons of fill lights to highlight silhouettes and textures. Epic's Blueprint scene had some cool fog cards which I used to accent depth in parts where the default height fog fell flat. This was especially useful when some set pieces were so close to each other that their forms would blend into a mess - pop a fog card in-between, and it's way more readable. Same cards, set bright yellow, and very low opacity, provided neat haze to sunlit parts. Using the atmospheric perspective provided by height fog with hand-curated supporting fog is the key to achieving a washed-out, painterly look in 3D.
Here’s an example of how I use fog cards to push silhouettes.
Unreal dynamic global illumination is pretty weak so I eyeballed where light would bounce and added fills. Here are the different lighting elements in action:
The night version was done in a similar fashion, with the exception of lit windows. Oh yeah and the fact that it rains - which ultimately led to me changing every material specularity and roughness. But that was good fun!
I swapped the window material to a translucent one and added some warm point lights to light selected windows. To highlight the wetness of roofs and ground, I added little blue lights to give juicy specular reflections. The specular intensity and scale are easily adjusted from the details panel. One problematic area was the lantern that the guard was carrying - because he was standing by the pool of water, the reflection of the lantern was somehow brighter than a thousand suns, so I had to lower the main lantern light to a very low number and add a secondary light to illuminate surroundings - remembering to turn the specular scale to 0 on that.
The rain itself was, not even embarrassed to admit, done completely in After Effects. So were all the particle and wind effects. Long before, I started doing 3D I was doing VFX and motion graphics in AE so I'm very familiar with that. Short movies with friends where everything and everyone exploded, eyes were laser cannons, shovels were sniper rifles. You know that kinda stuff.
Post-Processing
Generally, this piece underwent a less harsh post-process cycle compared to my earlier stuff, mainly involving just slight tweaks such as firefly and noise removal and color grading. I dialed white balance to a colder feel, shadows more towards cyans, desaturated, and intensified direct sunlight and bumped vibrance on the focal point while keeping saturation low towards edges. Color and saturation is also a good tool to guide the viewer.
Here’s a breakdown of my post-processing workflow.
I use the Z depth pass to mask out certain areas for local tweaks. The SubsurfaceColor pass provided some oomph to the vegetation; when in color dodge mode and set to a low opacity, it sort of emulates the sunlight bouncing inside clusters of plants - I had a black mask on this and used a soft white brush to reveal it on sunlit parts.
Afterword
With little prior knowledge of engines or game art, this was an absolute unit of a project. Luckily the internet is a bottomless treasure chest. From the lifesaving beginner tutorials to advanced tips and tricks, I’ve learned more during the past 3 months of full-time studying than I have during the 3 years I’ve been learning 3D. The awesome dudes of FlippedNormals made me realize this is not an easy career choice, giving me the initial motivation to push through the multitude of 15+ hour workdays. DinustyEmpire and Experience Points Discord channels are awesome places to meet hundreds of passionate artists and receive indispensable feedback. Tim Simpson’s Polygon Academy Youtube channel, especially his Artstation feudal Japan challenge, is a brilliant source of tutorials covering the whole environment creating process from start to finish.
Time for the next adventure.
Cheers!