I am a complete beginner on the art side of video games. I was wondering how much of a difference there is between using one material that covers an entire character’s skeletal mesh vs using different materials for different parts of the character. For example, the skin portions of a character use one material, his armor uses another, his shoes another, etc. On the one hand, I feel like this would allow for some nice and easy customization - changing the material on a part of the mesh in order to reskin armor and make it look totally different without having to have two different meshes. On the other hand, I don’t know if doing it this way is very taxing for the computer. Any thoughts? Thanks!
Adding a material for a mesh adds another draw call, which slows down performance. But it can depend on what you’re doing. Many games have customization systems where there’s like 5 different parts that can be swapped out, so there’s no option than to have separate mesh pieces and separate materials. But, if you don’t need that, then you would want to lower the number of materials, typically there’s a material for the head and then one for the rest of the body.
Also, remember that color customizations can be done with material instancing, so that doesn’t require a completely new material.
Just curious - is an additional draw call less efficient than processing entire material bitmap with some color filter at runtime? If yes, then why? As a programmer, I have used to idea that generally it is better to cache/precalculate everything because nowadays memory is dirt cheap but CPU/GPU cycles are expensive. Is it otherwise with 3D materials?
I’m not sure if instancing means you can reduce draw calls, but it reduces the number of shaders at least
It seems to me that the number of draw calls can easily become a problem more than running out of memory
If using a single diffused/painted texture that is “unique” then a single material is probably best.
Procedural materials is a different animal as usually it’s a material used with masks using a master that is instanced as to other elements that use the same material.
It does take a bit to get ones head around but a material is a material so you can make use of the same shader that you can modify with a parameter to make it look different it’s still the same material as to the number of draw calls.
So if you have a character with buckles that you want to give it that PBR look you can use a layer mask to apply the same material used on all of your door knobs and the draw call would be equal to the number of door knobs rendered. Best described instanced material is a free lunch.
As explained if you wanted to you could put all of your metals that you ever make and make a simple RGB (or alpha) mask to paint where the single material needs to be applied. Ten material selection one draw call.
Actually, material layers in UE4 add additional draw calls, they’re just easier to use than trying to combine it all into one material node system.