Rendering Features: Mobile Vs. PC

I have created a Word document containing a lot of information regarding the differences in availability of rendering features between UE4’s PC and Mobile renderer. Some of the most debilitating limitations are:

  • No more than 3 textures per landscape component
  • No Ambient Occlusion (other than what’s set in material)
  • No Stationary Skylight
  • No DBuffer decals
  • No Auto Exposure (only exposure bias is supported)
  • No Capsule, Contact, or Distance Field shadows
  • No support for cloth (either simulations or shading)
  • No support for any shading model besides Default Lit and Unlit
  • No World Position Offset
  • No GPU Particles

If anyone knows any limitations with the mobile renderer, I think it would be good to have all that info in one place.

Great!this should be on wiki

World Position Offset works at least on iOs. I don’t see anything in the shader files that would suggest that it would’t work on other devices too.

Thanks, I linked this to our internal tickets! Hopefully we can get somewhere :slight_smile:

world position offset works on ES2 but without Textures

Doesnt work on es2

Ddx ddy
DistanceToNearestSurface Baked lighting + sprites

Wow, so many comments! OK:

I agree! We need a place to be able to see the differences between the two. Especially if something doesn’t work right, it’s good to have a reference guide.

It doesn’t work on ES2.

Thank you very much! Personally I would prefer to have Vulkan support on every mobile device in existence, but if that’s not feasible, surely there can be ways to expand the capabilities of ES2.

:frowning: That sucks. I was really hoping to make moving foliage. That’s one of the things that inspired me to make a document for this.

I’ll add it to the list!

We use procedural textures for moving with wpo.

Instanced Static Mesh: in ES2 is implemented as emulation not as Gpu feature, so it can be really expensive for the CPU.

I know how to use math for WPO, but even pure vertex data just doesn’t appear to move anything.

As for instances not working, wow, really? Is that why my construction blueprint (which uses instances) keep crashing the editor, and materials keep having issues when using the per-instance random node? What about foliage?

Instances work but not on the gpu, so don’t expect a performance boost

https://forums.unrealengine.com/development-discussion/rendering/5206-instanced-static-mesh-on-mobile/page2

There is absolutely nothing in mobile vertex shader that would exclude WPO from ES2.
https://github.com/EpicGames/UnrealEngine/blob/master/Engine/Shaders/Private/MobileBasePassVertexShader.usf#L75

Textures on vertex shader need Vertex texture Fetch extension to be supported. Vertex Texture Fetch - OpenGL Wiki

Well, I had WPO working in the standard Shader Model 5 renderer, but switching to the mobile preview took it all out. I installed Codeworks for Android and I have a Samsung Galaxy S7 and I still can’t get my project to run on my device or package for Android.

Create a material. Activate mobile stats. Connect a texture to wpo.
Check results

Textures on WPO are definitely not supported. Keep in mind this is between UE4 and mobile, not whether or not individual devices or APIs support it. The mobile rendering path of UE4 does not feature Ambient Occlusion, and it also does not support WPO in any form. Even vertex math does not work. This is not just what shows up as an error, but whether or not the end result is actually functional.

This is just not true. I have complex math based wind animation for my trees and they work just fine on ES2. Mobile also supports material AO just fine and I know this because I made the pull request to get the support for it. There is no reason to spread misinformation. Just test it.

The idea to have such list at hand is cool. If it was detailed enough and had only reliable data, not personal experience, this list would be invaluable. In current one good deal of things listed are false.

I agree. Current documentation is lacking by what is supported on ES2. Also there is lot of small things that aren’t supported on ES3.1 that could be supported but just enabling them but for some legacy reaons they are not. Only reliable way to get most of the info is looking the source code and shader code. There are lot’s of surprises. Luckily many of the these are easily fixable from shader code. But on other hand ES2 is too limited and soon to be deprecated anyway. On ios Metal coverage is about 75% now. On Android es3.0/3.1 is 63.6%. Distribution dashboard  |  Platform  |  Android Developers
When these both get to 90% there isn’t that much reason try to support es2.0 anymore. It’s just way too limited.

