As a Roblox developer, it is currently difficult to optimize SurfaceGuis, especially on mobile. SurfaceGuis tend to take up significant amounts of video memory, which both mobile and integrated graphics have limited amounts of. Usage of images, text, and UIStrokes increase this burden even further. Lowering the resolution of the SurfaceGuis does help, but it is insufficient when there is a high quantity of SurfaceGuis in a game.
In order to avoid this causing flickering and performance problems on mobile and low end PCs, I had to create a custom render distance system to handle all of the SurfaceGuis in my game. It would have been much easier and also more optimal if there were a built-in property for SurfaceGuis that stopped them from rendering when outside a predetermined max render distance. BillboardGuis already have a property for this called MaxDistance, it would be helpful if SurfaceGuis did as well.
It’s funny this is brought up because I thought this property did exist since it existed on Billboard GUI a few months ago, I ended up having to write a script to handle it so I’d definitely like to see this get added so that I can use a more optimised approach!
The SurfaceGui.MaxDistance API has been enabled and is ready to start being used. By default the value is 0 which means no limit is applied, but new SurfaceGuis inserted in Studio will have it set to 1000.