UE 5.4 Facing a bug relating to ISM on Android platforms and Android platform preview

Hello,

I discovered a possible bug in UE 5.4 relating to ISM. After all the exciting developments, I jumped back into 5.4 and, just for fun, tried to recreate a legacy tutorial with a bit more optimization, creating a sort of endless runner game.

Here’s the tutorial I followed: Endless Runner: Overview & Player Control | 01 | v4.7 Tutorial Series | Unreal Engine

Basically, I have made an “ISM Manager” which spawns instances of the “floors” instead of directly adding static meshes to improve performance.

I have two methods in my ISM Manager class: Add Instance and Remove Instance.

  • Add Instance: Adds an ISM instance at the world transform of the “FloorTile Class” to spawn a floor.
  • Remove Instance: Removes the 0th index of the ISM instance when the EndTrigger in my FloorTile Class is overlapped.

Now, here’s the bug: In the SM6 preview, the game functions absolutely fine. However, when I switch to the Android Preview or run the game on an Android device, the Remove Instance function behaves erratically and starts removing ISM instances haphazardly.

Please see the video for a clearer understanding. It is 480p due to file size restrictions, but the issue is clear. This project was created completely new in UE 5.4 using the Third Person template.

Thank you for your assistance.

Is no one else facing this kind of issue?

Can anyone confirm if they face the same kind of issue?

Basically, I believe the issue is with ISM adding instances for a static mesh when running Android preview or running on android device.

I can confirm that it still happens on 5.4.2 for me.

1 Like

I am having the same issue. As you said, it happens only when previewing with Android (I am using Vulkan) in 5.4.4, but it doesn´t happen in 5.3.2

I made some tests and it behaves really weird. If you set it to RemoveInstance with index 0, it removes the last one you added, but if you put any other index (i.e. 4), it will leave the first 4 instances and then start removing from the end (the last one you added). However, it is even more weird that if you set a counter so you delete index 0, 1, 2, etc, it will delete BOTH the first and the last index you added… It´s really weird!

Have you tried with Hierarchical Instanced Static Meshes? It´s the next thing i would try…

@VictorLerp apologies for tagging you here but I see you respond to some bug reports so I wonder if you could send some help here as it seems a bit abandoned? Thanks in advance!

1 Like

I dug into some C++ code and they seem to have altered the logic for instance removal for ISM by the methods such as RemoveInstance. I doubt it will be any different for HISM. In my project because I upgraded to 5.4, I failed to notice the issue due to preview set to SM5 which does not show the rendering bug so I had to rethink a new logic entirely for my project.

In the previous versions they used RemoveAt to remove the item from array but now they use the method RemoveAtSwap.

You can use the CVar as in the image to give a try if that solves your issue.

The core issue seems like the instances are being removed but the rendering is not being correctly updated.

r.InstancedStaticMeshes.ForceRemoveAtSwap

I have submitted multiple bug reports on this issue but got no response. You are the only one who has responded after facing the similar issue. So thanks!