…if I plan to have a max of 5-6 characters on the screen at a time?
Or is geometry not that important anymore and draw calls are the main drag on performance? Or is it both?
I’d like to provide 60fps at 1080p on a reasonably high-performance PC, i.e. GTX 970 level. Does anyone have any experience or wisdom to share? I’m not sure how to go about profiling performance bottlenecks…
I certainly dont want 200k triangles for a single character to be rendered every frame when I am playing, but it’s a different case for Cinematics.
There are several Tools built-in in Unreal. Use “ProfileGPU” or “stat scenerendering” if you want to see what part of rendering is causing a bottleneck.
The GPU Profiler also has the function to record a session, so you can have a detailed view over multiple frames.
I was including everything in my planned budget, clothing + hair + character.
I’ve been reading that the main character in Horizon Zero Dawn has 100k triangles for her hair alone. And some other large character has more than 500k triangles. Of course I’d guess that not many such characters would be on screen at the same time. But this is for PS4, which I think has an equivalent of something like a GTX 660.
I think materials will play a bigger role in performance, probably.
200K polygons is a lot sure… But some people need to finally understand that the amount of polygons is usually not the problem when it comes to performance issues, of course that doens’t mean you should go totally crazy… Use what you need but keep it reasonable.
Here is a list with polygon amounts used in AAA titles for characters… Horizons zero dawn, thunderjaw character had about 500K polygons beside 100K polygons for only the hair model of the main character Aloy, all this on just a console.
It’s the easiest issue to prevent.
Your vertices need to be transformed for every shadow casting light. which will sooner or later become a bottleneck.
If you have a Directional Light with 3 Cascades it will mean your character’s vertices will be processed atleast three times, which will result in 600k polygon transformations in the case of an initial 200k poly model.
Do you ever really see the full 500k triangles anyways or is that a bolstered triangle count for a lod0 that’a only visible when the actor takes up 300% of the screenspace.
Alloy’s LOD 0 is probably for cinematics only. As for Thunderjaw, an important thing to remember is it isn’t just for polys per character, but size of the polys on screen. Thunderjaw is huge, so even though the polycount is very high, each on on screen poly shouldn’t be that small, thus avoiding a lot of poly overdraw costs.
Of course for anyone making a game the real first question is what platforms are you targeting? PC, to what scale? Which consoles? Are you going to scale all the way down to Switch? Are you building to split between PS4/XBO and The PS5/Xbox… uhm, Eulers number?
Hopefully the missing Skeletal Mesh LOD tool will pop back up in some update, so you can make 250k poly character model and more easily LOD it down for lower spec platforms. But until such time as LOD is nigh invisibly easy, the above is a highly relevant first question.
Like i wrote before, triangels are no longer a real issue as long you stay reasonable, modern engines can handle them easily, the time of 8 sided barrels are over.
I gave you examples of a 500K triangle charcter that is used in a open world enviroment on a PS4, the game is using full dynamic lighting and it still runs over 30FPS. The biggest problems when it comes to performance issues, is the draw call amount, very complex “expensive” shaders, your vram, dymanic lighting and some other things.
If your barrel has 1500 triangles or 2500 triangels makes no more a difference, here on the forum is somwhere a article from a developer who told his experience about trinagles amount these days, for optimization purpose he cut out around one million triangles out of his scene and gained like 1 to 2 FPS more…
And again, have a look on how much poyls are used on current charcters in AAA titles, even on console. So there is not really much more to say…
I mean this can have a few reasons, first of all… of course you could overblow your level with triangles, like i wrote before it’s not like you can use ARCHVIZ like vegetation or models in your game scene without getting an impact on your FPS. If you have 100 chairs, each 180K triangle strong beside many other high poly models in your game scene, of course this wont work.
Second reason, draw calls but aslong you’re using the veghatiation tool which should instance your vegetation clusters you should be fine, also in combination with LODs.
But the biggest problem beside draw calls is the opacity/Trasparecny on the vegation textures/shaders. There is a 80LVL article which explains how you get much better FPS using more trinagles or your vegetation cluster models instead of using big opacity/traslucency areas with low poly clusters .
Quote from the Article
“Due to the low shader complexity and low quad overdraw the performance compared to other grass foliages is higher, even with the higher vertex count.”
It’s not a problem if the game is a corridor simulator like RE2. But the amount of triangles aren’t the issue, the problem is overdraw when the models are far away, and to solve that you will have to create a lot of LOD versions of your characters.
How is the performance/optimization of the trees? Could the trees be better? Do you know of an article similar to the grass one you posted, but for trees?
I need to know “best practices” for when I design trees myself.
That tree library is very nice, thou those trees are not meant to be present in a close shot in a scene. Their performance are great.
You have few options on building trees with performance for games:
a) purchase the types on marketplace which has the features for your scene
b) model yourself
c) purchase a tool like this one and generate an infinite amount of trees yourself + the ones present in the package: Interactive Tree Creator and Dynamic Tree Creator (both from same author)
d) purchase a subscription from SpeedTree for UE4 and model your trees and once done you can stop the subscription and still use the tress.
The fastest of course is “a”, but you can spend $2k+ worth of assets to form a decent library, it might happen 1/4 of them will not present the necessary performance you need.
The slowest is “b” because involves in learning techniques, obtaining textures, try and error, etc Maybe a time you don’t want to spend much and instead doing what your real dream is all about.
Both “c” and “d” you don’t need to learn anything to have assets with good performance, you will start with a sample collection of textures for “d” and a big sample collection of textures for “c”, and overall will depend on your artistic skills to bring a nice tree to life.
Don’t worry, every single person was at least once in your shoes with same questioning.
As someone who plays Horizon Zero Dawn a lot, I’ll tell you right now that during gameplay on a standard ps4, her hair is nowhere near 100k polys. Maybe in cinematics on PS4 Pro at lod0 when the hair is covering 90% of the screen…
The Number on the list comes not from guessing, it comes from a documentary about horizon zero … I played it on a PS4 pro but there is no way i or you could tell or see how many tris are actually used on her hair. 100K sounds a lot but for hair its actually not, you could use far more to make it look even better but than we are entering the crazy amounts of tris i guess.
So just because your feeling says you, its not looking like 100K it doesnt mean its not 100K tris…
For games like GTA V and RDR 2, NPC is basically run by AI’s means a lot of processing and i guess NPC Characters has an overall triangle count of 10k-50k (15k reviewed the GTA V pilot NPC) as they make lowpoly base and a high poly bake which players dont really notice. 10k to 50k per CHAR seems to be ok with no problems with FPS at all.
Sometimes we all get fooled by Game trailers to motivate us to put some detail to our work, but it is high poly animation and rendered in animating softwares like MAYA, C4D, Blender which take time to render frame by frame, means not actual in game because in actual gameplay, games don’t render it frame by frame by a time of 6mins or so.
You don’t really need to import the high poly to your game, just the low poly. Bake your high poly to your low poly normal meaning the textures will handle the detail on your OBJ.
low poly is the only thing you import to your game with SOFTEN EDGES as hard edges will be visibly look BOXY and high poly are bake normals for your texture, you can have high details like scars, scratches, laceration, reptile skins, and more.
Keep it in mind that in games we dont need to make things complex, just make it simple.
search in youtube to know more about baking high poly to low poly…