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