'Layering' of 3D objects

I would find it highly useful if we could cause certain parts/unions render above others, even if the other ones are further away from the camera. I’d mainly like this for the ability to create a 3D GUI that doesn’t get intersected by the surroundings.

What I mean by that is that, currently, when I create a 3D GUI, I need to CFrame bricks in front of the camera. Due to the relatively far away near clipping plane and part size constraints, it has to be about 5 studs away at minimum. This means that if the camera gets anywhere near any bricks, they will cover part of the GUI like so:

If we could tell the engine to render the GUI parts over any other parts, I wouldn’t be having this problem.

2 Likes

Change the offset of that billboard GUI to be 15 studs behind the object.
I do this in my game, and I never have any trouble with it.

[quote] Change the offset of that billboard GUI to be 15 studs behind the object.
I do this in my game, and I never have any trouble with it. [/quote]

The problem is that it’s not a BillboardGui. I’m trying to create something like an inventory where the objects are actually shown in 3D, and are rotating. So I CFrame an actual brick (with a BlockMesh with thickness 0) in front of the camera.

BillboardGuis would bring a lot more difficulties with them. They are not meant for this purpose.

There is a really clever solution to this problem: Decrease the FieldOfView on your game, or even just while you have the 3D interface in question up.

With a smaller FieldOfView, you can put the camera very far away from the actual level, and still have it look normally zoomed in. Then there’s plenty of room between the camera clipping plane and the actual level to construct your 3D GUI. I used that technique to construct this GUI, which uses about 30 studs worth of vertical depth in the worst case to position all of it’s various parts in:

Side view of the scene:

That’s a neat idea. I’m afraid it won’t really work for what I’m trying to do though.
The inventory is shown on the side of the screen, and the player should still be able to move the camera around normally and interact with the game while it’s open.

While this would easily work with a level with open sky, there’s no guarantee they won’t put a roof above themselves or try looking at something from below (at which point the ground would be between them and the camera). There’s also no guarantee that they won’t try to zoom in all the way, which creates a whole set of new difficulties.

While I could limit players and not allow them to do that, I really want to limit them in as few ways as possible while still providing a nice UI.

[size=2]0100 0000 0000 posts[/size]

This is what I’m trying to achieve:

EDIT: Perhaps “build menu” is a better way to describe what I’m doing.

Yeah, I see what you’re trying to do now. Unless you use the 3D UI in a constrained sort of environment like a specific menu, then you’ll run into problems like that. You probably won’t be able to get a satisfying 3D UI for what you’re trying to do there unfortunately.

Alright, thanks!
I understand that this wouldn’t be something that could be implemented quickly, but I still think it would be nice to add something like this in the long run. Please do consider adding this as a feature some time.

[size=2]EDIT: Meant to thank your other post. Derp. :/[/size]

I would really want this. It would take FPS games to a whole new level, give developers far more freedom over UI design, and in general allow for more interesting gameplay aesthetics.

I wouldn’t bother with “layering” of 3d objects, it looks ugly in those screenshots in my opinion…

Instead, I’d like to be able to render to some decal-like thing or so, some view wherever some camera is positioned and oriented at something is also being rendered (with lower quality?) with some user-specified parameters (output resolution, …) to a texture/special thingy which can be put on guis or a face of a basepart. (Not sure what it’s really called, render-to-texture or something like that?)
This would allow things like described here and much more (proper mirrors e.g.).

It’s however somewhat more resource intensive, but if used sparely it’s a great tool.

[quote] I wouldn’t bother with “layering” of 3d objects, it looks ugly in those screenshots in my opinion…

Instead, I’d like to be able to render to some decal-like thing or so, some view wherever some camera is positioned and oriented at something is also being rendered (with lower quality?) with some user-specified parameters (output resolution, …) to a texture/special thingy which can be put on guis or a face of a basepart. (Not sure what it’s really called, render-to-texture or something like that?)
This would allow things like described here and much more (proper mirrors e.g.).

It’s however somewhat more resource intensive, but if used sparely it’s a great tool. [/quote]

That would be called ‘render target’. It’s something that has been suggested quite a few times before, but it doesn’t look like there is any intent to support it unfortunately.
If we were to get render targets, those would be sufficient in my case.

[quote] I wouldn’t bother with “layering” of 3d objects, it looks ugly in those screenshots in my opinion…

Instead, I’d like to be able to render to some decal-like thing or so, some view wherever some camera is positioned and oriented at something is also being rendered (with lower quality?) with some user-specified parameters (output resolution, …) to a texture/special thingy which can be put on guis or a face of a basepart. (Not sure what it’s really called, render-to-texture or something like that?)
This would allow things like described here and much more (proper mirrors e.g.).

It’s however somewhat more resource intensive, but if used sparely it’s a great tool. [/quote]

That would be called ‘render target’. It’s something that has been suggested quite a few times before, but it doesn’t look like there is any intent to support it unfortunately.
If we were to get render targets, those would be sufficient in my case.[/quote]

I had talked with zeuxcg about render targets, and it is problematic to implement them, because roblox camera is hard-coded to support only one active.

We could achieve this using Render targets, however I am sure you could still do it by making it all a smaller scale, you could also have it so when you open the menu your camera freezes in a “safe” position.

Unfortunately, freezing the camera in a safe position is not an option for me. I’m making a build menu, and I’d like players to be able to interact with the game and move their camera normally while it’s open.

Then have you considered shrinking it down?

Yes. Part size constraints and the near clipping plane prevent me from scaling down any significant amount.

Just gonna bump this up a bit - I really want this feature. It’d be extremely useful in a lot of cases, not just the one I’ve mentioned here.