Advertisement

Looking for 3d engine suggestions for android+windows development.

Started by February 10, 2015 02:06 AM
12 comments, last by Scouting Ninja 9 years, 10 months ago

So UE4 came out and is free now. I was eager to test out my test on performance on my android... and it was worse than libgdx, cocos2dx, unity and urho3d...

Most likely there is something wrong with my model, settings with UE4, maybe I would need to figure out how to batch animated models with ue4 to get the performance up.

So what I had was: I used the nothing scene, setup mobile, scalable and no starting content. I generated blue print that spawns 100 animated objects. The mesh was imported from blender and uses 1 diffuse texture. The ue4 engine added some specular lightning to objects though, which might explain some of the performance. Each model has somewhat of 1.1k faces, 13 bones and no ik-rig. It ran roughly 30 fps, before the processor started to slow down the process down to 17fps. The draw calls were something like 120, so most likely it doesn't use more than 1 draw call per mesh.

So I guess ue4 isn't my silver bullet to fast mobile graphics without any need to know optimize things either. Although I am pretty sure it is something to do with the configurations I have. I tried to disable just about everything from the render options except culling.

I would have guessed a draw call limitation, but seems you checked that already. Does UE4 give you some kind of profiler? Unity Pro has one, and it is sometimes extremly helpful to see which method of your own scripts take what percentage of the frame time, or where in the rendering the time is lost.

I wouldn't hope for a silver bullet really... I'd expect differences between top tier engines to be pretty close... but that goes the other way round too, I also suspect something going wrong with your setup.

Maybe setup the same scen in Unity (if you haven't done that already), create both a Unity and UE4 build, and analyze the GPU and CPU usage of both. There are GPU profilers that let you do that visually...

You should be able to tell better why exactly FPS are lost (like if its CPU or GPU that is eating up the frametime)...

Of course I have no idea if you have this tools available for mobile... and no idea if performance difference is the same on PC. Maybe test that first.

Advertisement

Now that Unity 5 personal edition has most of the limits that have been stopping me from using unity, gone, I decided to run my test on unity as well. I put 121 units like before, boom 60 fps on unity on my mobile (Nexus 5). I pumped it up to 15x15 clones of same unit, fps starts to drop, where as in urho it still running at 60 fps. I bump this up to 400 units, 20x20 and unitys fps drops to 20, where as on urho runs at 40. I figured there is probably something that I am missing, so I check the options for unity, btw I had removed all shadows and stuff like that before, so I was only drawing the animated mesh. Finally I try to remove hw skinning, and fps goes up to 40, same as on urho. This makes me wonder if the ue4 mobile version of my test iis ounded by gpu skinning on my mobile (the fps was higher on unity/urho with 4x amount of animated units). Sadly I didn't find a way to turn of gpu skinning for my mesh in ue4 to test it out.

Also this means that most likely my test itself, like I've suspected, is bit faulty by using a lot of copies of one animated mesh. Basically it would be something like rts-type of a thing, where there are tons of simple clone units moving on a screen without having any other components like AI or navigational mesh for path finding involved. I have no idea how different would it be if all my meshes were different and/or used different skeleton for deforming.

Edit: I spent couple of hours trying to figure out the UE4 and mobile. I noticed there is a console command stat anim, that I can use to see animation things. On there it says "RefreshBoneTransforms" 25ms and SkinnedMeshCompTick = "28"ms, rest of the things were under 10ms. I chekced cpustalls, and it only showed wait for an event a lot of time and a lot of calls and sleep some time, few calls.

With Unity and Unreal a lot is going on in the background, these things are to the developers benefit when used right but can cause lag if you don't need it.

It's like geometry culling, it can save performance but it has a cost so over using slows things down instead.

Your attempting to destroy a wooden chair with a bulldozer, for a lot less fuel you can just burn it.

At best you will find a engine that allows for ten or twenty more models, but without learning the necessary skills you will be stuck at these numbers.

There are many ways to improve the amount of skinned meshes on screen, these will help you more than finding the engine that allows the most. Games usually don't need large amounts of characters on screen, this is reflected by the game engines.

This topic is closed to new replies.

Advertisement