Making T-90A Tank in Blender & Substance 3D Painter

Konstantin Yadevich talks about the workflow behind his T-90A tank and shares some modeling tips.

Introduction

My name is Konstantin Yadevich, I am from Belarus. I have been learning 3D modeling since 2010 working as a freelancer for several years in 3D (mostly gamedev but also cinema sometimes) and selling some 3D models at Turbosquid. I learned 3D mostly via Youtube and the internet but a few years ago passed the Draft Punk course at XYZ school. This helped me boost my skills a lot.

I never worked for any companies full-time, only as a freelancer on specific projects. Some of the companies I can name are Room 8 Studio, VAL Studio, and Almaz-Antei.

As for my latest projects, I did some game-ready vegetations for Jurassic Park, an SU35 aircraft for the film “Sky” (it has just come out), and a full real-time S400 anti-aircraft system for educational software, which will soon be published on my ArtStation page.

After I finished my previous personal project – B-4 Howitzer – I decided to pick my next task. I was searching a lot to find something really stunning, good-looking, and difficult enough among the military tech, and I finally found this monster. I was really impressed when I saw the first images on the internet and immediately decided to reproduce it. A real tech beast with red burning eyes! What can be better for a personal project?

I set a goal to recreate this monster tank as accurately as I can understand it and make it real-time. I didn’t set up any strict time limits but decided to save polygons where it was necessary. I expected something like 4 texture sets there to get a good texel density, and that is what I ended up with at the end.

1 of 2

References

I started collecting references, and in a few days, I had more than 800 images and about 10 videos, including some schemes of the real vehicle and scale models. I didn't use anything special – Google, Pinterest, and YouTube. I must add that you need to spend much more time on research than just scrolling through Google Images. Visit different forums and military websites, there you can find a lot of useful photos taken by ordinary people in different museums and exhibitions. They are usually not as common as in advertised articles. Also, always find assembly schemes of scale models. This will really help you understand the construction and clarify a lot of hardly visible parts of the model. For references I also used PureRef.

1 of 2

Modeling

When I was done with the references, I started working. I used Blender for the whole modeling process, ZBrush for sculpting, Marmoset for baking, Substance 3D Painter for textures, and some Photoshop for PostFx and CC at the end.

