Using material property blocks is not going to fix the draw calls of a single vehicle because a) the car is already multiple materials and using the material property block doesn’t change that and b) each part that has a separate material is also considered a unique mesh so that’s going to to be separate draw call even if you set the exact same material to every part.
Shadow casting will also add additional draw calls, one for each material per shadow depth texture. For a directional light that’s one to four extra draw calls depending on the number of cascades. Spot lights are one more. Point lights are potentially 6(!) more.
Shadow receiving adds one more draw call per material.
If you have any camera post process effects that might add one or more draw calls per material again.
Let’s say you have a single cube with shadow casting and receiving turned off and with a single material index. That’s 1 draw call.
Now you have another non shadow casting / receiving cube but with a different material per face. That’s 6 more draw calls.
Now you have a copy of the previous cube, but all 6 material indices are set to the same material as the first cube. This cube looks identical to the first cube that only has 1 draw call, but because it’s actually 6 material indices it’s still 6 more draw calls.
Now let’s make a few copies of the first single material cube. If batching is working properly there will be no additional draw calls! Now if we run a script on these new boxes that changes the color of the material on these boxes to something random using renderer.material.SetColor() they will be additional draw calls. What’s more if you were to set them all to the same color they’d still each be additional draw calls. Modifying the material in Unity is “dumb” in that it’ll simply make a new material instance regardless of if there’s another material with the same values that already exists.
Using material property blocks instead of modifying the material may allow Unity to be “smart” and combine objects of the same material, property block settings and mesh. It should also be capable of combining the same material and mesh with different property blocks but I’ve never seen Unity actually do this.
You can also manually use one material on all objects of a specific color. Just make a new material in the editor with the color you want and instead of doing material.setcolor do material = material asset.
Ultimately you’ll need to figure out how to make a single car be fewer draw calls and assume every car will add that many more draw calls. I suspect something like the wheels on your first car are being batched together but subsequent vehicles are not because it’s creating unique material instances for each rim.
TLDR: A draw call is every combination of material instance and mesh material index. Batching only occurs if two (or more) objects are literally identical combinations of the same material and mesh index. And two materials with the same color are still two materials.