While I don’t plan to use UE5 for any real game right now, I have decided to test it a little bit, and this time I wanted to try out Nanite. As you know, from my previous articles, Nanite is a new technology in UE5 that allows you to import high resolution models without optimization. With Nanite, you can bring static models (no animated models) into the engine, in full resolution, and let the engine handle the LODs and draw calls. In theory, you can even bring a high resolution model from ZBrush (which I didn’t try because I don’t have ZBrush and I am not too familiar with it).
For my trials, I decided to turn one of the characters of Killer Dolls United into a static mesh (exported her from CC3 as an OBJ file), and then I brought the 3D model into Maya for subdivision. As you can see, the model has over 2.3M triangles.
To really test the difference in performance between UE4 and UE5 on my system, I first brought the model into UE4. It imported the model and all the textures (the materials are standard materials, not special materials since I didn’t use the CC3 auto-setup). Then I created a Blueprint class with all the model parts, so it was easier for me to duplicate the model a lot of times.
Then, I created this scene. I have to say that, when I hit half the number of rows, UE4 began to run very slow, and I could barely finish the rows of characters. There are 100 characters in total, over 237M triangles.
I could guess it would run slow, seeing how hard it was to finish the rows. The game ran at an unimpressive speed of 6 fps.
I then did the exact same process in UE5. When you import a static mesh into UE5, you have to check a box that enables Nanite. However, if you forget to do that, you only need to double-click a static mesh in the Content Browser to turn on the Nanite setting. The exact same scene setup in UE5 ran at 19-20 fps. A lot faster than UE4, but not exactly the 60 fps I was expecting. One thing I should mention, though, is that UE5 didn’t slow down at all while building the scene, opposed to UE4.
According to the documentation, there are a variety of reasons why, even with Nanite, the game might not run at top FPS. Faceted normals, objects stacked very close together (like hair), texture size, etc. Maybe me using a multi-part model rather than a single-surface model might be affecting the performance. Besides, the model has a lot of 1K textures, so I created a copy of the model with only one material and no textures. The performance increased to 24-25 fps, still not the 60 fps I was hoping for.
This is not to say “oh well, Nanite doesn’t work”. It does. It went from 6 fps in UE4 to 20 fps in UE5. Another issue is I don’t exactly know what type of hardware Epic Games uses to test Nanite, but I am definitely sure they use better systems than mine (Core i7 10750H at 2.6GHz with an RTX 2060).
I am not done yet with Nanite. Next time I should test it with a single-surface model, even if it’s a very high-resolution sphere, and see how it behaves.
Get Unreal Engine 5: https://www.unrealengine.com/ue5