Alexander Kolyasa showed us his workflow behind the Toyota Land Cruiser FJ60, talking about his techniques that help break the uniformity of masks, setting up realistic marks from windscreen wipers, and making the car drive with the Chaos Vehicles system.
Introduction
Hello, my name is Alexander Kolyasa. I’m from Ukraine, living in Poland. I am 32 years old and have been working as an environment artist at Techland for the past six years. Previously, I worked in mobile game development, and my total gamedev experience is about 12 years now.
In my free time, I enjoy working on personal projects, playing games, teaching students how to create game-ready 3D models and textures at an online school, and trying to travel as much as I can.
Toyota Land Cruiser FJ60
The idea for this project came to me a long time ago when I saw amazing photos by StanceWorks.
I instantly fell in love with this car and the aesthetic of road trips in an off-road vehicle through the beautiful landscapes of the United States. I have always admired the diversity of nature found in different parts of the U.S., especially the abundance of national parks. That’s why I started working on this car, trying to create my vision of the perfect journey – one where an iconic vehicle takes us through national parks and landmarks like Canyonlands, the Grand Canyon, Yellowstone, and many more.
One day, I hope to take a trip like this myself, but for now, I can bring this dream to life in 3D.
Modeling
There were no special tricks here. I collected a lot of references and started building the high-poly model.
Some parts were made using subdivision modeling, while others relied on regular bevels and weighted normals. Initially, I planned to follow the full pipeline – high-poly, low-poly, baking, texturing, and rigging. However, during the process, I realized I already do a lot of optimization in my daily work, so I decided to skip the low-poly stage.
Instead, I lightly optimized the subdivided mesh to make it less heavy but left it as-is to move straight to texturing. The final model has around 800,000 triangles, which is quite high for a game-ready car. However, during my tests in Unreal Engine, this mesh had no noticeable impact on scene performance. Since my goal was not to create a playable build for others but to focus on detail and beauty within the capabilities of my PC, I saw no need for further optimization.
This decision saved me a lot of time, which is always in short supply. Without it, I might have finished the car a few years later.
Texturing
Texturing was one of the most important stages for me because it is both my favorite part of the process and the stage where I believe the potential of the work is truly established. I’m convinced that good texturing can make even a basic cube look great, while poor textures can ruin the most complex and well-designed model.
At this stage, I took my time, working in the evenings for an hour or two or sometimes on weekends – when I could find the time. The texturing process stretched over several months in this mode, but if combined, I think it was around 4-5 full workdays of 8 hours each. I experimented a lot, tested different ideas, and spent a significant amount of time browsing the internet to find the perfect references.
I paid close attention to small details within the limitations of my chosen texel density of 10 pixels per centimeter. I added subtle imperfections like faint paint irregularities and barely visible scratches, which might look like they came from polishing or a car wash with large automatic brushes. My main rule for texturing is, "No material can look realistic if it’s made with just one fill layer and a default mask."
This is a common mistake among beginners. They tend to overlook details and oversimplify surfaces, looking at them only superficially. But if you closely observe any material around us, you’ll find color variations, imperfections, gradients, tiny specks of dust, and fibers. To achieve this, I always mix multiple fill layers with slightly different hues to create subtle gradients, random spots, and variations in the base color. I also combine many grunge maps in the layer masks to achieve a more unique and realistic result.
One of my favorite techniques to break the uniformity of masks and avoid large flat areas is using Gaussian Noise and Dirt 5 in Substance 3D Painter. I increase the tiling of these textures and blend them with varying opacity and blending modes into different masks or even directly into the base colors. This helps to create a fine pixel noise in the details, mimicking the natural irregularity of surfaces, especially dirt. Dirt, for example, consists of countless tiny particles – grains from different soil types, fibers from various fabrics, etc. It’s never uniform and never spreads evenly.
By adding these noise textures, even a single fill layer can look more diverse. And if you layer additional fill layers with slightly different colors on top, the result becomes even more convincing. Additionally, these noises helped me achieve a realistic effect of raindrop streaks on the windshield and dust patterns on the front bumper.
I also want to note that standard generators alone will never provide the necessary realism if you just tweak the sliders. It’s essential to hand-paint and refine them manually. I always tell my students that generators don’t control their textures. You must control the generators, and you should have full control over the result.
Here is a comparison of what the default Dirt generator looked like in my case and the result after I blended it with several grunges and applied manual painting here and there to remove it from unwanted places. Everything is still pretty procedural and I can change the amount of dust just by changing one slider in the base dust generator, but it looks way better with all those leaks and small details from additional grunges.
Wiper Marks on the Windshield
One interesting detail I worked on was the wiper marks on the windshield. Initially, I struggled to achieve the desired effect, so I hope this process might be helpful to someone.
At first, I tried using real photos of wiper marks, but they either didn’t match the shape I needed or lacked the resolution to create a believable mask in Substance 3D Painter. Instead, I used the Radial Anisotropic Noise in Substance 3D Painter. I switched it to planar projection and positioned its center at the pivot point of the wiper rotation. This created multiple concentric circles that matched the shape of the wipers on my car.
Then, in the Multiply mode, I added the Circle Partial alpha to limit the circles to the size of the wipers and define their angle. After this, I manually painted dust accumulation at the start and end of the wiper’s path. Finally, I adjusted the levels to control how much dust the wipers removed and how many streaks they left behind.
This combination of techniques allowed me to create realistic and dynamic wiper marks that added an extra layer of detail to the model.
Preparing the Model for Driving in Unreal Engine
Making this car drivable wasn’t very difficult, thanks to the Chaos Vehicles system in Unreal Engine. I used the blueprint presets provided in the City Sample vehicle project. Rigging in Blender was straightforward – parts of the mesh were simply bound to bones. The key here was correctly naming everything: one bone per wheel, one for the car body, and then exporting to Unreal Engine.
Using the Chaos Vehicles plug-in, you can prepare a car for driving in a single evening. The longest part of the process is fine-tuning settings like tire grip, suspension stiffness, and other parameters. These are adjusted by changing numerical values and then testing the car to see if it behaves the way you want. Is it too fast, not turning enough, or too responsive? These tweaks are all part of the fun of testing.
There are plenty of tutorials on YouTube about this process. I even recorded my own tutorial, but it’s in Russian only, so if you know it, you can watch my tutorial showing the entire process on another car.
Alternatively, I suggest you watch the tutorial by Epic Games, which I used to learn the basics by myself when I first tried to do that. The entire process is explained in this 20-minute video.
Rendering
Although this project was initially intended for a scene in Unreal Engine, over time, I decided to present the car separately by rendering it in Marmoset Toolbag 5. The Unreal scene is far from finished, with lighting and scene composition needing more work, so I opted to create a small environment in Toolbag just to showcase the car.
For the environment, I used assets from Megascans, such as a fully scanned mountain range in the background. I blended several gravel and soil materials in Quixel Mixer and scattered bushes and larger rocks around the scene. Since I knew most of these elements would be blurred by the camera’s depth of field and the focus would be on the car, I didn’t aim for perfection in the environment. Still, I was happy with the final result.
The lighting setup was straightforward. I didn’t use any additional light sources, relying entirely on HDRI maps. I tested about ten different HDRIs, constantly switching between them to find the right mood for the scene.
Finding the right angles for renders was one of the most time-consuming parts of this stage. I spent hours flying around the car, adjusting the lighting, and switching HDRIs. Eventually, I settled on ten fixed camera angles, and in combination with multiple lighting setups, I rendered about 100 images. Afterward, I spent a long time narrowing down the renders to a smaller selection for posting on ArtStation without overwhelming the viewer.
Once I selected the images, I moved on to post-processing in Photoshop. My workflow here is simple: I use the Camera RAW Filter and adjust sliders without a strict order until I achieve the desired contrast, brightness, and color balance. Here, I just follow my heart, as I have no master's degree in color grading, so at that stage, feedback collected from friends and colleagues may become very helpful.
Conclusion
It was a real pleasure to work on this project, as, in a way, I created a yet-unrealized dream of mine. If there’s one piece of advice I’d like to leave for anyone reading this, it’s to always take your time with personal projects. Experiment, try new ideas, and don’t be afraid to make mistakes – they’re a part of the learning process.
Another important lesson is the power of storytelling through your work. Whether it’s through the textures, small details on the car, or how every element connects to a larger narrative, always strive to tell a story. Paying close attention to these details is what makes your project stand out and creates a deeper connection with your audience.
Thank you for taking the time to read about my project. I hope it inspires you to start or continue working on something you’re passionate about. Good luck, and happy creating!