OK, I'll describe that but first I will mention that saving is only in the graphical render code, not the physics.
The thing about tyres is as they are flexible objects, their vertices cannot simply reside on the graphics card memory. They must be calculated every frame and the vertices are sent from the CPU to the GPU each time. I had thought before the main cost was actually transferring the vertices to the graphics card, and calculating the normals of each vertex. But what I found was the worst part was calculating the colour of each vertex (according to its lighting condition and the sun highlight). This used a lot of integer maths and I found the CPU use was way less when I bypassed this function, returning a simple grey colour. So I set about converting it to floating point maths.
The general idea is that integer maths is good for adding and subtracting, but floating point is better when there is a lot of multiplying involved. There's some leftover integer maths in LFS left over from earlier times. Considering some of its code goes back around 30 years, when we had 486 processors, I worked at Digital Integration on the
Hind Helicopter Simulator, Pentium was the latest super CPU and there were no 3D cards.
By converting to floating point I found it was instantly faster, so I changed the code some more so that the normals were calculated in floating point, actually borrowing some code from the development version, where this was done already.
In the development version, the tyre lighting is actually done on the GPU, based on material properties, but the vertex normals are still sent to the graphics card each frame. You can see it in the LFS Editor.
The older code (before Friday) had a lot of complicated stuff to avoid sending vertices if they were not needed. This was done by checking if a triangle faced the user's view before drawing it, then calculating vertices as needed. But that is way complicated. It's better, if possible to just calculate all the vertices then send them all, without jumping around between triangle and vertex code. But for quite a while the "avoid sending unnecessary vertices" was still winning. But eventually I got the vertex normal and lighting calculations fast enough that it was better to do it the simpler way and I saw best results in the profiler that way.
Unfortunately that work, that took most of a day, doesn't benefit the development version because it was already done in that version. In the D3D11 version with shadow maps, all triangles must be sent every time as they may be seen in a shadow map (drawn from sun direction viewpoint). So it was impossible in that version to avoid drawing the away-facing triangles. But in the development version there is code to only send one object's triangles to the GPU once each frame, even if it will be used in multiple shadow maps, main view, mirrors and stereoscopic images in that single frame.
But although it doesn't help the development version, we still have the current public version for some months ongoing, so I'm happy if it helps people racing on full grids and the helps the quality of broadcasts by saving a few percent of CPU each frame.