Android 4.7.2 Optimizations

I’ve been playing around with Unreal 4.7.2 - just to evaluate it for my development purposes.

I’m running on a Nexus7 2012.

The third person blueprint - runs about 10-15 fps out of the box

several optimizations (Lightmaps,statics e.t.c.) I can get it to run about 35fps. But really its a scene with less than 20 objects all extremely low polys and 1 skinned character.

Is there anyway to get this running at 60fps? I mean the citadel demo runs at avg 55fps and has so many verts/poly details
I’m wondering now was that actually made with unreal :stuck_out_tongue:

I’m guessing the mobile builds use some deferred rendering or something?

I tried turning the GBuffer option in Settings->Project Settings->Renderer->Lighting->GBuffer

but I get a black scene - that will not package at all (packaging hangs)

I really like the Unreal workflow and tools, blueprint and all that jazz - it’s excellent, but the 3D performance at the moment on my Nex7 is just ridiculously slow.

Any Ideas?

ZJ

The Tegra 3 gpu is rather slow in comparison to current high end phones. It is slightly slower than the iPhone 4s. Try disabling mobile HDR and see where that gets you.

Yeah I turned off HDR - and just about every other single expensive render feature - the maximum frame rate I can get it to is
around 35fps. The Nex7 2012 hardware is more than capable of running my scene at 60fps (Citadel, Nova1-3 e.t.c really push the polys) - I guessing either the droid engine is not optimal at the moment or the actual rendering pipeline require much higher specs. If it’s the renderer pipeline I’m wondering if it’s possible to switch it to a simple forward renderer with vertex lighting and no deferredness to get that frame rate good? I read a few snippets online that the renderer does drop down to a FR for mobiles, but who knows?

Try use unlit material, the default lighting model is too expensive for low-mid end mobile

Yes I have the same device and I get about the same FPS ranges with the template projects with HDR off and Epic Citadel. Fact is UE4 just seems to be using much more expensive shaders. And yes we could set lighting to unlit, but why? UDK 3 and other engines are more than capable of allowing for some basic shadowing and complex lighting features (like normal maps) that UE4 just cannot produce on this hardware.

I wouldn’t get my hopes up on them supporting this older hardware. They seem to be really focusing on pushing the best graphics on the newest generation hardware.

It’s frustrating because for example, with 8 unique meshes all sharing the same material, and a grand total of 72 meshes on screen at once (all quite low poly), I am only able to squeeze 25 FPS out of UE4. This is with one static directional light, basic lit w/ fully rough materials and no shadows or lightmapping. I don’t have a problem setting up this exact same scene with the same meshes and materials in other engines, with much better frame rates - up to as high as 115 or so.

Couple days ago I bring up this topic Please-support-dynamic-and-static-batching-to-minimize-drawcalls-for-mobile-and-low-end-PC, I personally believe the lacking of batching support might be one of the reason UE4 performs so bad on low to mid end platform.

I also wish we can easily use “traditional” non-physical based shader like in UE3 on mobile, I’ll be more than happy to have levels with UE3 quality and performance running on my phone, rather than UE4 quality slide slow. But I’m afraid that might not be the direction Epic taking.

Hey thanks for the info folks

Yeah I got it running at 60fps - using unlit materials - yaay and boo at the same time.

I agree that it’s very frustrating, that the default performance on the low-mid mobs is so poor. In my evaluation - I found the tool set and workflow to be excellent, and something that I could work with. It’s not perfect by any means (atan,atan2,tanh,erf - missing from blueprint math expressions? lol) , but I can live with it easily. If I can find a way to rig up a trad renderer (as pointed out by nate) for the low-mid devices - I’ll use it in my projects.

I had a play around with the materials editor on my unlit material - and added vertex colours easily
just with a multiply node. So I can paint my vertex colours (lol so oldschool!) and still get the performance.

So if we could get a Lightmap-Sampler node, you can probably get lightmapping for the low-mid devices at speed. I’m assuming that the engine still sends the same vbo with all the attributes and sets up the texture stages regardless of material shader model (maybe wishful thinking :slight_smile: ).

And then extended that further so you could put some simple shadowing in and maybe a light or two.

I’m probably dreaming tho - right? lol

It’s definitely possible to do vertex lighting, however I haven’t a clue how really do it dynamically – for instance, I can have a box with a vertex based lighting shader, but as the light is defined in the material… for every light in the level you’d need to have it defined in the shader. I don’t really know how to get around that. But you can do some cool things with it – like bake light mapping with a static pixel-based point light, and have a dynamic vertex based light to shade the dynamic objects.

And shadows and proper shading are way over my head :stuck_out_tongue:

They just need to add a few nodes:

LightPosition Node - Nearest light pos
Lightmap Sampler Node - the actual lightmap texture
Shadowmap Sampler Node - any Shadowmap texture
e.t.c.

all these things are probably setup and passed into the shader regardless.

with all that you can knock up your own low-mid hardware light solution - just using emissive colour out and unlit textures (I’m assuming a few other things are happening under the hood tho).

I’m wondering if this can be done with a Shader Custom node.

I had a play around with that - and you’ve got access to the shader Material Structure so you can do

return (Texture2DSample(Material.Texture2D_0,Material.Texture2D_0Sampler,Parameters.TexCoords[0].xy));

wondering if you can access the other uber-shader stuff.

I did attempt to use the GBuffers_GBufferATexture texture2D as a test - but it totally crashed the editor - some kind of shader resource hash cockup - lol