Clear up how expensive material instances really are?

The only way to group meshes into one draw call is by using instanced meshes. Meshes using the same material/instance will still take one draw call each. However, they are drawn in an order that is grouped by material/instance, to reduce the number of render state changes, kinda like this:

3 meshes using the same material:
set shader, draw mesh #1, draw mesh #2, draw mesh #3

3 meshes using a different material each:
set shader #1, draw mesh #1, set shader #2, draw mesh #2, set shader #3, draw mesh #3