Tire Physics Changes

In our 0.21 changelog, we briefly mentioned improvements in our tire simulation. We have made and mentioned improvements before, but never received such a blast of positive feedback as this time around! We are elated, as it shows that our work is paying off, and that we are providing for a community of driving enthusiasts that care and share our pursuit of realism. With that in mind, we think it is about time to fill you in on the details of progress we have made.


Our approach to simulating vehicles is quite different to others at the most basic level, in that all of our physics is done with flexible mass-spring (we refer to it as node-beam) structures. From early on we knew that simulating the vehicle chassis would work great, but we did not know how far we could push a node-beam tire model. Yet, it seemed that the only way to support the broad scope of our simulator was with a flexible tire colliding and interacting the same way as the rest of the vehicle. We felt that it had to be made of the same stuff! But of course, it had to drive right too. Since the beginning, we have had a list of problems with the tires that we worked on, gradually solving them one by one, and now we feel that things have really come together.

Latest Changes

In the 0.21 release, we effectively solved one of the biggest issues in our tire model: rolling resistance. Rolling resistance is a drag on the vehicle caused by energy dissipated as the tires roll along the ground. As a rough idea, a typical passenger car tire has a rolling resistance coefficient of less than 2% at high speed. This means the tires create a drag force of about 2% of the vehicle weight. It’s quite amazing how well they roll. Before we started working seriously on the tire model in 2015, at the tires maximum rated speeds our rolling resistance was in excess of 25%! This huge resistance was affecting the top speed and high speed handling of all the vehicles.

Because we had a real time physical model at work, rolling resistance force was not just a coefficient that needed tweaking, it was an end effect of the physics. Because the tire was rolling inefficiently, the distribution of the forces on the tire were skewed, sacrificing tons of grip as speeds increased. We improved things over time, with rolling resistance dropping to around 6-10% by fall 2017, leading to increases in high speed grip along the way. Now with our latest update, we can achieve rolling resistance under that 2% goal, while keeping the handling composed up to 400km/h.

How did we do it?

First, an explanation of the problem. In our original model, as the tire rolled, the nodes of our mass spring tire impacted solid ground with a small velocity, because of the compression of the tire under the weight of the vehicle. This caused a pressure spike in the leading half of the contact patch. At the trailing end of the contact patch, energy had to come from the rest of the tire structure and powertrain to accelerate the stationary node up away the ground. This resulted in a reduced pressure at the trailing end of the contact patch, behind the axle. This skewed pressure distribution worked to fight the forward rolling motion of the tire.

The first thing we tried to do was increase the number of tire nodes to make the tire “more continuous”. However, it did not solve the problem. The net energy loss was the same, because although the nodes were lighter and took less energy to collide, there were more of them colliding. And anyways, the idea was also too expensive in computational cost. On the not-so-physically accurate side, we could have applied an additional torque to the wheel to compensate for the increased rolling resistance, but it would reduce the available grip of the tire even more, due to the increased propulsive demands being put on the tire.

Our second attempt was to break the ground model into two parts. A solid layer below and an elastic layer on top having a depth of a few mm. This elastic layer absorbed and re-emitted the collision energy back to the nodes when they lifted off again. Internally we called it the “black box” due to how difficult it was to reason about. It also was difficult to calibrate correctly, as it behaved unpredictably and could become unstable if run at full strength. Nevertheless, it helped to reduce the rolling resistance by about 3 times, and we relied on it for several years.

Finally, our breakthrough was to rewrite the ground model surface layering code so that it behaves in a more predictable way by considering the bigger picture. We extended the top surface layer’s depth by 10 times in order to track the full trajectory of a node. Then we spread the distribution of forces through the whole contact period, instead of applying them all in one instant as with the black box method. We also controlled the overall tire uplift so that the tire rides at the ideal height which varies with speed.

What’s next?

In upcoming blogs, we’ll go into more detail of the tire model progress. We’ll also keep improving the tires further. One issue we feel is important is related to aligning torque behavior on driven wheels. Currently, front wheel drive cars are exhibiting torque steer behavior that is correct in principle (due to the offset of forces from tire lateral flex and camber), but it’s a bit too strong. In the longer view, once we finish stabilizing and cleaning up the latest work, expect things to warm up a bit 😉

Have questions or feedback? Let us know in this forum thread!

Featured Physics

BeamNG Major Updates

The 2021 Spring Release – BeamNG.drive v0.22
BeamNG.drive v0.22 release notes
The 2020 Winter Release – BeamNG v0.21
BeamNG.drive v0.21 release notes
The 2020 Summer Release – BeamNG v0.20
BeamNG.drive v0.20 release notes
“La Vie à Toute Vitesse” – BeamNG.drive v0.19
BeamNG.drive v0.19 release notes
The 2019 Winter Release – BeamNG.drive v0.18
BeamNG.drive v0.18 release notes
Buckle up, heavy traffic ahead: Update 0.17 released
BeamNG.drive v0.17 release notes
Electrifying 0.16
BeamNG.drive v0.16 release notes
A Small Car on a Big Map – Version 0.15 released
BeamNG.drive v0.15 release notes
Light Runner – Version 0.14 Released
BeamNG.drive v0.14 release notes
The Automation Collaboration – Version 0.13 Released
BeamNG.drive v0.13 release notes
Get Busy – version 0.12 released
BeamNG.drive v0.12 release notes
Alpha version 0.11 – The Coast is Clear
BeamNG.drive v0.11 release notes
Sounds like version 0.10 is out!
BeamNG.drive v0.10 release notes
Hopping into 0.9
BeamNG.drive v0.9 release notes
Version 0.8 rolling in …
BeamNG.drive v0.8 release notes
Alpha version 0.7 released :)
BeamNG.drive v0.7 release notes
Version 0.6 released
BeamNG.drive v0.6 release notes
Version 0.5 released
BeamNG.drive v0.5 release notes
Version – changelog
BeamNG.drive v0.4 release notes