Harley Gresham showed us the working process behind the Stylized European Cottage project, discussing the texturing workflow in Substance 3D Designer and lighting with Unreal Engine 5's Lumen.
Introduction
Hello, I'm Harley Gresham, an Environment Artist with four years of experience in the games industry, currently working at Infinity Vector in Tokyo.
My passion for art began at a young age, but I developed an interest in 3D during my university studies while creating maps with Sourcemod for NeoTokyo. I originally set out to become a game designer, and wasn't particularly drawn to 3D at first. However, working on those maps gave me a fresh perspective – I realized how much I enjoyed detailing the levels, not just designing the layout for gameplay. The creative freedom of building immersive spaces for others to explore is what ultimately drew me to environment art.
After graduating, I moved to Japan to teach English but continued studying 3D online. In 2020, I got my break and joined Infinity Vector, where I've worked on a variety of mobile games, including Assoluto Racing. In my free time, I enjoy working on stylized projects, such as this one.
The Stylized European Cottage Project
At the start of the year, I came across Yokey's work on ArtStation and marked it as a potential concept for a 3D project. At the time, I felt my portfolio didn't fully showcase my abilities as an Environment Artist, as most of my pieces were either material studies or props. To address this, I sought out a concept that would help me achieve several key goals:
First, I wanted to grow and demonstrate my ability to create a modular kit that could not only recreate the concept but potentially be used to build other structures as well.
Second, I aimed to deepen my understanding of Unreal Engine's shaders and Lumen lighting by building a set of reusable materials and material functions for future projects.
Third, I set out to test new workflows for creating trims and tiling textures.
Identifying these goals early on helped me stay focused and motivated throughout the project.
Once I settled on Yokey's concept, I began by breaking it down, identifying where trims and tiling textures could be used and how best to split the building into a modular kit.
From there, I set about gathering real-life references for each material and created initial mockups of the tiling textures in Photoshop. This allowed me to take notes on the key shapes, colors, patterns, and details I needed to focus on for each material.
Taking a small amount of time to create these mockup textures proved valuable later in the project. It gave me a deeper understanding of the materials than simply studying references could.
I organized my tasks using Trello, based on the material breakdowns and initial blockout, and started a work thread on the Beyond Extent Discord. The community there was incredibly supportive, but more importantly, it helped me stay accountable and motivated throughout the process. I also kept a private log to track the hours spent on each session and the specific tasks I completed.
Getting Started
I used fSpy at the start of the project to set up my main shot. I kept this camera open in a second viewport throughout the process, allowing me to work freely from multiple angles in the first viewport while instantly checking changes from the main camera's perspective. I took daily screenshots using this setup to compare progress, sometimes opting to deviate from the concept or adjusting elements to match it more closely I took daily screenshots of my work using this tool to track my progress.
Modeling
The initial blockout was done entirely in-engine using blockout meshes I had from following Thiago Klafke's Environment Art Mastery course. The great thing about having these pieces was the grid materials that greatly helped match the measurements I had made earlier in planning. When creating environments, I always prefer blocking out directly in-engine, as it allows for a quick preview of how the space will look without spending time on modeling pieces that will likely be discarded later.
Once I achieved a blockout that I felt matched the concept well, I moved into splitting things up into the pieces I had planned earlier. As I quickly found out, however, my initial measurements resulted in a much squatter, boxier-looking building than the concept, so I had to change from my initial planned dimensions. I still stuck to the grid, but it did result in a kit that is perhaps less flexible than it perhaps could have been.
All of the assets were created in Blender and modeled as low-poly as I could. To support faster iteration, I set up Unreal to automatically re-import changed files and used the Blender for Unreal Engine add-on to allow for faster exporting. I highly recommend doing this for your own project and DCC simply for the rapid iteration this unlocks.
I prioritized creating the larger modular pieces first. For smaller wooden details, like the planks sticking out of the walls, I assembled them directly in-engine using Blueprints with modular pieces I had made in Blender. This approach made it much quicker to update UVs and adjust topology without needing to edit each individual plank. I also built certain props, like the ladder, entirely in Blueprints.
For Blender, here are the most important non-UV add-ons I use aside from the Unreal Engine add-on I mentioned:
- Hard Ops & Box Cutter (Even if you aren't doing detailed hard-surface work, it speeds up life in Blender considerably)
- Machin3tools (Ditto)
For the foliage, I kept things simple by using a diffuse-only approach and hand-painting most of the textures. Initially, I experimented with creating leaves using vector shapes in Inkscape, but they ended up looking repetitive and overly digital. As a result, I shifted to hand-painting the textures in Procreate and Photoshop. I created a basic brush to speed up the leaf placement process, though I still placed many of the leaves individually.
The exception was the ivy, which I generated using Geometry Nodes in Blender before baking them onto cards. I struggled to get the ivy to look right at first, but adding some volume to the ivy cards helped them appear less flat and more natural.
I used these tutorials, which were really helpful:
Topology
Thankfully, there was pretty much no retopology in this project since all of the assets in the scene used trims, tiling, or foliage. For unwrapping, I just used Blender. Blender unwrapping is pretty barebones and lacks a lot of things game artists really need to work efficiently, so I would recommend trying a bunch of add-ons to see what fits your workflow. Personally, I enjoy TexTools and UV Toolkit.
I also used the Ultimate Trim UV add-on for all of my trim surfaces, which significantly sped up my workflow. This tool allows you to input pixel values for each trim and then press the corresponding button to automatically rescale and position your selected UVs within the designated trim area. It's a huge time-saver, and I highly recommend it to any environment artist working with trims.
For the surfaces that used tiling textures, I used the Texel Density add-on to ensure all my textures were scaled correctly, and then I snapped the UVs to 0,0 to ensure things like the bricks weren't misaligned. My trims generally didn't follow the textual density of the project as much as I would have preferred, and it's something I will plan better for future projects.
Texturing
The tiling textures were built entirely within Substance 3D Designer. I have made a lot of materials before, but this time I wanted to also build a set of nodes I could reuse across several graphs to speed up creation. The noises that come with 3D Designer are great, but I'd highly suggest building some custom ones. In my case, I built my own "brushes" with nodes and plugged them into EZSplatter (a much-simplified tile sampler node) to generate my noises.
I first tackled the brick material since I knew it would be the most impactful tiling material in the scene and would also be one of the more interesting ones to make. I took a lot of tips in 3D Designer from Dimitri Alexis' stylized brick tutorial, particularly some useful normal map stylization he applies right at the end of his graph.
I ended up putting a lot of my time into this particular material, and it ended up being the longest graph I created. It was really important to me I captured the same brick size and colour in the concept, but even more so that I found the style I wanted for my materials. Aside from matching the concept, I took a lot of cues from Studio Ghibli and went for a decidedly flat roughness and subtle normals for most of my materials.
For the trims, I experimented with manually painting normals in Photoshop, drawing on the techniques I learned from Thiago Klafke's Environment Art course. Although this was a challenging process, I enjoyed how quickly I could generate usable normal maps, especially for creating 45-degree bevels to simulate depth.
I incorporated some elements from Substance 3D Designer, like noises, to add surface variation, but the majority of the work came from painting the normals. Based on the normals, I baked an AO and cavity map using an old NDO script, which also helped me create the AO and color maps.
While there aren't many recent tutorials on painting normals due to its status as an old-school technique, I believe there are still valuable applications for it. For example, when creating trim sheets, painting in Photoshop is an efficient way to achieve a 45-degree bevel similar to that in Overwatch. I utilized a normal palette for selection and combined it with actions from Thiago's course and the lasso tool to quickly shape the normals I desired. This method may not suit all art styles, but I think it works effectively for stylized hard surfaces.
Composition
As I transitioned from the blockout phase, I replaced the geometry with my modular pieces, moving around the scene to refine my placements. I stayed true to the overall silhouette of the concept but introduced a slight taper here and there, notably to the pillars and the small room at the top of the building, to counteract the straight edges that often don't translate well from 2D to 3D. In some cases, this simply involved using a lattice to warp the mesh.
I set up the wind as a material function I could re-use across multiple materials. I learned this from following PrismaticDev on YouTube. Their other tutorial on cloth was also very useful.
Lighting & Rendering
This scene was lit with Lumen in Unreal 5.4 and used a relatively simple setup. I find Lumen amazing but tricky to tweak with stylized materials. I found that it greatly washed out my scene, and it took some time to understand how I should be handling things like exposure settings in the post-process. I ended up using a power node in my materials to push the base color more than Lumen was allowing for. I think this is a bit of a hack, to be honest, but it achieved the results I was looking for in the end.
I think Lumen and stylized scenes are still something that hasn't been talked a lot about, at least publicly. It's something I will continue studying. Here are my lighting settings for interest.
One persistent challenge was achieving a uniform background color. In Unreal Engine 4, this was relatively straightforward; you could create a giant inverted sphere with a simple unlit shader, turn off shadows, and plug a color into the emissive channel to get the desired effect.
However, in Unreal Engine 5, this method doesn't work as well, resulting in an overlit scene that makes it difficult to achieve the background color you want, even with fog turned off. In the end, I only solved this once I picked up this asset for Unreal. I plan to spend more time exploring this in the future, but for this project, it served as a great solution.
Conclusion
I started the project back in February and finished in August, but I took a lot of breaks. I didn't keep up my personal log for the entire length of the project, I would estimate around 100 hours. The main technical challenges faced during the project were largely down to my lack of experience in lighting and writing shaders for Unreal. Fortunately, the internet is full of great tutorials, so the rest of my struggles were mainly with getting the texturing to meet the style I had envisioned through a lot of iteration.
Key considerations when using a 2D concept can largely be addressed during the planning phase. Spending ample time on your blockout and analyzing the concept equips you with the knowledge to anticipate potential problems during production. Had I rushed straight into the work, I don't believe I would have finished.
Overall, I enjoyed my time in the engine the most. Whenever I could spend time in the actual environment was the happiest apart from painting my textures in Procreate and in 3D Designer. I met each of my goals and learned about making foliage as a bonus. The positive reception of the project has been truly wonderful, and I'm very thankful for everyone who helped me along the way.
If I had to give advice to beginners, it would be to take your time, trust the process, and be kind to yourself. This is a complicated field for creatives. There are a ton of things to learn, and there is no way you will be able to tackle them all at once, so identify what you want to learn and take it one step at a time! Next, break stuff down. When I got stuck on something I really didn't enjoy doing I broke it down into smaller chunks and chipped away at it. You may find Trello or just a paper list of your tasks a good idea to keep you motivated, but the key is maintaining a schedule. Even if you only have 30 minutes a day, you'd be surprised what you can get done if you stick to a plan.
Good luck!