Tank Car Shelter: Hard-Surface Texturing & Photogrammetry

Tank Car Shelter: Hard-Surface Texturing & Photogrammetry

Teodor Ivanov did a breakdown of his 3D environment Tank Car Shelter made in UE4.


Hello everyone, my name is Teodor Ivanov, and I come from Bulgaria. I’m a 22-year-old student of Game Art at Breda University of Applied Sciences in the Netherlands. My passion is creating environments and I’m thrilled about the opportunity to talk about my work here on 80LV.

I’ve always been fascinated with nature and whatever surrounds me, so as a child, I would constantly draw everything I saw. The subjects were mainly farming vehicles, because I come from a village, and since a big chunk of my childhood was spent playing video games, I also drew a lot of weapons and characters. Later on, when I had to choose what to study, I somehow discovered that it’s possible to combine drawing and games, and that’s where everything started!

1 of 7

Tank Car Shelter: How the Project Started

It all started as a simple hard surface modeling practice where I would model a tank car and call it a day. When I was done, I wasn’t quite satisfied and decided to turn it into a bigger thing. At the time, I was already doing micro projects where I was practicing lighting and composition, so I decided to combine all these small projects into a bigger scene and hopefully come up with something badass at the end. After bouncing off different ideas with my teacher, he gave me an idea to make my hero prop abandoned after an explosion and then repurposed as a shelter by some wanderer.

Initial Development of the Scene

After I developed and refined the story, I started getting very ambitious about the scale of the scene. Since the very beginning, I knew I wanted it to be sort of playable so that as a character, you could walk around and explore it. Choosing the correct scale is really critical, and for this, I decided to make it based in the mountains. This way I was able to justify the story of a big explosion by adding a blocked tunnel on one side of the train tracks and a destroyed bridge on the other. Since the focus for this scene was hard-surface modeling, texturing, lighting, and composition, I decided to save time by utilizing the use of premade assets from Quixel Megascans and the Unreal Marketplace.

1 of 2

I did a very basic blockout in Unreal and started exploring scale, layout, and composition very early on. This helped me design the whole location to be self-contained and manageable to create, but also feel natural and give the viewer the feeling that the environment can expand even more. I was constantly checking for interesting vantage points and made sure to have interesting flow and composition by placing curious shapes and balancing between vertical, horizontal, and diagonal lines.

Simultaneously with designing the environment, I was also exploring different shapes and elements for the shelter itself. I wanted to escape from the symmetry of the original model, so I added the shelter on the far left. Another thing I also kept in mind was trying to introduce variety in lines, for example, having a lot of contrast between vertical and horizontal lines, and straights and curves. With the whole additional structure, I tried to keep it as logical as possible, adding elements that could be found among the rest of the train composition after the explosion.

As for the lighting and atmosphere, I decided on them at the very beginning and put it all in the scene as well. I wanted the feeling of an early morning in late autumn when it’s already cold, but without snow yet.

For reference and inspiration, I would go to the nearby forest every weekend to collect hundreds of images, look at photos/videos online, watch movies, play games and look at a lot of artwork, both classical and contemporary. My teacher Zoran Arizanovic was immensely helpful in suggesting good movies to watch. Also, books for lighting I highly recommend are Color and Light by James Gurney and Lighting for Animation by Michael Tanzillo.


Vegetation was undoubtedly the trickiest and most challenging aspect of the entire project. Ironically, this was not my focus at all, but it would always fill about 80% of the screen. When we look at the vegetation in forests, we most likely get overwhelmed by the sheer variety and awesomeness of nature. For this reason, I broke it down by analyzing my reference and made a plan of what makes a forest perceived as forest, and take the most important species of plants/trees. Next, I broke them down in sizes (age) and decided that my scene would revolve around pine trees and ferns. I never realized how many different species of pine trees there are until I started researching them. I picked the one called sugar pine, because of its elegance and amazing shapes.

For the production side of vegetation, I used SpeedTree, and I spent 99% of my time creating a ‘Master’ tree, and if the results are good, changing only a few parameters can produce dozens of variations. I was a beginner at this software and it probably took me 15 times more time than I had initially scheduled (I underestimated it a lot).

For the ferns and pinecones, I took high-resolution photos of a single leaf, cleaned up the Diffuse map in Photoshop, and generated the rest of the maps in Substance Alchemist and created the meshes in Maya.


At the time of this project, I was just getting into photogrammetry, so I didn’t rely on it for everything in this project. I decided to do some tests with capturing the almighty tree trunk, the staple of every beginner photogrammetry enthusiast, and some other objects I would need, such as ferns, wood stumps, smaller branches and pinecones to throw around in the scene. To learn about it, I found Grzegorz Baran’s videos on Youtube, who has the best and most detailed tutorials, all for free! I definitely recommend his channel to anyone who is interested in this workflow. Another brilliant video on this topic is a class by Alex Alvarez, where he explains his entire workflow and theory behind it.

