Artem Ostapchuk spoke with us about the creation of this peaceful environment, inspired by Japan's natural landscapes and centered around a Hokora, a small Shinto shrine.
Introduction
Hello everyone! My name is Artem Ostapchuk, and I'm a Senior Environment Artist currently working in 11 Bit Studios on The Alters. I’ve previously worked on several PC and VR projects, but this one was a significant step forward for me.
I was first introduced to the world of 3D art almost 9 years ago, and since then, my path has been chosen. I have a programming background which has been a huge asset in my work, but I'm glad I chose the art path. It's definitely not for everyone and can be demanding, so it's important to follow what you truly enjoy. From the very start of my 3D art journey, I was lucky to be surrounded by people who gladly shared knowledge with me, and I'm very grateful for that. There are also a lot of online communities where everyone can find help and ask for feedback. Knowledge matters, but so does skill, that's why I love to work on personal projects from time to time. They help me stay sharp, keep up with the latest tools, and continue growing.
Getting Started
I have always been inspired by the natural beauty of Japan, its rich traditions, culture, and architecture. With so many inspiring places, I knew I wanted to create an environment like that someday. And playing the Ghost of Tsushima game only strengthened my desire. This game beautifully captures the feeling of living, breathing nature and its undying beauty, which always surrounds us. With this project, I aimed to create a dynamic environment that captures a sense of life and presence. And also to check new versions of Unreal Engine 5 and tools that can help me achieve this.
Choosing references and rewatching my screenshot collection for this project was not an easy task, there's so much stuff I wanted to create. The Ghost of Tsushima artbook was a huge help, it's beautifully done and played a big role in shaping my vision for this project. One of its concepts, created by Romain Jouandeau, caught my eye and was the main inspiration for me. I highly recommend this artbook, it's packed with incredible, inspiring artwork throughout.
I always begin a project by collecting a set of references and learn all I can about the subject, it helps me understand it and set a clear direction from the start. I don't focus on building a massive reference library upfront, I prefer to expand it gradually as the project evolves. That said, it's essential to find references on composition, mood, and lighting of the scene, without this foundation, progressing with the project becomes much more difficult.
When it comes to tools that help me with this task, I like to use PureRef for my library of references. I also gave Miro a shot, but for personal projects, PureRef does the job perfectly.
Also, while doing research on a subject, I like to keep all links and pages open in my browser. There are tools that can separate your tabs into different categories so that everything is organized. I personally use workspaces in Opera, but similar features likely exist in other browsers you prefer.
Blockout
At the beginning of a project, I like to block out the layout of the scene using simple meshes to get a rough sense of scale, composition, and spacing. Early on, I also try to establish the main camera angles as quickly as possible. This helps define the visual storytelling and gives me a clear direction moving forward. Setting the right focal length and dialing in other camera parameters from the start is crucial, it influences how the entire scene feels and reads, and making those decisions early prevents a lot of rework down the line.
I usually create my blockout meshes in Blender, then quickly export them to Unreal Engine 5 using the Blender for Unreal Engine plug-in. It streamlines the workflow, allowing me to iterate on meshes in Blender and send them over to UE5 with just one click. Sometimes, I need to export a lot of meshes this way, and each one needs the Export recursive property enabled. Here's a quick tip to avoid setting it manually on every mesh: Enable the free Copy Attributes Blender add-on. Set Export recursive on one mesh, then select all the others, ending with the first one that has its set. Press Ctrl+C to open the Copy Attributes menu, choose Copy selected custom properties, then in the next menu, select bfu_export_type. This copies the property to all selected meshes so they'll export correctly.
After the blockout phase, I move on to iterating on the meshes, rough sculpts, and models without proper UVs. At this stage, I'm not focused on quality, it’s all about getting the forms right. The new modeling tools in UE5 are a huge timesaver, you can modify or sculpt meshes directly without constantly switching between apps. For materials, I use quick setups with tri-planar textures, along with AO and curvature masks, to get a fast visual read on the surface. With that, I move on to the next stage, where I create more detailed meshes with proper materials and iterate them until the end.
Vegetation
My primary goal for the vegetation was to make it dynamic and believable, so I spent quite a lot of time trying different things out and searching for information. All my vegetation uses Nanite, and aside from the material of the needle, everything is set up as opaque mesh cutouts without Masked enabled, which gave me the best performance and visual results. It still can be quite expensive, and Nanite doesn't really love handling small triangles, but for a personal project, it's fine. I experimented with simulating wind in SpeedTree and exporting it to UE5, but it didn't work well in my case. So, instead, all vegetation movement is handled using World Position Offset (WPO) in UE5, driven by vertex color masks and UV gradients for control. Basically, I apply simple swaying to the entire tree, then add branch-level variation by offsetting the motion using different vertex colors. Smaller branches and needles get additional movement, multiplied by the wind and masked with UV. It's always a good idea to set up vertex colors in SpeedTree.
Grass and flowers use a similar setup but with more advanced World Position wind masks to give their movement a stronger directional feel.
If you want to create something similar, I highly recommend checking out PrismaticaDev's YouTube channel, it's packed with practical tutorials on WPO and other UE5 shader techniques. Super useful stuff. For example, there's a WPO-based drooping shader that I found to be a much better solution for ropes than traditional cloth simulation.
I sculpted some of my trees and tried new features of SpeedTree 10 such as adding splines along the imported mesh for adding branches on it. Other than that, everything is pretty straightforward: grass is a collection of single grass blades as fronds on splines, and trees use branches and baked needles atlas (also made in SpeedTree).You can find everything you need to know about Speedtree on its official YouTube channel. Sarah Scruggs does an incredible job consistently putting out high-quality tutorials, definitely worth checking out.
The bark material wasn't originally made for this project, but I tweaked it and ended up using it on some trees and as a smart material in 3D Painter. I also created a few other materials specifically for texturing assets in 3D Painter. I always start with the height map, then build out the diffuse and the rest of the textures from there.
A quick tip: If you want sharper detail in your bark, try the Quantize Grayscale node. It breaks the height map into defined steps, which you can then blend or use as a mask. It's an underrated node and surprisingly effective.
Texturing
For texturing assets, I used two main pipelines. Smaller assets were textured normally in Substance 3D Painter (with the help of materials from 3D Designer). For larger assets like the Torii gate or stairs, I created masks (also in 3D Painter) to blend materials directly in UE5 and also made use of AO and curvature, which I baked into vertex colors with the help of UE5's modeling tools. A few meshes, like rocks and moss clumps, don't use specific baked materials at all, instead, they rely on tri-planar shaders with nanite displacement and top-down masks for elements like moss coverage. I also use custom primitive data parameters, they give me more artistic control without having to create extra material instances.
For the shrine I initially wanted to try out a new mesh paint tool in UE5.5, but decided to go with a masked approach in the end, similarly to gates and stairs.
Composition
The final scene came together through constant iteration. I kept adjusting the layout, lighting, and asset placement until everything felt cohesive. For me, it's about reaching a balance between large and small forms, making sure all assets meet the quality bar I set. At some point, you just have to call it done, there's a threshold where pushing further isn't worth the time for a minor visual gain. Knowing when to stop is part of the process.
When it comes to scattering details, I originally planned to use the Procedural Content Generation (PCG) tool in UE5. But since it keeps changing with each new release, I decided to hold off until it becomes more stable. Instead, I used UE5's default foliage scatter tool. The foliage scatter tool also offers better artistic control compared to PCG, and that was important for me, especially with so many camera shots planned for this environment.
The landscape uses custom materials I made in Substance 3D Designer, with Nanite displacement enabled to add extra detail and depth.
Lighting
The lighting setup was pretty minimal. I used a Directional Light set to 1 Lux, a Skylight with real-time capture and intensity of 0.7, Exponential Fog with a pretty low value, and a sky atmosphere with increased Mie scattering and absorption scale to enhance light absorption and depth in the atmosphere. When it comes to lighting and rendering, huge thanks to William Faucher for his helpful tutorials on this subject.
I also added a few lights set to low intensity to highlight some forms, like the lion sculpture and Torii gate.
For the sky, I used a dome hemisphere with an HDRI texture from Poly Haven. The movement of the sky is fairly simple, with a mask for a lower part of the sky. My setup is somewhat similar to this setup by Ghislain Girardot. He shares a lot of valuable insights, and I definitely recommend checking out his work.
To add more motion and atmosphere to the scene, I used a few paid tools: Easy Fog, Background Birds, and Ocean System for Rendered Cinematics. Easy Fog helped me introduce subtle, moving fog across the environment. Background Birds is great for quickly adding Niagara-based birds, and the Ocean System worked well for bringing more life to water surfaces. I also added a simple Niagara effect with leaves blowing in the wind to further emphasize the weather and bring even more life to the scene.
With all that in place, I was ready to move on to capturing the scene. I used the Movie Render Queue plug-in, following the settings recommended by William Faucher. I also applied a light camera shake effect to some cameras. All renders were then imported into DaVinci Resolve for light color correction and sound design. I didn't do much to the footage, just minor tweaks to curves and saturation to offset the difference from UE5's output.
Conclusion
For me this project was an opportunity to experiment and try new things, so I wasn't really tracking time and instead focused more on steady progress and hitting my creative goals.
One of the main challenges is that sometimes, certain approaches just don't work out, and you have to scrap what you've done and start over from scratch. While that can be frustrating, I actually enjoy this part of the process because I don't work under a strict timeframe. It gives me the freedom to experiment, learn from mistakes, and ultimately find better solutions without pressure. Plus, some bugs are just too funny to get mad about.
The biggest lesson was to trust the process and embrace iteration. Every setback is a chance to improve, and experimenting often leads to unexpected solutions. And finally, knowing when to stop refining and call a project done is just as important as pushing for quality.
Just getting started is the hardest part, so begin with something simple and build from there. Avoid getting stuck on a single task for too long, shifting your focus can help you notice things you'd otherwise miss. Make time for breaks, it's easy to lose track of time when you're doing something you enjoy. And share what you've learned with others along the way.