Hello everyone,
On 5.3 we had the following problem where reflections would look broken on certain Android OpenGL devices with Mali GPUs
[Image Removed]The problem was coming ReflectionCaptures which had some crazy values, confirmed by seeing the artifact disappear with ShowFlag.ReflectionEnvironment 0
[Image Removed]A fix for this problem was found by setting the following on AndroidEngine.ini
[/Script/Engine.RendererSettings]
r.Mobile.Forward.EnableClusteredReflections=0
Recently we upgraded to 5.5 and we just got reports of the same issue, this time on a Pixel 8a (Immortalis-G715s MC10)
[Image Removed]
We are still gathering more details, but in the meantime I wanted to ask: have you guys ever faced a similar problem, is it something known?
All the best,
João
[Attachment Removed]
Update: this is not reproduced on Xiaomi 13T Pro (Immortalis-G715 MC11)
[Attachment Removed]
Hi Joao,
Thanks for the information. It seems likely this would be tied to a driver issue. Can you confirm the Vulkan driver versions for the offending and correctly behaving Immortalis based devices?
Best regards.
[Attachment Removed]
Hello Stéphane!
Thank you for taking a look into this. Here is the GPU information for each device, it reproduces in the first but not in the second. [Image Removed] [Image Removed]P.S: Before I mentioned that Pixel 8a had a Immortalis-G715s MC10 (I’ve taken this information from GSM Arena), but apparently that’s incorrect - instead it has a Mali-G715.
Best regards,
João
[Attachment Removed]
Hi Joao,
Can you additionally confirm GL driver versions reported in the application log or the one reported by the GLview app from Play Store? Additionally, are there any errors in the offending device’s log when running the application?
Best regards.
[Attachment Removed]
Hello Stéphane,
Sorry for the wait, it took a while to gather this information.
Is this what you are looking for? API Version: 1.4.303|OpenGL ES 3.2 v1.r54p0-00eac0.2eb223a75a2b3d1d3ecd5a6eb1b0b63d
I’m attaching the log from which I extracted it, from a session where the player could reproduce this problem towards the end after navigating to some certain levels (like LVL_Set_SteelAntlers). I couldn’t spot anything suspicious in the logs.
Just for clarity, on 5.3 we noticed this problem on many Mali GPU devices + OpenGL. However now on 5.5 this user reported this problem on Pixel8a + Vulkan (Android.DisableVulkanSupport 0). We were unable to reproduce it with any other device so far.
All the best,
[Attachment Removed]
Hi Joao,
Are you able to confirm that doesn’t occur on Pixel 9XL (asking for this device in particular as I’ve seen other cases from your org on that device). Can you share the same API version string from that device as well as the outcome of the test case? Are you in a position to provide a repro case or APK if the former is problematic?
Best regards.
[Attachment Removed]
Hello Stéphane,
I’ll ask around if we can share the APK, it probably needs some work so you can actually play on it.
In the meantime I got my colleague to test using their Pixel 9 Pro XL, the issue did not reproduce. I’m attaching the logs.
API Version: 1.3.283|OpenGL ES 3.2 v1.r51p0-00eac0.4f946ec15fb242f57c674e5b8dda1435
[Attachment Removed]
Regarding the APK, luckliy we currently have an open test so you can already download it from the Play Store
The reproduction steps are:
- if you are testing with the Pixel 8a you need to bypass our workaround where we removed reflections in the device profile
- Kill the app, connect the device with a USB cable, start it again with a forced DP through adb (might need to turn on developer mode and usb debugging)
- adb shell am start -n net.wargaming.medusa.test2/com.epicgames.unreal.SplashActivity --es cmdline “‘-dp=Android_Mali_G715_Vulkan’”
- Login, if as a guest you need to go through the tutorial first
- Land at the hangar level, where you can select tanks
- Wait until everything is downloaded (tap profile pic, “download manager” should be gone)
- Navigate to different tank sets (Two tanks together icon at the top > Browse)
- The reporter mentioned that not all tank set levels reproduce this artifact. Some where it was reproduced include “Steel Antlers” and “Burning Venom”
[Attachment Removed]
FYI we just had a new report of a player reproducing this issue on his Vivo Y29T (Mali G57 MP2). For this device we use OpenGL.
[Image Removed]Recently we enabled reflection on tanks, so that’s why you only see it there - everywhere else has roughness = 1.
According to him the issue was gone after a restart.
Some other devices that reported this problem:
- Redmi 14C (Mali G52 MC2)
- Samsung S10 (Mali G76 MP12)
[Attachment Removed]
Hi Joao,
Did the issue occur with OpenGLES on the Pixel 8a device that originally had the issue with Vulkan initially?
Best regards.
[Attachment Removed]
Hi Stéphane,
No, the initial issue on Pixel 8a occurred while using Vulkan. You can confirm it with the logs that I attached above of when it reproduced.
Regards,
[Attachment Removed]
Hello Stéphane,
I managed to reproduce the issue on my local device S10+ (Mali-G76 MP12, OpenGL ES 3.2 v1.r32p1-01bet2-mbs2v39_0.131801e953429f661ecce1d5e1d2b3ef) with both Vulkan and OpenGL.
I then created a sample project without any engine modifications on 5.5.3 where I could repro the same behavior - the project and the Android build is attached.
Repro steps: Switch back and forward between Set 1 and Set 2, eventually you get broken reflections. By enabling the ‘Simulate delay’, the durating that the lighting scenarios overlap is bigger, and also much more likely to reproduce.
Cheers,
[Attachment Removed]
Hello,
I was wondering if there have been any updates regarding this bug, as we have an upcoming public playtest soon
Thank you
[Attachment Removed]
Hi Joao,
We have access to a matching Exynos based device and will investigate, however, it is likely that the only path to resolving would be to disable the reflection path for that driver range. We’ll report back however if any workarounds are possible.
Best regards.
[Attachment Removed]
Hi Joao,
We believe this is a case of half precision in the shaders affecting that chipset (low precision floats have different levels of precision depending on chipset). As an initial test, does forcing full prevision at the project level?
We believe the issue may pertain to 0 Roughness for the material resulting in imprecise clamped roughness in MobileBasepassPixelShader.usf. Adjusting precision of the variables in that particular shader may help resolve without forcing 32 bit floats globally.
[Image Removed]Best regards.
[Attachment Removed]
Hello Stéphane,
Thank you for the suggestions. I tried the following scenarios:
- Engine: updated roughness from half to float in MobileBasepassPixelShader.usf
- Game: forced FP for all floats in the project
- Engine + Game changes
However, I still had the artifact with all the scenarios. Couldn’t it be something wrong with the reflection captures (probably encoding/decoding), as indicated by Renderdoc?
Best regards,
[Attachment Removed]
Hi Joao,
Were you seeing persisting symptoms in your application or the repro project you shared?
Best regards.
[Attachment Removed]
That was in our application. Let me know if you want me to try it in the repro project.
[Attachment Removed]
Hi Joao,
Yes, would be good to confirm as the dev on this end did the diagnosis based on the repro.
Thanks.
[Attachment Removed]