My usual modeling pipeline is:

  1. Blocking
  2. Non-optimized low poly (the actual low poly, without much care about useless geometry. Somebody calls it a detailed draft, mid poly – doesn’t matter)
  3. High poly SubDiv
  4. Sculpting (for the parts where it's needed)
  5. Final low poly
  6. UV
  7. Baking
  8. Textures
  9. Rigging/animations
  10. LODs

I should mention that I don’t use any special Blender add-ons for modeling, just default stuff and 2 hands.

Here is my blocking from January 2021:

The SubDiv model is also done using just bevels/support loops with no secret tricks, so it is as clear as can be. You just click Ctrl+2 on the model, and it works fine.

Nothing hard with the tracks as well: I counted the real number of the tracks in the reference, made one segment, added array modifier, and pulled it along the curve. Then I tweaked the curve a bit to make all the segments fill the curve. 

For this specific model, I sculpted some big parts (tower base, hull base, tree, and some additional large elements) and fabrics. For the tree, I used some purchased alphas/brushes.

1 of 2

In the end, I got this high poly model and decided to publish it on ArtStation. I also decided to make some important textures (like its eyes), some lights here and there, and several types of materials to make the high poly model look cooler.

After this, I got back to low poly and started polishing the mesh. This usually includes deleting different backfaces, collapsing unnecessary edges/points, remodeling some parts, and retopology of the sculpted parts if needed. Basically, nothing really interesting except the Shtora system (the front boxes with demonic eyes). This part has a lot of small bumps around and I really wanted to reproduce them. I knew that baking onto the actual box will make it look too flat and fake, and if I do it simply with geometry, it will be way too expensive. So I decided to make it with planes and opacity. I created 2 planes for the side view of the bumps and one for the rounded tops. For these planes, I increased the texel density twice later in the UV stage.

UVs

When the low poly is done, I start making UVs. First of all, I pick a rough texel density to aim for. In this case, it was around 600px/m in 4K resolution. Then I try to roughly cut the model into several logical parts with something close to the planned TD. For this, I make the automatic UVs and check the TD. When I'm happy with the rough numbers, it's time to finally start the UV. 

Before I start cutting seams, I always go through the model and look for identical elements, they will be the actual overlaps on the UVs. I find everything I want to overlap on the UV, attach it to a separate object and hide it. I do this step now because who actually wants to unwrap the unnecessary duplicates?  We will come back to them later, after baking.

By the way, when you think about making some specific element an overlap, you should always think about Ambient Occlusion. It should not only be identical by form but also have the same (or close) AO.

Here is one of my mistakes for example. These little handles seemed identical, but AO was totally different:

When all the duplicates are done, it's time to finally cut the seams. Here could be a huge article about UVs, but I will limit it to basics.

Just place as few seams as needed in most invisible places, all the hard edges are seams, all the sharp angles are hard edges. Try to avoid too long stretches and straighten the parts that are similar to rectangles (difference cylinders, ropes, tubes, etc.) After you've unwrapped all the elements, think about TD. More visible and important parts should have more TD and some invisible – less. 

For example, the bottom of the hull is very hard to see and very big at the same time, so, to save the texture resolution, I cut the bottom into 2 parts, overlapped them, and decreased their TD twice. As a result, I increased the TD for other elements.

At the same time, for example, I increased the TD for our Shtora bumps (as I said later) to make them more visible from distance.

When the TD proportions are done, you can pack the UVs. I use the UVPackmaster add-on for Blender. It packs cool enough and always gives very tight UVs. To work with UVs and check TD, I also use the TexTools addon. I do packing in several iterations checking the TD I get and comparing with other texture sets TD. I usually try to get no more than a 15% difference between different TD sets. If I see there's more than 15%, I put some of the elements from one set to another and repack again until I get the necessary result. 

Baking

The next step is Baking. Usually, I hate it (so messy and problematic). I use Marmoset for baking. The idea of baking is to separate all the models into different groups that will not intersect with each other and to do this for both low poly and high poly models.

When you have as many elements as here, this is a real pain. To reduce the pain, I use several tricks:

1. I divide the low poly model into groups starting from bigger elements to lower ones. The point is that bigger elements usually use proportionally bigger cages than lower ones, and sometimes it's really hard to set up an average cage in Marmoset later.

2. Always name the groups right to use the QuickLoader option in Marmoset, this will save you tons of time when re-importing the fixed model (you will do it thousands of times before you get the result, believe me). The correct name looks like "T90Tower_01_low, T90Tower_02_low, T90Tower_03_low, T90Tower_01_high, T90Tower_02_high, T90Tower_03_high," etc.

3. To find the necessary parts of the model when grouping high poly, I usually do this: turn on the random color of the matcap in the viewport and hide/reveal the HP to see what I missed. Here it is:

4. The HP elements that were not included in any groups (duplicates usually) go to the Support_AO object and are imported to Marmoset as well to help with baking AO.

One more important thing is what is supposed to be animated in the future. If you have some elements that will be rigged and moved, you should think about it right now and place them so AO will be correct. For example, I know the turret will rotate, so to bake the hull, I placed the cylinder instead of the actual turret to have a soft shadow at the bottom and no unnecessary shadows from the gun/equipment. Same for the wheels and some other parts.

After a few iterations on each texture set, baking is done and we can move to the “return duplicates" step. I turn on the duplicates I hid before, adding some eye-burning material (like red) to see it better and start copying the details and placing them around (during this stage you will find some wrongly done duplicates and go back to baking a thousand times more).

Finally, my low poly baked version. 

If you are still alive, congratulations. We are in the texturing step.

Texturing

Time for a little tip. Sometimes when you import your model to SP, it breaks the shading for some model parts. I found out that this happens because of triangulation. No idea how to fix it, but I just have to turn off triangulation for this texture set.

First of all, I create folders for the different materials I see and place there some simple ones, like metal, green paint, rubber, fabrics, etc. I do it to get the material distribution scheme. This helps me make a more interesting view of the model. At this step, I always add 2-3 slightly different green paints, several metals (darker/lighter ones), rubber, some plastic, a few fabrics, etc. When I'm happy with the overall view, I start working on the materials one by one. As for the painted metals here, I divided them into 2 types by bumpiness: the rough bumpy one and the soft thinner one. Also, there were 4 color variations for green paint. Here are the layers for the metal I used here:

For the basis, I used a 3-layered cover here: metal – primer – paint. There should probably be more layers here, but this was enough for me. Metal goes to the bottom, then primer and paint overlay it. As you see here, I made 3 tints for the paint, it makes the result more interesting and not so plain. Painting edge wear was done using the standard “metal_edge_wear” generator, then “warp” modifier to make it curvier, some “clouds procedural” to make it more random, and finally a paint layer where I corrected all this stuff manually. For the armor I also added these bump layers:

When the main materials are done, I go for dirt, dust, leaking, etc. There were a couple of layers for this:

  1. Leaking – glossy leaks on vertical surfaces where the water has been drained. I use some self-made alphas for this.
  2. Dust – sandy/dusty rough material with a yellowish color. I usually place it based on AO and grunge.
  3. Wet Dirt – glossy wet dirt that comes from the bottom. I used AO and position gradient (from the bottom), plus some manual work with a splashes stencil.

After this, the final texturing layer is usually the “Details” one. Here goes everything that I paint manually and that is not related to other layers. They are usually different decals, transitions, holes, etc.

This makes the work even more detailed. When I'm happy with the textures, I move to rigging using my lovely Blender, of course.

Rigging

Here I made a pretty simple rig. Here is the main scheme: a bone for each wheel to rotate them, tower and gun bones, and a bone system for the machine gun. 

The wheels' X-rotation was hooked to the main empty local Y-location using drivers. So, when I move the empty location, the wheels rotate. For this, I used a very simple expression: var*(-2.9). “-2.9” is just a coefficient that was set to my taste to make the wheels rotate at the necessary speed. Same for other wheels with some different coefficients depending on the radius of the wheel.

The tracks were rigged with the same algorithm. Y-location of the tracks was hooked to the empty Y-location (the tracks are attached to the curve at the same time). So when I drag the empty, the tracks start moving along the curve.

The MachineGun rig was way more complex and used some of the constraints – “Damped Track” and “Inverse Kinematics”. Some images explaining the rig system:

1 of 2

Rendering and Presentation

Most of the images were rendered in Cycles. Also, I used Photoshop for some improvements later. For most of my rendering, I use something close to a 3-point system light: warm soft HDRI + 1 cold Rim Light + 1 cold Side Light. My favorite HDRI I use almost everywhere is museumplein.hdr from HDRIHaven. It gives the best result for me with default settings. The light I used in the scene is Sun Light with a big enough angle (usually 15-20 degrees) and not too much power (0.5-2).

As for the camera, the important thing I learned some time ago is to set the Focal Length to something much bigger than the default settings. I usually use 100-120mm.

Some corrections at the Color Management tab also add some cool contrast.

For the postwork on the render, I use a cool free Photoshop add-on called “Nik Collection”. It helps create any sorts of effects (like contrast, saturation, small dirt patches, vignette, etc.), it's very fast and very cool – recommended!

In the end, I make a background (usually soft and calm enough but with hardly visible details in it) and some sparks around. This supports the tank but doesn’t attract too much attention at the same time.

And finally, we are done!

Afterword

This project took me almost a year (during free time) to finally complete. Actually, there are about 2-3 months of concentrated work here.

I learned a lot of new techniques and tricks here, especially after talking with different more experienced guys. They really helped me a lot at the very end (there are credits on ArtStation). So, big thanks to everybody for their advice. The most time-consuming and difficult step was actually learning the tank construction at the beginning (especially the turret part), finding all the necessary references, and baking is always boring as well.

At the very end, I wish a lot of patience to everyone who is about to start such big projects, keep in mind that this will pay off in the future (in every sense). If this article helps you increase the quality of your work by at least 1%, then it was worth writing.

Thanks for your attention!

Konstantin Gerhald, Vehicles/Props Artist

Interview conducted by Arti Sergeev

Join discussion

Comments 3

  • Anonymous user

    Knowledgeable! Big thanks to Konstantin Yadevich

    0

    Anonymous user

    ·30 days ago·
  • Anonymous user

    Amazingly done. Easy to understand. Workflow is something people dont want to share and tgis is well detailed interview.
    Thank you

    0

    Anonymous user

    ·a month ago·
  • Movchan Gregory

    this is very impressive

    0

    Movchan Gregory

    ·a month ago·

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