Performance (Frame Rate)
Following things will increase performance for real-time use.
These points are roughly all the things one needs to consider when working with the model in a game engine like Unreal Engine or Unity. These tips can however also help for things like Marmoset Toolbag real-time viewer files as well as making the 3D software viewport smoother.
- Use as few materials as possible
- Use as few texture maps as possible. By efficiently reusing the maps, using mirrors or by using atlas maps to get many small items together in one texture / material / shader. Extra textures are far more performance hungry than extra polygons
- Batch many small objects together on run time to reduce draw call amount. (This has nothing to do with merging objects in the modeling software)
- If possible, the entire scene should use one and the same shader
- Avoid using alpha when possible. 99% of the stuff people use alpha for these days could be done with actual geometry, and would both look better and perform better
- Use as little transparent stuff as possible (fire for example needs it)
- Clean poly flow will ensure better triangle strip generation. Which saves memory and transform time. Yes, sometimes MORE geometry can result in less memory use and less performance loss if done right!
- Character mesh optimization has different rules than those for environments (This is partially because world geometry in games is mostly set to static)
Industry Examples (Characters)
I didn’t add platform because basically all are both PC and Console. The focus here is mainly the characters of games, except for if explicitly stated differently.
Example | Polycount (tris) / LOD’s | Texture Maps | Map Channels / Bit Depths | Links |
---|---|---|---|---|
Overwatch Blizzard 2016 | 4 LOD’s: LOD0=45k, LOD1=22k, LOD2=11k, LOD3=5.5k. Plus around 15k for weapons | 2k (Emissive is usually reduced to 1024 or 512) The same set is made for weapons at 1024x1024. Heroes with visible skin also get a blood map (24bit RGB) that our skin shader uses to fake sub-surface scattering. All textures must be under 30mb after block compression | Color (24bit RGB) + Ambient Occlusion (8bit gray), combined into a 32bit RGBA map. Specular (8bit gray) + Roughness (8bit gray), combined into a 16bit map. Emissive (8bit gray) | Source |
Resident Evil Village Capcom 2021 | Lady Dimitrescu is 350k. And the Duke is 300k | |||
League of Legends Riot | ||||
Killzone Shadow Fall Guerrilla Games 2013 | LOD1=40k, LOD7=150 | |||
Call of Duty: Ghosts 2013 | LOD0=23k | |||
The Order 1886 2015 | 100k | |||
Rainbow Six Siege 2015 | 40k | 3 x 2k maps | ||
Street Fighter 5 Capcom 2016 | 80k (more than half of that in head) | |||
Dishonored 2 Arcane Studio 2016 | ArtStation | |||
Final Fantasy 15 Square Enix 2016 | 100k per character of that 20k for hair | Source | ||
NieR: Automata PlatinumGames 2017 | 100k | |||
Horizon : Zero Dawn Guerrilla Games 2017 | Thunderjaw=550k, Alloy’s Hair=100k | Source, ArtStation | ||
Fortnite Epic Games 2017 | LOD0=23k | |||
Fractured Space 2016 | Spaceship = 30-280k | |||
Star Citizen | Spaceship=30mil |
Links
A Deep Dive into the Technical Side of Mesh Rendering: