Download

Reducing Character Render Calls

I have some questions about reducing character render calls in a server based game.

If there are 1000’s of characters on screen and the characters are made of many separate components like: hats, glasses, heads, torsos, backpacks, legs and shoes, is it better to keep the characters as separate components? Or, is it better to combine the separate components into one mesh using C++ function **FSkeletalMeshMerge? **

If all the components are separate, that could be a lot of render calls including the separate materials that accompany the geometry. For example, if each avatar is composed of 3 components (head, torso, and legs) and we have 50 avatars on screen, then we will have 150 render calls. Since we know we will also have hats, glasses, facial hair, other facial components, backpacks, bracelets, and shoes, we can see how the render calls can add up; and that is just geometry. Not mentioning materials.

Some components will have morph targets. If FSkeletalMeshMerge is used, there would be one mesh and one shared material with one atlas texture. I read there is a way to also get morph targets working with the mesh bake down using **FMorphTargetDelta.

Here are the questions:**
So, if you have 1000’s of characters in a server based game and you want to keep render calls down, should **FSkeletalMeshMerge **be used to combine all the components (with morphs) into 1 mesh, 1 material, and 1 atlas texture to reduce render calls?

Or, are there new tools in 4.22 that would allow me to keep the avatars as separate components (with morphs)? Are there tools that batch similar skeletal meshes and similar materials to reduce the render calls?

Nowadays what is done is 1 skin = 1 full-body model. To save on performance.
But if you really want to go that route, there are assets around the internet from older MOGrpg called “Cabal Online”, you can open these character mod assets in Maya or Max and examine how the characters are assembled (all armor parts are rigged to same skeleton, then hidden at runtime, single material).

Awesome, thank you BrUnO XavIeR. That was the road I was hoping to go down :slight_smile: , all my clothing rigged to the same skeleton. Then at runtime, I was hoping loop through the rig, delete the clothes that the player chose not to display on the character. After all the unwanted clothes were deleted, it would only leave the clothes the player wanted to display. I would then apply the FSkeletalMeshMerge to create the 1 skin = 1 full-body model, bake the textures to 1 atlas, and plug it into 1 material.

Do you think that will work?