Tank modelling guide
Let’s start with a draft guide and polish it as we go. We need to split it into multiple parts not only to make it easier to digest but to define a scope of features, starting from a simpler/arcade model and moving toward “simulator” like behavior.
Overall picture of parts that we need to handle:
- Suspension system. Suspension is necessary for tank to move smoothly over the obstacles or rough terrain and to distribute dynamic weight of the tank among the road wheels. The most common type of suspension on late WW2 and post WW2 tanks is suspension bars. The simplest way to model them is by using physics constraint with an angular drive.
- Friction of the track with the ground. In component based approach, friction is decoupled from suspension and the way how suspension is made is largely irrelevant. This allows us to build anything that barely has any suspension at all, as first tanks in WW1 to a more visually sophisticated setups such was used on Shermans or interwar British tanks. What is important for track friction is to know how hard road wheels (sprocket/idler) are pushing against the ground or obstacle. For this we will use OnComponentHit events of roadwheels/sprocket/idler collision meshes which will provide all necessary information.
- Animation of track and wheels. We will handle animation by using “TrackAnimationDrive” component (in current version of MMT). TrackAnimationDrive is made to render treads of the tracks using Instanced Static Meshes, later it can be swapped by another component which will use skinned mesh (looks less defined but is better for performance as can use LODs).
- Engine and transmission. This is the part where one would make a choice for going with more of a simulation like approach or arcade behavior. Simulation will require quite a bit of tuning and gathering of information about tank in question. Simulation will make it harder to make tank behave as you want but can easily highlight differences in handling and steering of different tanks, especially in cases when different principal of transmission is used, for example clutch and brakes or geared differential. Arcade approach will allow you to get exact behavior that you need - how fast tank will accelerate, how fast it will steer and etc. You would need to decide on arcade behavior for yourselves. For example, most of the tanks in WarThunder, even on realistic difficulty are steered by applying brakes to one of the tracks. This is not how it was done in real-life but it is a nice approach to make controls of the tank familiar for all of the tanks in the game, the downside is that you are loosing ability to do a proper neutral turn and tank will loose speed when cornering. Neutral turn can be added with a some code logic (check M113 for example).
Suspension
Suspension of tank consist of two parts “visual” and “physical”. We will use separate meshes for them as we need a much “wider” coverage for collision than what visual roadwheels and sprocket can cover. This is an example of collision contour for Tiger tank:
Red is a collision of sprocket and blue is a collision of a front road wheel. Notice how collision extends all the way over the track as this is the point where we want tank to stand on the ground or collide with obstacles. Wheel collision is extended to the front to cover a gap where track is not supported. This will prevent objects from penetrating track and will engage suspension of the wheel just as it should in real-life.
The hierarchy of components in such setup is following from top parent to last child:
- scene component (optional but makes it easier to keep everything organized in the list of blueprint components)
- torsion bar lever mesh with some collision primitive (has a road wheel attached on one side and connected to chassis on other side)
- roadwheel collision mesh
- visual road wheel mesh (no collision primitive) it will follow movement of the wheel collision mesh just by being a child of it and rotation we will handle separately later
- track anisotropic friction component, will handle friction of this road wheel with the ground and obstacles
- physics constraint for road wheel which firmly attaches collision mesh of wheel to the end of the torsion bar lever
- roadwheel collision mesh
- physic constraint for torsion bar lever (connects lever to chassis and has angular motor to imitate suspension)
- torsion bar lever mesh with some collision primitive (has a road wheel attached on one side and connected to chassis on other side)
Some typical settings for the physics constraints.
Torsion bar lever physics constraint with angular motor should restrict any linear movement of the lever but allow limited rotation of the lever in a single axis:

In this case, the name of the chassis component is “Root” and name of the suspension lever static mesh is “SuspensionHandleFrontFR”. Variable “Angular Motor -> Angular Position Strength” is responsible for overall force of the spring, the heavier the tank the more force you will need to keep proper clearance between bottom of the tank and the ground. Variable “Angular Motor -> Angular Velocity Strength” is a dampener and is responsible for how “wobbliness” of suspension. The higher the values the faster oscillation will stop and suspension will come to rest. It’s important to always have some higher than zero value for this variable as otherwise motor will behave weirdly in respect to the strength of the suspension.
Typical physics constraint that attaches collision wheel to the torsion bar lever is this:
Collision meshes of the roadwheel/sprocket/idler need to use a special physics material called “SmallFrictionMaterial” in MMT_Content. This material has following default settings:

The easiest way to make sure that material is assigned to static mesh is by opening static mesh in editor and selecting SmallFrictionMaterial in “Static Mesh Settings -> Simple Collision Physical Material”:

Another important detail visible here is a socket “Tread” which is later used by track spline to “follow” the wheel as it moves up and down. As you can see, socket is not placed on the edge of the collision as collision extends all the way to the far side of the track and spline control points are expected to be in the middle of the track thickness.

