OK Newbie I've built a Cube based benchmark and been disappointed with performance!

Hi, Here is a screenshot of my benchmark

You can download the benchmark here

That’s right Unreal on my PC only managed 534.0 cubes with a target FPS of 30fps, OK it looks great but!

The benchmark, rotates a cube then while the FPS is above the target it adds another child cube within a random spherical distance from the root cube.

This is my first attempt with Unreal of a simple project and I’m hoping to obtain some advice on how to improve the performance of this benchmark.

I have a Unity based version of this benchmark and it can spin about 5,000 cubes with colliders on my PC. Now Unreal has PBR but I’m sure with your help and advice I will be able to improve on this.

So what can I do to this default project using blueprint to improve performance?

Well it’s all apples and oranges. There is a lot you can do to improve performance, it just depends on how good you want things to look. I don’t think you can (easily) come up with a baseline comparison between engines, unless you disable everything but simple geometry rendering. But then that’s hardly representative of the engine’s capabilities. Ultimately what matters is how fast the engines are at rendering the difficult stuff.

For engine comparison I thought that if I used the same basic model, textures, camera and algorithm then I would obtain a standard baseline for both engines.

As all I am measuring is how many textured cubes Unreal and Unity can keep spinning at a given FPS or the engines CubeMark.

In the Unity version I run 3 tests, cubes with colliders, cubes without and quads then combine the number of cubes/quads into a CubeMark. And you can test the CubeMark at 30 or 60fps.

The idea was to give developers an insight into how many simple objects the game engine can move at a given frame rate.

Also I used Unity’s Quality settings so people could see the difference between settings.

So does Unreal have a set of preset Quality settings?

My plan is to have a Unreal version of CubeMark that is comparable to the Unity version.

OK Update the previous build was made with Unreal 4.1, I have upgraded to 4.6.1 and TADA doubled my Unreal Cube Mark now 1243.0 cubes @ 30fps on my PC.

There’s some graphical effects that UE4 has on by default that Unity doesn’t, like Ambient Occlusion, Screen Space Reflections, stuff like that. That all slows down performance noticeably. Also, for things like cubes, you would want to batch them, which means that it would dynamically combine the cubes into a single object, that would reduce the number of draw calls and improve performance. In UE4 you have to do that manually, Unity has an automatic option for that, but it also has a polygon limit on how many things can be batched. For UE4 for instance, you could thousands of grass planes that are batched together and run very smoothly.

Hello Arowx!
What are you trying to accomplish is a little bit… Impossible.
The point of benchmarks is the running SAME operations on different hardware to understand how they are handle them. But you’re actually giving different tasks to different engines and then comparing results, which is complete nonsense. UE4 and Unity Pro are complex engines and difference between seemingly to you same operations is incomparable. You can’t run different tasks on different software with different rendering settings and then compare it, it is just wrong. You can turn off all AAA graphic features of UE4 and lower settings, change logic and etc and run “benchmark” extremely fast, but again - what the point?

Simple example of my old experiments:
My GPU could not handle this amount of hexagons with dynamic materials(Bright red color - dying gpu and 10 fps)


Then I tinkered some stuff and achieved this

And then this with even higher fps

The point is to get a basic idea of what the game engine can do at a given frame rate. Think of it as a basic heuristic or rule of thumb test.

And I would like to include setting for Quality that affect speed, then developers using Unreal can get an idea of the performance impacts on their hardware of the settings.

But it’s just a simple idea for a simple test.

How did you manage to go from a few hexes to so many at a high FPS and do you have any tutorials?

OK I’m going to add quality settings based on the Scalability Reference -> Scalability Reference for Unreal Engine | Unreal Engine 5.1 Documentation

Is this a good starting point for basic Unreal game/benchmark quality settings?

CubeMarkUnreal461b.png

OK that’s in the build size had doubled and it seems to be from the engine binaries, is it debug info???

And what is the ICU binaries folder as it’s really big with lots of dlls?

Now I’ve only been using the rather nice blueprints system but how do I now:

  1. Get system information - e.g. CPU, GPU, OS, Memory, GPU Memory specs, Unreal Version
  2. Store data between levels and runs
  3. Get available resolutions ideally in blueprints

I’ll hunt around for these on my own but pointers would be nice.

Odd thing though even with the resolution scale set to really low 10% the CubeMark on my machine does not go up?

Funny; I’ve been running a (playable level) scene with more than 4 million polys on average 80~110fps in-editor.
Of course it runs even much more smoother on standalone build.
I would never be able to do that in Unity even without all the fancy Dx11 PBR effects UE4 gives.

If your hardware is not good to run Dx11 games that may be the problem.

Could you try the benchmark to see what cubeMark your hardware gets and to test if it’s just my hardware not working well with Unreal 4.6.1?

The latest build is postfixed 461.zip but comes in at a staggering 100+ Mb zipped, previous 4.6.1 build zipped to 47 Mb and the original 4.1 version was only 28 Mb zipped.

Oh and what system specs?

My PC -> Windows 8.1, CPU AMD FX8320, 16 GB RAM, GPU AMD 7900 series 3GB RAM.

Got little more than 2100 cubes on this test.
The bottleneck is obviously PhysX and whatever code you’re using to manipulate the cubes.

i7 4960X 3.60GHz, 32GB, Gtx 780.

I hope not it’s just a simple blueprint rotation on the root cube, all new cubes are added as children.

I will be adding another test with a cube without colliders so hopefully that will test to see if it is PhysX.

Good news got the 4.7 preview and it upped my PC’s Unreal CubeMark above the 2k mark.

But what’s with Unreal including all these third party binaries when I’m not using them!

It pushes the build unzipped to over 200Mb.

And it looks like they’ve added a web browser framework and internationalisation framework (ICU) plus APEX (Cloth Physics?).

I’ve looked through the Build Config Settings and I can’t see options for removing these modules?!

Do you use instances for the cubes?

My PC is not really better than yours, but I get 1820 Cubes.

AMD Phenom II X6 1090T, AMD Radeon HD 7850, 16GB RAM @1333Mhz

There are lots of things that can cause it to be running slower than it could. Give us a few screenshots of blueprints on how you are spawning them, rotating and moving them.

I’m new to Unreal so, I’m not sure what you mean by instances?

I’ve imported a cube so it’s a ‘static’ mesh, movable with collider.

Set it up with a texture, made a blueprint of it.

Then added it to the blueprint that runs the CubeMark which spawns a new one each frame until the FPS drops below 30 fps.

Make only one single InstancedStaticMeshComponent where you choose your cube as the mesh. Then spawn new cubes with the “add instance” node. And rotate the cubes with “UpdateInstanceTransform”. Doing it this way you will get a lot better performance.

Cool but will they still work as valid PhysX colliders if I was to start firing balls around?

OK built a version for Unreal 4.7, on my PC it gets a 2523 CubeMark (and zips down to 46Mb)!