07 Oct

Adventures in automated World of Tanks hit zone skin mapping

WOT (World of Tanks): WOT Wikipedia
Servers: North America, Europe, Russian

First a bit of teaser. A labeled hit model side view of the German heavy Löwe tank:
Löwe hull #1

If you play WOT you probably know that ideally you want to shoot at an enemy’s vehicle vulnerable spots to do max damage.
It’s kill or be killed. Kill the other tank before they kill you.
And maybe you want to find good cover and be an effective sniper too.
Although it’s not everything to playing WOT well. You need to use effective combat tactics and develop strategies et al.

Some must reads on strategy, tactics, game mechanics, etc.:
Wiki Battle Mechanics, Wiki Basic Tactics
Tips, Tactics and Strategy — Visualized
Guide for Enhancing Your Strategy On Each and Every Map
How to be a Team Player – Beginner Guide – Basic Team Play Guide and Game Mechanics
(A few other good ones I can’t find the link for at the moment.)

One thing that can help you target better are colored hit zone skin mods that some have created.
They take the base vehicle texture maps (most are of the high detailed 2048×2048 DDS DX1 12bit color variety) and apply some sort of color highlighting to vulnerable target areas.

The Russian Korean Random guild made their own set of popular colored hit skins here: Korean Random colored skins

Example:
Korean Random color skin sample

Pretty effective, but I find them a little too busy, adds too much noise to the mental targeting process.

Another player has made hitzone skins recently SteelDevil’s Blog but I have yet to try them.

By priority, based on my study, the ideal targets are: Ammo bays, gas tanks, engine, then possibly a crew member or at least a thin armor spot.
Furthermore to better the chance of your shell penetrating, you want priority for thin over thick armor.
Now almost always a vehicle will have it’s thickest armor in the front.
In general the backs of turrets, the hull back, the sides of the hull and the chassis (the body just behind and above the treads) usually have thinner armor of varying degrees.
Most vehicles even with the thick armor in front will have one or more vulnerable thinner armor spots towards the bottom front, or maybe a few good spots like a driver view port.
Another possible priority for tanks with turrets is the tank rotor; a circular area where turret bottom and vehicle hull meet. A hit here could effectively stop your opponents turret from moving making it hard to target you for a while.

Another consideration is your relative gun angle vs target angle. For as much as there is a slope between your gun and the target metal then there is a chance of your shot bouncing off. A 90º angle shot has the least amount of chance of bouncing off.

Yet another consideration the game adds some randomness to your shots.
Even if you have a vulnerable spot targeted at a perfect angle, your shot my not land exactly where you target. In my tests, with out using any mod equipment, there is roughly a one in three chance your shot will hit exactly where you aim. Otherwise it could be slightly to significantly off.
Note the client constantly calculates the correct trajectory for you every time you even slightly move your gun so that’s probably not much of a consideration.

Finally if you do manage to penetrate the armor before a vulnerable spot, like an ammo rack, there is a saving throw (according to the Battle Mechanics page it’s 27% chance for the ammo rack and 45% for a fuel tank).
When it happens though, it’s great to make that well placed shot and see your enemy instantly blow up!

In my hit skin design I want just the main priorities on the skin to be highlighted
so there is less confusion in split second decisions.
Example:
Typically with most vehicle hulls there will be an ammo bay in about the middle area some place (below the turret if there is one), then typically a gas tank or vulnerable engine area at the back (although some actually have the engine in the front). I want just the key areas highlighted.

Also the Korean Random skins are not always that accurate (proof below).

There is actually a great thread on the WOT forums (I just can’t find at the moment or it was removed) that described in detail design and hit locations.
The WOT developers (Wargaming.net) designed in great detail the tanks as more of a simulation rather then arcade. Based on actual tank photos, manuals, drawings, etc., the ammo bays, engines, etc.; the vulnerable spots, are pretty much where they should be.

One thread that was certainly removed (a ../topic/11802-tank-collision-models/) where someone had shown their result reversing the tank model format w/pictures.

