Draw call question

Hello,
I have noticed, that when I look closely into draw call count, I have always 3 draw calls per skeletal mesh, and 2 draw calls per static mesh. Both meshes have only one material. Tested on multiple meshes including stock ones.
What does other draw calls stands for? I thought they are used for shadows and post processing, but draw count is still unchanged despite being on empty level with shadows turned off.

Without knowing the details of your project, I will make these assumptions:

In the case of the Static Meshes, you will have one draw call for the geometry, and another for the material (if it’s not too complicated).

For the Skeletal Mesh, you might have an additional draw call for the skeleton (mesh, material, skeleton). Or it might have a more complex material.

Thank you for your answer, but I think you’re partially correct.
Theese are my assumptions.

1st draw call is for vertex buffer/object itself. Where is updated vertex per index.
2nd draw call would be for constant/uniform buffer where projection matricies and other data are stored. This is updated per-frame.
3rd draw call would be for animated bone matricies for skeletal mesh. Again updated when engine needs to reevaluate bones (animation tick).

Materials are converted to shaders themselves, they have nothing to do with draw calls.

Of course I have no proof that it works that way.

Materials do affect draw calls.

Material complexity (or shader instruction cost you mentioned) has nothing to do with material count itself. Every mesh object will be split into buffer chunks by materials, so one material(shader) will have only one buffer. So if mesh will have 2 materials, it will be splitted into 2 separated buffers, doubling draw calls. That is the case of video you posted. In my orginal post, I had only one blank material.

I must also warn you, that this video is really super bad example, there are much better ways to merge materials than using “If” statement. You can edit UV channel on model itself and create texture atlas for it, or create additional UV channel and using lerp/add for blending between them. Much less instruction cost and more error prone, since IF is not 100% reliable, because of floating point arithmetic.