It's a very nice looking mod but I have been wondering what causes the slowdowns when watching on Simbroadcasts. My investigations are not complete. I'm stopping for the day but have some observations. It's not all about the number of triangles.
Incorrect setting "Concealed driver" - this should be YES - absolutely this vehicle has a concealed driver (it's not a motorbike or a kart). This one setting appears to waste around 3% of CPU with 32 on the grid.
By the way, "Wheel visibility" should be "inside covered" though I think this is only for looks now. It's not an open wheel racing car, so this will produce a better lighting effect on the wheels.
Another graphical cost is lack of texture sharing. For example the wheel objects are slower to draw than they could be because the alpha cutouts use 3 different textures. The 3 different transparent textures should share a single texture page, so LFS does not have to waste CPU time instructing D3D to switch between textures (texture switching is slow). If you set this right, then when drawing wheel alpha, instead of 3 texture switches and 3 draw calls, it would do a single texture switch and a single draw call.
There could be similar case in the main object (or other subobjects) but I haven't looked much. I do see an S and a backwards S using the same texture but flipped. Can't you use the same texture but flip the cutout?
Of course "repeating textures" cannot share a texture page. But some other textures can, and this can avoid switching between textures during the render of the car, saving CPU time.
EDIT: (next morning)
You can easily get the spoke object down to one single texture instead of 5 at the moment. How to do that:
1) Combine the 4 256 textures onto a single 512 page, the obvious way.
2) For the "unnamed" (no texture) cutout use a small white square on the new texture page. There is space beside the bolts.
More optimisations:
- If possible, combine the hub object into the spoke object. Every moving subobject is a frame rate hit.
- Change "muffler" subobject into an attachment. "Attachment" subobjects are merged into the main object so they don't cause the same frame rate hits as a moving subobject. The vibrating muffler gimmick isn't worth the frame rate hit.
- Steering wheel subobject can be made way more efficient by combining textures. The 11 small button textures could be combined onto a single texture. The [no texture] page can be eliminated by using a small square from the new texture. And the "plain transparent" texture at the end of the list can also be combined into the same texture page. So this combines 13 textures into a single texture page. Only the two repeating textures need to be left on their own page. 15 textures on the steering wheel now, can be reduced to only 3.
Let's do some maths, for 40 cars on the grid.
For the wheel objects described above, we save 4 texture changes per wheel = 16 per car = 640 per graphical frame.
For the steering wheel optimisation, we save 12 texture changes per car = 480 per graphical frame.
So by these simple changes we save 1120 calls to "Set texture" every graphical frame.
Also don't use "TEA" (Tree Edge Alpha). Tree Edge Alpha is not supported for vehicles, it's a special thing for trees with intersecting polygons that only works for world objects. Applied to a car it looks exactly the same as ALPHA so you are adding one more material for no reason.
[I notice one bug, in cutout mode when a subobject is selected: "materials : X" at the top is showing the number for the main object. I'll fix this in next editor test patch. You really should be aiming to reduce the number of materials so that number would help.]