Material performance

I have a low-poly model, which polygons only shall have solid colours, like seen in the picture.
Either i now make a simple material for every colour (which really only needs to have a single colour, no textures etc.), and assign it to a group of polygons, or i use a single material and a texture for the whole mesh.
Are there any performance differences between these two methods?

well usually for a main character if you pack all part of a mesh into one single texture, it can appear blurry due to the low res since the cam is pretty close to the char. But since you are just using colours into it, i doubt it will appear blurry, you would have to test it.
In term of perf, more materials cost more draw call on cpu.

Technically, having more seperate Materials on a mesh increases the amount of drawcalls needed but this cost, as well as the cost of using texture maps to seperate the colors (and there-by using some VRam) are EXTREMELY insignificant.

If you use trextures as masks, then you will need to uv your models and depending on the resolution of the textures, a transition from one Color to the next across a single poly will only look as sharp as the resolution of that area.

If you do not need to have different materials on one and the same poly, the material-per-color approach is alot less work intensive since you save time by not uv-ing your models. Don´t worry over 4 instead of 1 material ID on the mesh.

Another idea of how to do this without using textures or more than one MaterialID is the following:
As long as you seperate the different pieces of geometry into seperate non-connected Elements,
you could just use Vertex Color in you 3D App and sample the Vertex Color in a single Material inside UE4. As long as your pieces are seperated into Elements, you won´t have VertexColor Gradients between them, giving you the “infinite” resolution of the Material-Slot-per-Color approach and the draw call count of the single-material-with-texture approach without the VRam costs of using textures. You could also use the Vertex color as a mask instead of direct color, this way you can select and change the actual color in your shader.

Don’t overcomplicate it, it’s easy to just make a very simple low resolution texture map with color blocks/swatches that have all the colors that the mesh needs.
You then just select the polygons that need to be a particular color and do a basic UV mapping and place all the UV’s for that part on the color you want, the UV’s don’t need to be flattened out in any particular way or be nice or anything. In 3ds Max I just select the polygons and do a basic planar mapping and then scale and position the group of UV’s onto the color, takes a few seconds to do.

2 Likes