Client-Created Parts Render Incorrectly on Low-Memory Devices

Reproduction Steps

Issue Overview

On low-memory devices, if you create an instance on the client and update its position regularly, the part will not render in the correct position as the memory begins to saturate. This can lead to entire entities disappearing and game-breaking visual bugs. This is unacceptable for a mobile-first game.

The issue is more pronounced when StreamingEnabled is set to true, or if these created parts are positioned away from the character when they are parented to workspace; however, the bug seems to happen no matter what.

Repro steps

Download this file:
LocalPartsRenderingIncorrectRepro.rbxl (25.3 KB)

Do the following steps on a low-memory device (my phone with 2 GB of ram suffices, as does some devices belonging to my studio’s team members). If the issue does not appear, try turning on Workspace.StreamingEnabled, as I’ve found that seems to make the issue more pronounced:

  1. Upload this file to a roblox place

  2. Play the place on a low-memory device (ideal a mobile device that tends to have low framerate in general)

  3. Wait for the memory to saturate while the server creates random parts with random images on them. Initially, when moving around, there should be red + green parts that are moved over your head. On high-memory devices, these appear normally:

The UI above shows the frame count; the distance between your character’s head and the position of the red part before it’s updated; and finally, it shows the parent of these parts (relevant to StreamingEnabled, since it seems like these parts are getting streamed out, but they still exist in workspace).

  1. Eventually, the red and green parts should start to lock in place if your memory is saturated, or disappear completely sometimes if StreamingEnabled is set to true. When they lock in place or disappear, the UI will still say the parts are around 3 studs away from your head, and the frame count shows that this is still updating accurate to the last frame. So this means the parts are rendering locked in place, even though they’re being updated on the client.

I don’t have a picture for what it looks like when the bug is happening. Just imagine the green/red parts suddenly freezing in place or disappearing instead of following your head.

Expected Behavior
The green and red parts should always stay locked over your head, period.

Actual Behavior
On low-memory (i.e. mobile) devices, these parts stop rendering in the correct position, especially when the memory starts to saturate or if StreamingEnabled is set to true.

Workaround
There’s no surefire workaround to this, and it seems to be hurting mobile users while leaving PC users unscathed, and only in places with a high enough memory for this to start happening.

Parts that are created on the server don’t seem to have this issue as far as I know? Also, turning of StreamingEnabled and also positioning the new client-side parts close to the character BEFORE placing them in Workspace seems to mitigate the issue in my production game.

The reason why there is a green and red part is that the green part is repositioned before it is parented to workspace when it is created, and the red part is repositioned after it is parented to workspace when it is created. In my production place, which is less memory-intensive as this repro, parts like the green part would appear and update correctly, while parts like the red part would not.

Issue Area: Engine
Issue Type: Display
Impact: Very High
Frequency: Often
Date First Experienced: 2021-06-15 00:06:00 (-06:00)
Date Last Experienced: 2021-06-15 00:06:00 (-06:00)
A private message is associated with this bug report

2 Likes

Thank you for the report! We will look into this.

4 Likes