What they don’t want you to know is that client side exists detailed hit models.
These are relatively low detailed turret, hull, and chassis, with interior detail models.
Conceptually a model inside a visual model used for detailed shot collision testing.
The model shape defines the various amour thicknesses (seen on the model as different colors).
And inside they contain the ideal hit locations with the ammo bays, fuel tanks, engine sections, even low polygon count crew members!
They might want to hide it but to me it’s a great testament of how good of a simulation they’ve created. Most games the vehicles have very rough damage models with at the most maybe singling out some exterior locations.
Here when your shell hits a target tank bounding box the client casts a test ray through this hit model first for intersection with the outside/shell then if penetrated (through other calculation and tests) the ray is continued for intersection with vulnerable sections inside.
Now if you are thinking of exploits, although this stuff is on the client it is apparently not very exploitable. Wargames claim they test such things on the server.
Assumedly, they allow your client do the work first in the simulation sense (using your CPU to do the work first) then do the same or similar test server side to verify it before the shot can actually take effect.

The game uses the middleware BigWorld MMO engine (BigWorld Technology).

Using a custom unpacking tool, and a modified version of the BigWorld engine model editor I can show some of these hit models in semi-transparent and partial cutaway views.

Using the German Löwe tank as an example.
Default the back of the Löwe turret:
Default back of Löwe turret

The colored hit model for it:
Back of Löwe turret hit box model
You can see the green colored thinner armor section in the back, and in there a square purple area (some kind of hatch, or access panel?) that is even thinner (and thus more vulnerable). The top light blue/aqua colored is thin armor also.

With materials transparent one can see the internal green rectangular ammo bay offset in the back area:
Back of Löwe turret hit box model transparent #1

On the side cutaway:
Back of Löwe turret hit box model transparent #1
You can see the ammo box position better, plus the crew member representations.
Brownish color is the loader, aqua (in the middle) the commander, yellow the gunner.
The little grey box on top is a “surveying device”; probably vulnerable (limits enemy view range if damaged?) but IMHO too small to be considered a priority target.

An outside hull view:
Löwe hull #2
Transparent and labeled:
Löwe hull #1

Now the turret with the Korean Random skin:
Löwe Korean Random turret

You can see the zones are fair in comparison to the actual turret hit model:
The thin armor square section on the back is there colored (purple).
Not sure what the orange section is above that. I assume they found the ammo bay there in their testing. On the sides the orange rectangle appears to be about were the commander crew position would be if you placed a parallel shot thew there.
They choose to color the commander view port and the “surveying device” on the top too. This is unnecessary to me. If you can shoot the turret you have better targets around the side and back. If the only thing you can see is the top edge then those colored areas are your only choice anyhow.
And if you are lucky enough to be able to shoot down on a target below to hit it’s top the armor there is always thin (far as I know) so it would be better to try for the turret ammo bay, or on the back hull deck for a fuel tank or engine hit.
At any rate, too many colored zone choices might lead to the wrong one.

According to the Korean Random website they obtained their hit zone information from practice. In other words the guildmates got together (probably using “Team Practice” mode) and painstakingly shoot at each other to chart locations that do the most damage.

And now a Korean Random Löwe hull skin picture:
Löwe Korean Random hull
Maybe hard to see from the angle but they do have the ammo bay colored white.
And most of the engine and fuel tank area colored red in the back.
On study one can see they are not so accurate compared to the actual hit model. The ammo bay section could be longer and extend below to the chassis area for example.
Plus they chose to brightly color some of the radio/radioman area, and surveying devices, etc.
The driver view port colored blue at the front is a good choice. But on the bottom section I don’t completely agree.
Certainly an engine section (representing front drive works) and the front of the crew (radioman and driver) are there, but dosen’t match hit model . Then again there is a non-sloping rectangular area there that could lead to less bounces in parallel shots so maybe that is why they saw good hits there.

