Metahumans are very unoptimized. Even RTX 4090 can't handle 60 FPS? Just look at this!

https://www.youtube.com/watch?v=XxCrsoOvE1c

Recorded on: i5-8400 + RTX 3060 12 GB + 16 GB of RAM

Look at the FPS at the top right corner.

Changing scalability from low to cinematic as well as decreasing LOD quality changes absolutely nothing with the performance, FPS stays the same. And now look how FPS increases as soon I am starting to get rid of metahumans, fantastic! I don’t think that this should be normal. Why is it so bad?

On my specs with RTX 3060 I have around 25 FPS with all metahumans, I also tried testing this project on other PC’s and it gives 15-20 FPS on GTX 660 and around 30 FPS on RTX 2080 SUPER (with top Ryzen 9). FPS remains almost the same! Minimal difference. I doubt that even new RTX 4090 could handle 60 FPS!

Furthermore, all my Metahumans are bald, because Groom is crashing my PC! Project just crashes if the Groom plugin is turned on, I can’t even launch it! I thought that was because of my PC and I need a better configuration, but no! I tried this project on another PC with worse specs (i3-6100 + GTX 660 + 8 GB RAM) and Groom worked just fine! Like how does this work?!

2 Likes

I’m running a 3090 on my system, and it seems to handle two metahumans in a scene decently well (though I haven’t messed with them much… and I did get one crash the first time I opened the Metahumans project file). My guess is that it’s the material, not the geometry, causing the problems. From memory, I think the metahuman material has something like 700+ instructions on it, something crazy like that? You can probably do a lot of good just by making your own simplified material from the supplied textures.

Personally, I never saw the Metahumans as good for much beyond cinematics, and (hot take!) those don’t need to be more than 24 fps anyway. That’s what feature films tend to be shot at. Go too much higher and it starts to look fake. Hot take over.

It doesn’t matter whether its for cinematics or games, its about performance while working in engine. I can render it 60 fps if I want to, its not the problem. The problem is the performance. It’s okay to watch a 24 fps cinematic (I always render cinematics at 24 fps), but its not okay to work inside engine with 24 fps, I want to have more performance and more optimized metahumans

Thanks for your guess about material though

1 Like

The engine editor will always be slower, for a number of reasons. If you want high performance with the cutting edge of interactive visual development (and metahumans very much are the cutting edge of interactive visual development) then an i5-8400, 16 GB of RAM, and a RTX 3060 just isn’t it. Especially the CPU is way below what you’ll need in a modern high-end rig.

This is especially obvious because the frame rate doesn’t change with render quality. I bet frame rate also doesn’t change with viewport size (make it very small, or make it as big as possible, and compare.) If the frame rate doesn’t really change, then the limiting factor is likely the CPU.

FWIW, I was using a five year old CPU, until very recently – it was fine, but it was really starting to show its age. I upgraded to a current leading edge CPU and things are noticeably better.

And, yes, for content creation, the system will typically be between 2x and 10x higher spec than the target hardware, both because the editor code may not be as optimized as the shipping build, and because the editor has a bunch of additional support/chrome/widgets that the final game doesn’t.

FWIW, I tried replicating your test and got more or less the same results. I imported a Metahuman (Ada), and my system does 120 fps with her in the scene easily, but the moment I duplicated her in the scene, I saw the fps begin to drop, and it kept going down. With six Adas on screen, I was dipping below 30 fps. I tried removing the hair, and this did nothing. I replaced all the materials with default materials, and this did nothing. Still cratering my fps.

I then imported my own character, at 140,000 tris (I believe a bit more than a Metahuman) and high resolution textures with my own custom material that has 677 instructions, not much less than the Metahumans’ own 700+ instructions. 120 fps. I duplicated her until there were 12 copies on screen. Still 120 fps. I duplicated all my duplicates. 24 figures on screen. 120 fps. Conclusion: Metahumans are poorly optimized. Worth noting: my custom figure actually uses Metahuman eyeballs, with Metahuman eye textures. shrugs I dunno.

I also tried custom LODs on the Metahuman, and it didn’t help. I just don’t know what the problem is. I wasn’t planning on using Metahumans in my project to begin with, but I’ll surely steer clear after this!

6 Likes

Nice write up @Ianu_Gor and thank you for the helpful info. It would be useful to know your machine specs to compare with original poster. Processor, Ram, Ram load, GPU and SSD config should be quite telling for the original poster.
Personally, I still want a PCIe 5 SSD … meaning a new system … and I want one … just because I want one. :slight_smile:

1 Like

I’m running AMD Ryzen 9 5900X, 64 GB RAM, RTX 3090, 8TB M.2 SSD. I just built her this month… and she’s already outdated… sigh

1 Like

The thing is. And I wrote it in the post. I tried to test my Project on my friend’s PC. He has Ryzen 5900x (or something like that) + RTX 2080 SUPER and he has around 30 FPS. Not a big difference from my setup, huh?

That’s very interesting information! Thanks for your test! You see? There is definitely a big problem with Metahumans and it needs to be fixed. It’s not normal to have these results, especially on your PC which is beast! It’s not outdated, it’s just that Metahumans are broken.
How can we send this info to Epic Games so they can fix this faster?

