I don’t think this is a billboardgui-specific problem.
Rendering order for transparent objects is determined by which part’s center has the smallest value in the camera’s Z direction. If you had a transparent part with a decal on it in the same place as that billboardgui, you’d have the exact same problem.
Check this out:
And this:
But how about this?:
It doesn’t even matter if I put the center of the transparent part behind me!
I’m thinking the solution to your problem is to make sure that the center of that lava part is further back than the nametags at all times.
You should be able to accomplish this in one of the two following ways:
Split it up into multiple parts, so that it’s harder to get a section of lava closer than a nametag. This won’t be perfect.
Write a small script to move the lava around on the same Y-level, such that the lava is X studs away from the camera. This should make all nametags within X studs always be on top of the lava.
I agree. The preferable behavior is to have transparent objects render as-expected without any fiddling.
I don’t think this is a bug though. The engine is acting as programmed, because this is exactly what’s supposed to happen. This is more so a feature request. Sorting of transparent/translucent objects in real-time 3d graphics is, apparently, very hard.
I’m no rendering expert, but to my understanding, you won’t see this solved any time soon. I’ll put down some links and you can look into it yourself from there.
This thread discusses some similar stuff and has a staff reply.
This video describes how ordering objects on the screen works, and describes why pixel-based ordering doesn’t work for transparent objects.
One of the suggestions is to split the mesh into many smaller meshes
One of the suggestions is to always render a certain mesh on top. Roblox used to do this was BillboardGuis and SurfaceGuis, and people didn’t like it, so it was fixed.
If you still sort-of want to do this, you can set AlwaysOnTop to true and change the visibility depending on if a raycast can reach the player’s head.
One of the suggestions is “Cutout Shaders”. I don’t know exactly what those are, but they sound very similar to the things that Roblox hasn’t implemented for GUIs because of mobile performance problems.