Katarina Persson shared an extensive breakdown of the Winter Cabin project, discussed the workflow, and explained how to create Aurora Borealis.
In case you missed it
You may find these articles interesting
Hi everyone! I'm Katarina Persson, a 3D Art Student at FutureGames in Stockholm, Sweden. Previously I’ve studied Game Design at Stockholm University and worked for a few years as a 3D Visualizer of city planning projects in Stockholm. However, I really want to pursue this dream I have of working with games so I decided to focus on specializing in Environment Art, which is my favorite area. I’m currently at the final stretch of my education before it’s time to start applying for internships this autumn so I’m really excited about that.
Winter Cabin by the Lake
This scene didn’t start off as a scene but evolved into this after experimenting with shaders in Unreal. I found the awesome snow ground tutorial by Jacob Norris which has been really helpful for me both in terms of learning about Substance Designer in general and working with shaders. After working with the snow landscape for a while I wanted to make some snow-covered trees to populate it with, and the idea to make this scene came after that as the elements I had at that point started to remind me of the area I grew up in the mid-northern part of Sweden. These types of cabins are something fairly common there and remind me of being out in the wilderness, something I started longing for back home in my city apartment. Once I decided to build a proper scene I started collecting references both from photos of cabins on Pinterest and from inspiring games such as Assassins Creed Valhalla, The Last of Us Part 2, and Red Dead Redemption 2.
The final composition actually came together on the last day of the project, at first I didn’t have a lake in front of the cabin, instead, it was in a tight forest, but I didn’t like how that was turning out and wanted to have a more open space and some nice reflections.
Modeling and Texturing
It was a bit of a challenge to come up with how I would approach making the cabin logs, as I both wanted it to look detailed but still be fairly optimized. I studied the cabins in Red Dead Redemption 2 and found that they used tiling textures on the long sides of the logs, so I decided to make a trim sheet that could be tiled lengthwise as needed. I sculpted 4 unique logs in ZBrush and baked them into 4 low-poly logs that I UV'ed so they could tile. I baked and textured them in Substance Painter and removed any seams with the clone tool.
Then I used these low poly logs to build the cabin walls in Maya. For the window frames, door handle and such I used another trim sheet that I made with a more regular wood pattern (this trim sheet was also used for our game project). If you want to learn how to create trim sheets I really recommend Polygon Academy. For the door and floor, I used a tiling wood material from Megascans. In Unreal Engine, I also added a detail normal wood grain texture to add more detail on the closeup shots.
Trees and Grass
Making trees are quite the project in itself. I created the tree trunks with photogrammetry, where I used a software called Agisoft Metashape to generate them from my photos. I also created a tiling bark material based on my tree scans. At first, I used branch cards from Megascans but later I decided to create my own in ZBrush. To do that, I created a FiberMesh preset that looked like pine needles that I applied on small branches. Then I brought in those high-polys to Substance Designer and baked them to a plane and added some snow to the textures.
The grass is made very quickly directly in ZBrush during the last day of the project using FiberMesh, and they’re baked and textured in Substance Designer.
Another aspect of setting up foliage and trees are wind, I use vertex colors on my meshes that control what areas are affected by the wind shader in Unreal Engine. The trees also use a wind that sways the tree around their pivot point.
I’m using the red vertex color to drive the simple grass wind on the tip of the branches and grass. For the sway, I use either blue vertex color to decide what part of the tree I want to sway, or like in this case, I only used the world position and object radius to move it around the pivot point. I use green vertex color on some bigger branches that I offset this effect on so those branches will start swaying at different times and create more variation. The wind setup is plugged into the “world position offset” of the foliage material.
The snow shader is mainly built from the snow ground tutorial by Jacob Norris. The main thing about getting the snow to look good is having a subsurface color with a slight blue tint.
Secondly, adding a Sparkle Mask to the Roughness input will add a nice effect, one thing to keep in mind to make this pop is to not have the base color too bright. A third thing to add is a tiling detail normal to represent snowflakes laying on top of the surface, this will both help with the sparkles and the powdery look. A few things I have added to the shader are some more controls over the sparkles, like a fresnel to apply more sparkles at the glancing angles of the ground and objects. I wanted the sparkles to stand out even more but found it difficult with the default Termpoal AA method Unreal Engine uses, as it cancels out bright sparkles. When switching to FXAA, I got a much more extreme sparkle effect but I still prefer the default Temporal AA method overall for the scene so I decided to stick with that.
I applied the snow shader in 3 different ways to the various objects. For the ground, it was part of the landscape material, for solid snow objects, like the sculpted snow roof, it was used as its own separate material, and for blending on top of objects like rocks, tree trunks, and wooden objects I used the snow as a material function that I blended in using world alignment. I learned how to do this from Lukas Kölz's moss tutorial, I recommend checking that out. I also wanted to add tessellation so the snow would rise up from the top of the rocks, but couldn’t get that to work together with this method that blends the snow with the objects' Normal Map using the TransformVector. To solve this I added the snow with a second mask that uses the VertexNormal world space node, masking out the blue channel that faces upward which allows the tessellation to work.
Rendering and Post-Production
The lighting setup is pretty simple. First, I worked on the daylight scenario. I wanted to have a slightly cold skylight with some subtle fog, and a hint of warm sunlight. I wanted to create warm and inviting lights by the cabin, where I placed a lantern and some candles in the windows.
First, I used dynamic lighting and distance fields, but they didn’t work well with the cabin so I switched to stationary lights for the directional and sky-light. I used a custom sky sphere with an HDRI grabbed from HDRI Haven. In the night scene I’m using a similar setup but with different values, and I use the BP sky spere instead of a custom sky sphere. I also tweaked the exponential height fog to give it a more green tone instead of the light blue I have in the daylight scene.
For the post-processing I didn’t do any major adjustments, I mainly tweaked the bloom, exposure, contrast, and the film slope and toe values.
I got inspired to do the Aurora Borealis after seeing a beautiful concept art from Assassins Creed Valhalla. It’s been a while since I’ve actually seen this phenomenon with my own eyes as it rarely appears in Stockholm but I have seen it a few times when I was younger and lived further up north. I got inspiration on how to make the Aurora Borealis after reading this 80 Level article by Luiza Tanaka. I started out by creating 3 vertical noise masks that I packed into one texture. One mask is the main Aurora (red channel), one with just a few spots (green), and one for the base of the Aurora (blue).
The shader itself is an unlit two-sided shader, and I connect panner nodes with speeds in different directions to move the noise textures. Then I plug the noise textures into different emissive colors that I can tweak in the material instance. To add a pulsating effect to the Emissiveness of the Aurora I added a Perlin noise with controls for tiling and speed. To make the lights fade out at the edges of the mesh I added gradients that I plugged into the opacity. Lastly, I added a simple grass wind to add some movement to the mesh.
I learned so much from this project, mainly about working with shaders in Unreal Engine and creating materials in Substance Designer. It was a bit unusual for me as I didn’t start out with a clear concept or environment in mind, but it evolved into this scene over time as a nice bonus. It’s hard to say exactly how long it took me to finalize it, but I think I spent about 2 weeks on the various experiments and around 1 week on the actual scene. If you’re interested in learning to create snow shaders I highly recommend the snow ground tutorial by Jacob Norris I’ve already mentioned. I hope someone found this breakdown helpful and if you have any questions please feel free to contact me.
I would like to thank 80 Level for reaching out to me and letting me share my process behind this scene with everyone.