Hi,

Thanks for your feedback.

First I want to point out the purpose of Feature Levels in UE4, which is to mark a line in the sand for the minimum level of functionality we can require from the platform’s shaders so that they will work on all devices meeting that standard. We need a minimum bar we cannot compile materials at runtime and so these decisions have to be made at package time. For ES2 we can only rely on 8 texture samplers and we cannot rely on vertex texturing to be available. Some devices might have more functionality than this but we have already generated our shaders by the time we can know this, so we can’t easily fall back to anything else should the material want to do something that is not supported.

For other rendering features like certain post processing materials, GPU particles, refraction, the filmic tonemapper, MSAA etc we can easily toggle these features on a per-device basis because they do not require material shaders to be recompiled.

The mobile renderer can target both ES2 and ES31 feature levels simultaneously. If the majority of your customers are going to be running your game on higher-end devices, you can target them with the ES31 feature level and make less detailed fallbacks for ES2-only devices using FeatureLevelSwitch nodes in your materials.

Some of the items you have pointed out as “Not Recommended” are flagged as such in the docs because they have a performance hit. You should consider whether enabling these features is worthwhile for your game given the performance and devices you’re targeting and the complexity of your game’s scenes.

Comments on some of your items: [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Screen Space Reflections
No

Screenspace reflections are not possible given the design of the mobile render. Planar reflections were designed to be used carefully to provide a similar effect. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Screen Percentage
No

This is now supported. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Stationary Directional Light
Yes, with recommendation against

Not sure where this recommendation against is. A single stationary directional light with precomputed distance field shadows is a recommend configuration. The rest of your directional lights should be static. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

World Position Offset
No

WPO is supported (eg for waving grass or trees) but we cannot support texture fetch as it’s not guaranteed to be available on ES2. It is supported on ES31. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Scene Color Node
No

This is supported only in custom postprocess. To make it available during regular rendering would be a large performance hit because the tiled GPU renderer would have to resolve the tile out of the GPU core into memory. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Refraction
No

This is supported on devices with floating point framebuffer support, and when MobileHDR enabled [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

Distance Field Shadows
No

I guess you mean dynamic distance field shadows? Static distance field shadowmaps are supported. [TABLE=“border: 1, cellpadding: 0, cellspacing: 0”]

GPU Particles
No

These are supported in ES2 mode on devices with a certain set of extensions available. Modern devices made in the last 2 years should support them.

We have been progressively adding features to the mobile render where possible. More recent examples are refraction, planar reflection, screen percentage, GPU particles, custom depth, custom post-process, combined stationary distance field shadows + CSM for dynamic objects, filmic tonemapper, ES31 feature level on Android, however some items you list such as the decal modes, cannot be supported well without using a deferred renderer as the required information is not available in the framebuffer.

I will add feature request tickets for items you’ve listed that might be feasible with the mobile renderer on modern hardware.

Cheers
Jack

I have vertex animation for trees, tested it, and it did not work. I researched this issue, and a comment from Epic’s staff said some nodes do not work for World Position Offset (Does mobile not support world position offset nodes? - Mobile - Epic Developer Community Forums). Hence why I decided to add it to the list as “Not Supported” in the first place. If WPO works for you, that’s great. It didn’t for me. I made this list to figure out what features I personally can use with ES2, and I published it here because I figured a list like this would be really helpful for anyone developing a mobile game right now.

The engine defaults to the Shader Model 5 preview, so you can actively be working on a feature that seems operable, but switching to the mobile ES2 previewer shows that it’s not. Keep in mind these limitations are for ES2 only.

You are mixing two different features. WPO work just fine. If you try to use some other feature that is not supported on ES2 at vertex stage it does not mean WPO has issues. So your list is just not correct. Epic developer just confirment this.