2 Likes

They’re not going to fix it. I think Metahumans aren’t geared toward current hardware, quite frankly, at least not for realtime game production like what you’re doing. When their technology has matured, the hardware (hopefully) will have caught up.

I’d recommend , either try and connect with someone else who’s using Metahumans in their projects with some success, and find out what they’re doing, or else get outside the Metahumans ecosystem altogether. I’m not sure if it’s “game ready,” yet. But I’m not an expert on them by any means.

It’s the skeletal mesh # of useless bones.

As well as a rather inept development geared mostly towards cinematics that doesn’t really follow many of the epic methods employed on other projects.

Surely the number of bones influence per vertex on the skeletal mesh is also responsble.

If on top of it its rigged via control rig you can just forget perfoemance.

If you really insit on using that trash instead of making your own for games and live/usable things, delete bones off the skeleton until you get something similar to the original mannequin.

Even then, you probably get issues unless you edit the weightpaint too…

1 Like

:flushed::flushed::flushed:

The number of bones is scaled by the LOD, that’s why Metahumans also works on mobile.

For each LOD there are N bones removed, mostly correctives, and comparing with/without you don’t really see a lot of difference if you’re using them as game characters, but it does make a difference if you’re aiming for cinematic quality.

I’ve tested my 3090 and using the Infiltrator scene, I’m able to have 8 Metahumans ( LOD 3 or 4 ) in VR at 90fps steady using Epic quality settings.

The trick for me is to just force the LOD, rather then be set automatically.

1 Like

Automatically almost always goes to lod0 - depends a bit on how you set it up, but bottom line is you have to do the work anyway.

If you really have to use metahumans, it is probably preferrable to edit the skeleton itself than to use LODs.

Theres 0 need for the extra bone data to even exist (think in terms of both disk space and memory usage).
Particualrly true for animations, since additional bones include additional animation data that’s loaded and then not discarded if the bone is not present.

The LODs should have material/mesh differences btw. Like the eyelashes being cards with transparency or being physical meshes.

So having less bones on LOD0 can probably increase performance without loosing/missing out on some possibly important stuff for in game cinematics…

2 Likes

How to change skeleton/delete bones on LOD0 btw?

I revisited this today, because it bothered me.

What jwatte said, about the CPU bottleneck… I think that may be the key here. It especially bothered me, since I got the same bad results even after removing the textures and groom hair. It seems then that it’s likely not the geometry or materials causing the optimization issues, but rather some processes going on in the background. So I tried an experiment:

Instead of using the Metahuman, I just made a basic Character blueprint, and loaded the Metahuman (Ada) bodyparts for the character, connecting them all via Master Pose Component in the Construction Script.

The result: See for yourself… I was able to get dozens of copies (there are actually six more of them off-screen), without any noticeable impact on frame rate.

Just to verify I wasn’t going crazy, I then loaded the Metahuman Ada and tried duplicating her… immediate frame drops. I deleted her hair, and all the extra body parts, and even deleted all the functions and variables and code in her Event graph… and I still saw drastic drops in performance with duplicates:

I don’t have a good explanation for this, but what does seem apparent, is that you can probably get away with just using the Metahuman as geometry for your own otherwise from-scratch character, and get good performance out of it. You’d only use the full-featured Metahuman to generate content/animations/etc. for your stripped-down Character. That seems like it’d be worth trying.

For the record, I don’t use Metahumans in any of my projects, so if there’s some reason you’re stuck using the the out-of-the-box Metahuman characters, then just disregard my ramblings! But it was a topic I just need to have another stab at.

5 Likes

Thanks for that! Btw is it possible to embed an UE4 skeleton or some other simpler skeleton into Master Pose Component?

The Master Pose Component doesn’t “embed” a skeleton; it assigns a skeleton to a particular skin instance.
A skin instance must have a compatible skeleton assigned to it; else it won’t render correctly.
If you have a Master Pose Component that uses a Mannequin skeleton, and then try to take an asset that expects another skeleton and assign that master pose component, that second asset won’t render right.

As far as I know, the only way to get a Skeletal mesh working with a different skeleton is to re-rig it in an external program, like Blender or Accurig. All the bone weights would need to be recalculated. It would probably be a nightmare too, since Metahumans are modular characters.

I don’t think the Metahuman skeleton is going to be too much of a performance drag, though. All those extra bones basically do the same thing corrective morphs do on other rigs, without needing to store data on thousands of vertex adjustments on the mesh. And the postprocess animation blueprint should handle them automatically for you by default. It’s probably best to keep the skeleton if at all possible.

If it’s difficult to animate, maybe you could animate on a simpler character and then transfer the animations to the Metahuman and just tweak them afterward if necessary?

1 Like

You can probably just open the skeleton and delete the extra non-weighted bones in engine since a few versions ago.

Otherwise, export to Blender, delete stuff while making sure it still moves, then import it back without selecting an existing skeleton.
After that you have to manually re-assign the skeleton.
The best way is probably to delete the skeleton and use the instance replacement dialog to make the replacement…

1 Like