Michalina Gąsienica-Laskowy told us about the working process behind the Sprucetuckproject, explained how different assets were made, and shared the details of creating the water and smoke.
Hi everyone! My name is Michalina Gąsienica-Laskowy, but most people know me as Miszla. I started learning 3D graphics very early – I was lucky enough to discover Blender when I was 10 and since then, I have been regularly playing around with it. The progress was plodding since I was just a kid recreating YouTube tutorials in my free time, but midway through high school I realized it could be something I do professionally. I started researching more about workflows and learning various software. I had the opportunity to work for two companies, where I met inspiring people from the industry. Their passion gave me confidence that I was on the right track. I found my current college – Howest DAE in Belgium – and I decided to move there from Poland and pursue a career as a 3D artist.
The Sprucetuck Project
One of my favorite courses this year was about creating environments in Unreal Engine 5. For our finals, we were given a free hand when it came to a scene we would like to recreate – everything complex enough was allowed. I probably spent as much time on ArtStation looking through all the amazing concepts as I spent on the actual project. After all this research, I chose Darek Zabrocki’s concept. I've followed Mr. Zabrocki for a while already and I’m a big fan of his work.
This artwork especially spoke to me. It's incredibly complex, yet it doesn’t use too many unique elements that I would have to model as separate assets. It’s also vastly different from my other portfolio pieces. And first and foremost – it’s a beautiful image.
After I took a thorough look, I realized how challenging it would be to execute this piece. The design was so unique it was hard for me to find any related references. My first instinct was to look for fishing villages, but none of them had any similarity to the architecture in the concept. And since most of the shot was far away from the camera the details were just smartly put brush strokes, modeling-wise I couldn’t base myself only on the concept.
A breakthrough came when a friend of mine told me to check out one Chinese town – Wuzhen. It was exactly what I was looking for. I found a YouTube video of a 1,5-hour long walk around the town and I took a lot of screenshots from it. Now some of the more ambiguous parts of the concept finally had a real-life counterpart and I was able to identify parts to model.
Part of the reference board with Wuzhen pictures
I started with a simple blockout to try to match up camera settings with the concept. I made basic models of individual buildings in Blender and put them in Unreal Engine. For scale reference, I used a free model by Emily Blane from Sketchfab. Because of a time constraint to finish this project, I feel like I moved from this stage a bit too quickly. I was afraid I would get stuck on it and in the end, some composition lines do not work as well as they do on the concept and I did get a few tangents as well. If I made this project again, I would probably spend even more time on the blockout and play with the camera a bit longer to avoid these types of errors.
When it came to decorating, I knew I would need a lot of planks and I didn't want to place them all individually. Following the advice of my teacher, I created a blueprint tool to place assets along the spline with randomly picked meshes, location, rotation, and scale. It was a great choice since at the end of the project I placed over 200 of those blueprint actors in the scene.
I used them for all the plank walls, docks, poles, barriers, roof supports, and many more. I can’t imagine how big of a time saver it was. One of the biggest lessons I left the project with is knowledge of Instanced Static Meshes. It’s a way of telling the engine that the meshes that were placed via blueprints are indeed the same mesh, which reduces draw calls tremendously. I don’t have much experience in blueprints, so I wasn’t really aware of its potential, and the tool I created uses normal Static Meshes. It still works for cinematic purposes, which is what this scene was created for, but changing it to instanced mesh would make working in the scene much smoother.
Creating the Planks Asset Pack
It took me a few attempts before I made a plank asset pack that worked well enough for the project. On my first try, I sculpted them in ZBrush, decimated them a bit, unwrapped them with Blender’s automatic unwrap tools, and textured them with a smart material in Substance 3D Painter. What I got didn’t work for the buildings, but I still used them to build the docks.
You can notice a very generic white dusty pattern on it. Since I decided to build up the whole scene with only a couple of planks, I didn’t want it to be too obvious. Using the Unreals Material Layers system, I overlaid some white and orange spots on top. It’s noticeable in a closeup, but it has a big impact on the scene as a whole.
Material layer setup
Material layer blend nodes
I created a second set of planks, which were just textured cubes, but I wasn’t happy with those either. I still used them in a few spots just to add variety, but they didn’t work as a main builder of the scene. My third iteration was decent enough and I could finally start building the scene.
Final main asset pack
Another Unreal feature I learned about while creating the project was Unreal Engine's modeling tools. When I first heard about them, I didn’t give them much attention because I was skeptical about how useful they would be. I underestimated how much quicker it is to do basic modeling tasks inside of the engine. Some time into the project I decided to add some displacement from one of the wood textures I downloaded from Bridge to the planks and bevel their edges with a boolean tool. I think it helped to create some extra pop, especially in areas closer to the camera, and to separate individual planks even more. It’s a very quick and easy way to add a level of detail without leaving the engine.
The same plank before and after treating with Unreal Engine's modeling tools
A huge part of the scene, and most importantly the scene's composition, are the roofs. They both needed to look interesting even in their large quantity and needed to fit complex shapes. To start, I sculpted 3 tiles of different sizes in ZBrush and broke each of them a bit. With those 6 tiles as a base, I put them together into a 2x2m tileable mesh. For the smaller buildings that’s pretty much all I used. For the big ones, I just duplicated the mesh around and warped it with a lattice tool.
Since it’s a tileable mesh, I didn’t add much dirt to it on the texture itself. I didn’t want it to look too repetitive. I created simple textures for the tiles themselves, and on the separate UV channel, I unwrapped the roof as a whole and generated some grunge masks in Substance 3D Painter – one from the dirt generator, one which is a simple AO, and a general dirt overlay. Then, inside of a Material Layers System, I multiplied the masks with some simple overlays and added more detail to them.
Roof asset before and after adding dirt using grunge maps
Material Layer Blend setup is very similar to the one I used for a general Overlay on the planks. Just instead of using two triplanar grunge textures, the primary one is a grunge map with baked masks.
For the tops of the roofs, I looked at reference pictures from Wuzhan roofs and replicated those. I made another asset pack which also includes smaller props and poles I used for buildings and dock supports.
With the planks and roofs in place, combined with the tool to place them, I was able to build 90% of the scene already, though there were still a few more unique assets I had to create that were important to put the scene together.
The boat is a focus point in the scene as a whole. Instead of making a photorealistic rowing boat, I decided to focus more on matching the shape with the one from the concept and the colors with the ones that were already present in the scene. Because of the angle of the shot, I didn’t have to make a too detailed inside either. I used a straightforward assets workflow, modeling in Blender and texturing in Substance 3D Painter.
The net I created by making a simple cloth simulation in Marvelous Designer. I tucked corners to the underside of the buildings and simulated it with the Wool preset. It’s not a perfect fishing net shape, but it did the job since it’s pretty far away from the camera and partially hidden behind the poles. I used a net pattern as the opacity mask and scaled unwrap to match the scale correctly. In Blender, I adjusted the shape a bit more to make it more rounded using proportional editing. I didn’t generate a color nor a roughness map, those are just single values.
For the chimney, I used textures displacement. I downloaded bricks and a pavement texture from Bridge, made a simple chimney shape based on the concept, and applied a Displace modifier to it. Before I moved on, I checked in the engine if the scale of the bricks looks good in the scene and adjusted UVs in Blender if necessary. After I was happy with the scale, I applied the modifier and went over the edges with a Scrape tool in Sculpting mode in Blender to get rid of the jagged edges. The sculpting tools are a reason why I didn’t displace them in Unreal itself. Those inside Blender are great for simple tasks like that.
Chimneys with and without displacement
Modifying Existing Assets
The rest of the assets I used either come from the Megascans library or an Eastern European Pack that comes together with the Creative Shrimp’s Photogrammetry Course. Combined with the modeling tools, Megascans give much more freedom. I was able to take some seemingly useless assets and boolean out the parts that interest me.
Assembling the Scene
I started going over the blockout and putting down planks and floors in place of cubes. Here is what the first iteration of buildings looked like after I just placed the planks I had.
As you can see, for the foreground dock, I decided to use some scaled-up branches from Megascans. My assets didn’t work as well from up close. The ground patch and grass from the right are also from Megascans.
After the first iteration, it was time to add some more wonkiness. I went over every building to detail it more, made the planks even more random, and broke up the big ones into multiple small ones. Here you see how big of a difference it made for the foreground building, with only just adding more planks and exaggerating their rotation.
When it was time to detail the roofs, I realized that straight roofs won’t work for middle-sized buildings. I decided to bend them with a spline actor. It did add the additional level of wonkiness I needed, but it also did something I wasn’t aware of – automatically disabled Nanite for those meshes since Nanite doesn’t support any type of deformation. Unreal’s modeling tools came to the rescue once again. I just quickly generated a bent version of this asset and replaced splined meshes with it.
When it comes to the big roofs, they are the tips I just kitbashed from a lot of beams put together. From afar, they look like they flow between each other smoothly, while in reality, those are just straight parts mashed up together.
Some of the roofs are broken up on the concept. With the modeling tools, I was able to easily boolean out the holes from the roofs I already placed and add planks on top of them to create the break-down look.
I felt like all the detailed grunge maps were giving a bit too much noise to the roofs themselves. To help that, I used photo scanned paper pieces from the Eastern European asset pack. I chose them because I already had them imported and they have nice irregular shapes, but they also could be a custom-made non-uniform plane with color on top. I placed them here and there to add some more areas of rest on the roofs.
Notice that the walls of the roof parts are also made out of this paper asset. Based on the concept, I couldn’t say what material it would be but I think the simple paper nicely mimics the feel those areas had. If you take a close look at the final piece, you can see that the hanging cloth in the midground is, as well, a piece of cardboard.
I made sure to place some planks on the back of those roofs to create the interesting silhouette that’s also present in the concept.
I made a few iterations on the bridge as well. At first, I tried to mimic its look with the Megascans branches, but it looked way too irregular compared to the rest of the scene. In the end, I just went directly with what I was able to read from the concept. Using another custom Spline tool, I tried to recreate the flowing lines that were seen there. That tool not only copies the asset around but also makes them follow the curve’s angle to make it blend nicer with the edge of the shot and add some interesting silhouette. I also covered the right side with ivy.
The background bits are kitbashed using the Megascans assets. I downloaded some trunks and put them together creating the giant branch that nicely rounds up the composition.
Background branch from up close
The trees in the back are also from Megascans. The shapes on the sides are just a plant pack (also from Megascans) that’s scattered on the side using the tool I used to scatter the planks. I made sure they’re the highest LOD and are using just a simple black material color material with no Translucency.
The Smoke Effects
With all the assets in place, it was time to add some fog cards. I used a simple unlit material with transparency and a noise texture I found on the internet and blurred. Following the idea from the concept, the ones that separate the buildings I tinted blue and the ones on the edges of the composition I left white.
Fog cards material
To create smoke going out of the chimney, I used the Niagara system. It’s the same noise texture I used for the fog cards, just not blurred, with applied wind force and initial velocity up. It also scales up with a lifetime, starts and finishes transparent, and is less emissive in the beginning – it makes it look darker when it just comes out of the chimney, just like in real life. I exposed a scale parameter so I could easily change the size of it for different sources.
I used the same Niagara system for the fog flowing on top of the water. I just disabled the emission change I mentioned and modified the scale curve. Below you can see the difference between the scene with and without the fog.
The water is just a plane with a panning normal map on top. I made it pan in two opposite directions so it doesn’t look like it’s flowing anywhere specific.
Water material nodes
At first, I thought to make the water translucent and enable ray tracing for translucency. The only translucent elements in the scene were water and windows, so I figured it’d be a good choice for such good-looking water. Here is one of the early screenshots of what it looked like.
However, after I added the smoke, it started creating issues. Smoke also needs to be translucent, and I have lots of overlapping sprites that no reasonable amount of bounces can handle. Because of it, I decided to leave the water opaque and use ray-traced reflections instead of Lumen reflections for it. Lumen works amazingly, especially its real-time global illumination, but it doesn't work well for cinematic purposes for mirror-like surfaces. Here you can see what Lumen water looks like.
And what the water with ray-traced reflections looks like.
The only difference between that screenshot and the final is the color of the water that I tweaked later. The effect is not as good as the translucent one, but being able to scatter the fog around was more important.
The biggest feedback I was getting at this stage is that it still pretty much feels like a ghost town. I scattered some village props along the scene, but they weren’t that visible and even though they added nice detail, they didn’t solve the problem. I needed to have some characters in the scene. I am not a character artist by any means and I only had a day more to finish the project, so I asked my friends if they had a few hours to spare and help me out with it. The sculpt was started by Hugo Colauto and when he ran out of time, it was finished off by Mari Gallet. Here’s what I got from them.
It was way more detailed than I needed! I quickly unwrapped it and painted some very simple shading.
After that, I imported it to Mixamo and downloaded some animations. Some of them are goofy, but I found them funny and left them in the scene.
The lighting setup is the simplest one. It’s just one directional light. I did add some spot lamps during the process, but in the end, I deleted all of them as I felt they didn't add anything. The only one left is the one that shines on the foreground rocks.
The last part to put it all together was the color grading. Early in the project, I tried to match up colors from the concept with Unreal Engine’s color grading, but I couldn’t get sufficient results. I decided to try out the color grading with LUTs. It was my first time using that technique and I find it way more natural than grading with Unreal’s tools. After that, I still modified the look a bit inside of Unreal’s post-processing volume. Here’s the difference before and after with just the LUT adjustments.
Starting the project was incredibly hard. I kept looking at the concept and didn’t know where to start. I knew the blockout wasn’t perfect, and when I started assembling the planks, they didn’t feel right. I kept telling myself that it’s easier to iterate than create something perfectly from the start, so I decided to trust the process and approach just one thing at a time. I was jumping around the scene constantly and changing different small things. After a few days of hacking away at it, it started getting shaped and I grew more confident in what I wanted to add. My biggest takeaway from this project is to trust your process and the skills you already have.
Some assets, like the roof shapes, were iterated multiple times over the course of the project. If I had known about the modeling tools from the start, it would have been way easier to get the right shape straight away. I also modeled some assets only to not use them at all after realizing how easily you can manipulate Megascans assets with the modeling tools. And I used normal Static Meshes instead of Instanced Static Meshes to scatter props around the scene. My second big takeaway is that it’s okay to learn during the process and you don’t need to know everything before you start the project. It’s okay to replace what you had with better solutions – it’s not wasted time.
I used to always make all my assets the “proper” way. I was making sure everything is properly aligned and perfectly placed. This project is the opposite of that. My third takeaway is to not be afraid to mash stuff together. If something looks good, it’s good. I could’ve modeled my walls, I could’ve modeled roofs completely separately, exactly how they look. But I had a limited amount of time, mashing together some cardboard and planks is a lot easier and no one can tell that at first sight.
Overall, it was the biggest project I'd worked on so far and I will make sure I will bring those lessons to my next projects.
Last but not least, a big thank you to all my friends that helped me during this project, who kept motivating me to push the project further, gave me feedback, helped me out with the mice, and showed me some of the Unreal Engine features I talked about here. You’re the best!
This content is brought to you by 80 Level in collaboration with Unreal Engine. We strive to highlight the best stories in the gamedev and art industries. You can read more Unreal Engine interviews with developers here.
You may find these articles interesting