The equipment I currently use is a mirrorless camera Sony A7 coupled with a Tamron 28-75mm f/2.8 zoom lens and a simple tripod. As a general rule, lenses with fixed focal length are known to produce the sharpest images, hence higher quality 3D models/textures. However, as Grzegorz explains in his tutorials, having a zoom lens provides more versatility and when combined with a decent camera, results are more than sufficient. The tripod is for additional stability, it’s always good to use one if possible. One very important detail when choosing a lens for photogrammetry is that the lens should have good minimum focus distance (macro lenses are best at that). Nobody seems to explain that and I had to find it the hard way by picking a Sony 50mm f/1.8 FE, which has a terrible minimum focusing distance of 40cm. The problem with this is that the camera is then not able to go close enough to capture details, especially with small objects, such as small branches or pinecones.

For capturing objects and surfaces, I used two methods - Photogrammetry, utilizing Agisoft Metashape and Single image reconstruction, using Substance Alchemist. I can go into a lot of detail here, but it’s best if you just look at Grzegorz’s tutorials, as he explains both processes brilliantly and very in-depth.

Here are a few breakdowns of how I approached surfaces and objects using both methods.

Texturing the Tank Car

For texturing the tank car, I decided to give it unique textures using Substance Painter, as it’s the hero prop in my scene. In order to optimize it as much as possible, I used tons of UV mirroring and stacking. I skipped making a high poly and baking it down, instead, I used a mid-poly workflow and face-weighted normals to achieve the desired effect.

Rust was the main feature in texturing this asset, and I had to keep in mind two things throughout the entire process: where rust forms in reaction to weather and creating areas of interest and areas of rest. This way, I avoid making it overdone and busy, but interesting and more artistic. To achieve a believable rusted effect, I had to divide the areas by rust from weathering and rust from human use, e.g. bruises and damage of the surface prone to rust over time. Also, having created the lighting in the level was a big plus, because I could always check how the surface reacts to the final environment.

Another important aspect of texturing this asset was to make it interesting and cool, not just a boring, old, rusted wagon. I struggled quite a lot with it, because for quite a while I didn’t know exactly what I wanted to achieve. Thankfully, Andrii Mykhailov helped me with some amazing tips on how to approach this. You can check out his badass work here. To improve my texturing skills, I checked out a texturing breakdown made by Gianpietro Fabre, where I learned amazing tips and tricks both specifically for Substance Painter and the general mentality when texturing.

In order to get more realistic results, I took pictures of a lot of rusted surfaces, especially on one metal container, which seemed like it had fallen down from the sky because it was exactly in front of my house on the day when I started the texturing process. I process individual rusted areas in Photoshop by turning them grayscale and playing with Levels until I achieve good values (near pure white, with some variation) to use as masks in Painter.


Now, something about the cloth.

I’m especially proud of creating the cloth for this project. Objects such as clothes and blankets not only serve as a contrast to the hard-surface objects but also breathe life into the scene and help the story I wanted to tell.

I used Marvelous Designer for simulating the cloth and to achieve better results, I used custom geometry to simulate on. This way I could simulate the cloth reacting to the props exactly how I wanted. Next, I cleaned up the simulation results and added more artistic details, such as more folds, wear-and-tear, clothing seams, pockets, etc. After my high poly ZBrush model was done, I did manual retopology in Maya, quick UVs, and did the texturing in Substance Painter.

As for the jeans and the shirt, I created them from scratch in the traditional Marvelous Designer way, and when I had something I was happy with, I’d move to the ‘hanging’ simulations and the above-mentioned process.


All in all, working on this project was a blast, I went through a rollercoaster of emotions and learned way more things than initially planned. I’m incredibly thankful to Zoran Arizanovic for guiding me when I was stuck and to Lothar Zhou for his awesome feedback.

My biggest challenge was working on the trees, I sincerely regretted picking this type of natural environment, but I pushed through by being open-minded, looking at a ton of reference material and analyzing how I could make the best trees possible (with my skillset and timeframe).

Another obstacle I experienced, which is common for anyone beginning to work on something, was actually finishing it. I’d broken down my project into stages: research, pre-production, production, and polishing. I think the key to finishing a project is scheduling every aspect of it, breaking everything down into small pieces, and creating a super strict deadline. Even if you don’t make it, you’ll still have done a significant amount of work and it will be easier to keep the ball rolling.

Teodor Ivanov, 3D Environment Artist

Interview conducted by Kirill Tokarev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more