Note I’m not knocking the Korean Random skins.
One can only imagine how much work that is/was and is kind of them to share.
Is of this writing 67 of the tanks are covered. Around most tanks from tier 5 up to 10. That’s around 75 DDS texture files all together (most tanks have more then one turret explaining the extra files) they had to edit.
And it’s not just a matter of coloring the right sections, you have to experiment to match up in the texture. Plus saving such large textures can be painfully slow.
It takes me personally about one hour to create the hit zones for each vehicle by hand (although I should get faster as I do more). That’s over a week of full time effort.
Plus they regularly update their skins after each WOT patch.
I just want to make my own skins to my own design and standards.

Now to get to the meat of this post/article!
Thinking of all this work ahead of me and thinking of the pain to make some minor change to skins it occurred to me: “I wonder if these can be generated procedurally from the hit box model.”. Eureka! I thought.

I knew it wouldn’t be easy. I wondered if I could project all or just some of the various model parts onto the skin texture map.
So using one of the BigEngine tool projects as an starting place I set about doing this generate procedural hit zone skins project.
Incidentally you can buy the “indie” version of the engine for around $300 USD.

To make a long and somewhat technical story short I basically load in a skin texture, then the main model, the hit box model and apply algorithms to sort out what face(s) of each part of the geometry of interest. Cast a ray from the vertices using face normals to the outer surface/shell of the model. Where it intersects the main model’s triangles I calculate the the interpolated barycentric coordinates in the triangle’s UV texture space. Then draw on the texture using software rendering. Finally save the modified texture to file.

My first try procedurally drawing all sides (except the bottom/down facing side) of turret ammo bay:
Löwe turret try 1
Each point made large and in different colors so they can be seen easier.

Only the face closest the back makes sense so I sort the shape to only show the face closest to the outside.

Now with the single ammo bay back face it looks about right (with a different color and sans the colored dots):
Löwe turret try 2

Now before I wow people with a complete procedurally generated hit box modified skin texture, well.. there isn’t one.
It turns out in simple test cases like these it just happens to work because of the circumstances.
When I went to map out other test cases like the the square area on the Löwe back (the purple area above) it proved to be nearly impossible. That particular part on the model is actually made of separate parts that face in odd directions.
Then another even worse case on the hull trying to map the ammo box parts there too. Rays get cast into odd places ending up with a nonsensical mess on the texture.
More experimentation, even skipping some parts, it showed that it will take too many special case to sort things out.

Furthermore the reality of such skin texture mapping is that for this procedural way to work, the skin would probably need to be mapped lineally.
The texture is 2D being wrapped in some places around curved spaces in 3D.
They are just not going to be linear. The texture is obviously warped and stretched in places.
All this curve information is hidden/unknown information for my tool.
As far as I know there is no easy way to turn this curving and warping into something that can be tracked for corrected drawing.
If there is it’s probably pretty complex math that is not non-trivial to code.
Or maybe some other way of projecting and mapping things would work.

The bottom line for my hopes to generate my hit zone skins procedurally is it just isn’t practical. I must make them by hand if I want them.

Still this project was at least a good exercise and learning experience.
This area of dynamically created and modified textures has a lot of possibilities.
One could get really creative making procedural explosion, damage effects, face textures that age and show scars, dynamic shadows, etc.
The problem doing this in a game is apparently the overhead of moving textures from system memory (operated on by CPU) to video card memory. So most developers end up using “decals” (like Wargaming.net does) to sort of add on top of existing textures for an effect.
Unless…there is some way to do such things in a shader or using GPU code on memory it already as access to.
Plus you you can’t share the same custom texture else every model that used it would have the same. With high res textures the memory usage could be a problem.

Here is an example of my handmade hit zone skin showing the ammo bay, vulnerable square in the back, and with a light blueish green area indicating an additional vulnerable thickness area.
The actual colors look different in game and with only four bits per color there is only 16 grades to play with. Have to tone down the saturation else in game they will look extremely bright:
Löwe hand made

One thought on “Adventures in automated World of Tanks hit zone skin mapping

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>