BillboardGuis don't render GuiObjects that are positioned outside of their canvas borders, even with ClipDescendants set to false

If a GuiObject is fully outside the borders of a BillboardGui, it will not render even with ClipDescendants set to false.

Here is an example video:

The purple box represents the bounds of the BillboardGui, and the green box is a frame within the BillboardGui that is moving back and forth. The BillboardGui has ClipDescendants set to false, however still doesn’t render items that are fully outside of its borders.

Why I think this is a bug and not a feature:

This behavior is likely a result of how GUI containers render GuiObjects, similar to how a ScreenGui wouldn’t render something completely outside of the screen’s bounds. However, BillboardGuis are a unique case as they have a ClipDescendants property, unlike ScreenGui.

This behavior is inconsistent with the whole purpose of a ClipDescendants property:
“When set to true, portions of GuiObjects that fall outside of the BillboardGui’s canvas borders will not be drawn.”

If the BillboardGui isn’t going to render objects outside of its bounds, what is the point of the ClipDescendants property in the first place? Why not just have it ClipDescendants no matter what? Currently, if you decide to disable ClipDescendants on a BillboardGui, you get behavior which I can’t imagine any valid use case for, as opposed to just rendering everything outside of the bounds which is what the developer would assume the behavior would be.

5 Likes

This is also the case for SurfaceGui, and ScreenGuis. Additionally, rotated objects are not clipped in GuiObjects with ClipsDescendants enabled. They disappear the same way as in the video you showed!

2 Likes

Thank you for your reply.


Yes, I mentioned this in my post:

SurfaceGuis would have the same behavior here as a BillboardGui does, as far as not rendering items fully out of bounds goes.


This is true, however this is not a bug:

3 Likes

Hi @Vmena - thank you for reporting this issue! Are you able to make the Billboard GUI large enough to fit the gui you want inside of it and set ClipDescendents to true?

Let us know if that’s a viable workaround for you.

Thanks!

Thank you for the swift response @DrRanchDressing.

In most cases this would be a viable workaround, as a BillboardGui has unlimited size. However, I have a unique use case where this would not be preferred.

Basicallly, I am creating a vertical list using UIListLayout that can be small or rather large (size being the quantity of frames that are being vertically listed). If I were to “solve this” by increasing the size of the BillboardGui, I would have to choose a maximum number of elements in this list that can be displayed, which I’d rather not do at this point. And if I did do that, if I later change my mind about the maximum size, I have to go back through and rescale everything in the UI to be a percentage of the new maximum size. On top of that, if there is a small number of elements, now I have a huge BillboardGui for just one or two small UI elements, I don’t know if that has any negative performance implications though.

Niche use case aside, I fail to see the point of a ClipDescendants property if the Gui doesn’t render objects outside of it anyways… I’m hoping this is as easy as disabling a piece of code that “de-renders” GuiObjects outside of the BillboardGui, however if this is just a current limitation of the engine please let me know.

1 Like