Low-end devices optimizations

Hey guys!

I’m making an arcade game with pretty simple graphics. I was using my phone to test and everything was fine. But couple of days ago I borrowed an old Galaxy S3. Launched my game and it was terrible. I had like 10 fps.

So, I decided to make some optimizations and tests. I got 60 fps only if there is NO light at all, all shaders are Unlit and there are like 5k triangles on screen. Started to fill my scene with objects… After like 20 actors with 500-1000 polys each it started to give me 30fps.

20-30 fps in such scene http://s1.uploadpics.ru/images/b1gsvjugzf.png

Mobile HDR is off, no AA, many of rendering features are off, many features in device profiles are set to 0, unlit materials. Still not enough, still 30fps…

Does unreal have any solutions to optimize 3D game for a low-end devices?? I really don’t want to use other game engine :frowning:

And yes, I ain’t talking about great AAA graphics.

do you have frame smoothing set to 30 or 60?

nm default is 22-60 - it depends on your device, and you gotta do a lot of profiling to figure it out - are you using LOD’s and max draw distance? I’ve yet to get culling to work at all on mobile with volumes and precomputed visibility - that made a big difference for me

@BPANDREW

I do not have Lods as graphics is lowpoly by design…

http://s1.uploadpics.ru/images/-JLI6HDbGf.png

I even had to write own shading using unlit to get rid of PBR (you can see the screenshot, it is all unlit and custom lighting).

About precomputed visibility… As far as I know, it works only with static and buit light. I do not have any lighting (as I use custom shading), so I’m not able to build visibility…

Smooth framerate is set to default 22-60, yes.

And yes, i’ve played with profiling. I have disabled almost everything except resolution scale. If I set it below 0, everything stats to look terrible, so it is the only thing that should be static on all phones.

I also got rid of UMG interface, leaving only HUD in gameplay. It gave me some performance, but not enough.

are you gpu bound or cpu bound? what device are you testing on?

I test on Xiaomi Redmi 4 Pro, but it have 60 fps even with dynam shadows.

Samsung Galaxy S3 have 20 - 30 fps max with unlit shaders, no light, no HDR and other things I mentioned above.
GPU bound, I guess. Game does not have any complex realtime logic, so there is no problems with game calculations.

ok in my opinion unreal is going to be better at mobile. Many people says apk sizes are too big and slow on old mobiles. Not fully correct. The trick is finding right settings for your game idea. For example i am working on a runner game has inculuded 4 characters, menus, nearly 20 texture, nearly 15 static mesh etc. Draw calls are 450-500 and tris 250-300k. I get 35-40 fps on my old sony e4g which have mali and 50-55 fps on HTC one and tried on other mobiles which brands i dont remember, fps was fine.
What i do is creating map dynamically in game. if player passed through a door and wont come back, delete door after 2 seconds. Using LOD culling MAX DRAWW DİSTANCE in blueprint -15000 in my case-. Have no light. all materials are unlit. didint use any post proccessing (bloom vs.) Didnt add static meshes directly my map, always used instanced object like actor. Reduced model mesh triangles with blender program. Have played in project settings many times and reduced apk(ETC1) size to 55 mb. i think every game needs different settings. And some mobile devices has old mali GPU like my mobile phone wont render sky correctly.

And note: Physics reducing FPS. For example when your character goes to ragdoll reduces FPS nearly 5 or 10 frame…

Yes, I agree.

I don’t have textures at all, no lights and everything is Unlit aswell (custom shading and lighting). No HDR, no Postprocess. The problem is that I’m getting 20 fps on Mali 400 with only 40k tris… That’s very odd, actually.

By the way. There is new live profiler. Is it possble to enable it on mobile? I enter stat gpu, but no info…

I only used it with stat fps command. It is working on mobile devices. Didnt try other stats GPU.

epics doing a legit mobile game now, so hopefully that improves things

if you arent good at the profiling tools, remove bps from your scene one by one and isolate whats wasting your gpu, also pressing uh f5 or f6 will bring up your shader complexity view in the editor, is it all green? or is it white?

It’s all green.

Just an idea… Maybe the phone you are testing on is having some problems? Have you tried any other game on that phone (say Angry Birds)?
You should try with another low-end phone

I tested. “Smash hit” with high graphics settings works very well on the same phone. Even “Asphalt 8” gives me more FPS, but graphics is waay better…

It’s all because of Unreal, that is for sure… But that sucks, that I get like 1990s graphics with 15-20 fps. I know it’s a mobile device and Unreal is more for PC / consoles / High-end mobiles, but anyway…

I see… Another idea…
You could try to compile an APK of Tappy Chicken (A new, community-hosted Unreal Engine Wiki - Announcements and Releases - Unreal Engine Forums) and see how it runs. If it runs smoothly you may want to have a look around and see if there is any magic flag here and there to gain some FPS?

Its a 2D game, ofcource it will run smoothly. My game without meshes also give me 60fps…

Im trying to optimize 3D game for a lowend device. But I think this is the part, where Unreal just too heavy to be good.

I’ll try couple more things and if there will be no performance improvements, I’ll make this game on Unity3D.

Yea, that’s true, though it says to be “optimized for mobile” perhaps i thought there could be anything engine related.

But what exactly is so heavy? Obviously there is overhead if you use actor classes that have network prebuild, but after you initialized the objects, Unreal compared to Unity is using pass by reference with these actor classes, so reading/ writing shouldn’t be heavy at all when talking about the Gamethread. I also thought the renderer for mobile works different, also textures etc. are packed differently. Does anyone here with great knowledge can exactly say why Unreal is soooo heavy? I’m really curious about some facts <3.

In my opinion, geometry render and shaders are too heavy for low-end mobile. In my game I do not have any lighting, any complex shaders (all unlit), there are no textures.

As you can see on screenshots, I do not have anything… Like 40k polys and unlit shading, that is all… But I get 20 fps. So it must be a polycount or shader bottleneck.

I have noticed, that pure unlit shader without any material logic gives me like 20 instructions… In real shader it should be like 1 instruction for return a flat color.
just

return float3(1.0,1.0,1.0);

There is somthing unreal adds to shaders. We all know about PBR, but unlit is just a color, there should be no heavy stuff. I’m trying to get deeper in unreal shader code to see, what they done there. Maybe if i’m lucky to remove those instructions, I could get a boost to game performance.

It appears that issue is in Unreal and Mali. You can see the details here, if u interested.

thanks for sharing the link. Jack is there to help you with this issue. looking forward to seeing this issue fixed before I use unreal to develop mobile games.