Indoor Dynamic Environment Maps Beta

I didnt mean to reply to you, anyways, im giving feedback.

It was incredibly hard trying to get this working - I only managed to get the reflection to work on some very specific (and weird) angles when using a PBR texture. This is one of the things I saw:


The mouse is in the reflection?

17 Likes

The environment maps definitely look great on small objects, but things get really funky on large objects such as floors - in the video below, the floor is made out of a meshpart with a white metalness map and black roughness map to have the maximum shininess. The issue becomes apparent when the floor reflection doesn’t follow the camera.
https://cdn.discordapp.com/attachments/785870115463626765/822474933266546708/7q6fTwLjTz.mp4


Overall though, this is a very promising feature that’s coming out of it’s development stage. Huge props to the developers of this feature, and I can’t wait to see more! :grinning_face_with_smiling_eyes:

11 Likes

This looks like CSGO env maps lmao

3 Likes

This was already explained once by a Roblox staff member and it really makes sense why they have a slider.

1 Like

First I think that there was a misunderstanding. My bad!
This feature is not a mirror and this feature should not be viewed as env map per say. In retrospect I should not have called this announcement an Environment map, but indoor lighting improvements. But that is too late for that now … isn’t it? Sorry!

What is it then?
This could be viewed as a first step of FIB4 - global illumination. We are improving the specular indoor reflection for metallic objects. (all of the objects actually! But metallic really benefits from it)

This is not a new feature. This is not envmap in the sense of the environment mapping that you may know from other engines. This is not a new creative feature.

It is only meant as a quality improvement. Ideally You should not really notice this, unless saying “ugh it looks more realistic then before”

What does it improve?
With the introduction of PBR materials to Roblox we were facing a slight problem. In the PBR lighting model metallic objects needs reflections. In very simplified terms: Metallic objects in the PBR model relies on the IBL (image based lighting) to provide the color, which is coming solely from the reflection of the surrounding environment. If the material is smooth it is a mirror like reflection. And the rougher the material is, more “blurier” the reflection gets. For non metals we use analytic computation.

Example of progressively rougher metallic material in Roblox Engine:


To get those “Blurry” samples in an efficient way, we precompute all of the possible levels of roughness for a particular env map first before using it.
That is (also) why EnvMaps are not real time. Btw environment maps are usually not real-time in other engines as well.

Outdoors we use skybox for now and till now we used a noise texture with some creative hacks to represent the environment map indoors. Finally we are replacing it with the dynamic solution.

The general goal of the PBR is to make content created once to look great in ANY lighting conditions.

And with the indoor env maps we are one step closer to it. Image based lighting is a important step towards games looking more realistic and is necessary for metallic objects.

Example of object with PBR material with and without IBL (image based lighting):



Important tips:

  • Use PBR materials, not reflections (reflectance)
  • Set lighting->ambient to very low or zero values
  • Use lighter albedo (part color)
  • Turn off eager bulk execution
  • Use future lighting

Do not use reflectance
Reflectance is legacy and we are not planning on supporting it with env maps. If you use reflectance you won’t be able to to see env map.

Well you kinda could if you blow up exposure as many did over here. Bottom line:
If you want to use env map, use material service and metallic object

why you had to crank up brightness. You do not need to do that :slight_smile:

Use low ambient:
Ambient is a hack. There is no ambient light in real world. Environment maps are an attempt to replace the ambient with something more correct (more correct, not correct! :)). Envmap shines better in low or no ambient light set

Use lighter albedo (part color):
Albedo is multiplied with the envmap reflection so dark parts won’t have much of the reflection visible.

Turn off eager bulk execution
Eager bulk execution is the studio only setting that allows to process all the computation that might be distributed over many frames in real game, to be done in a single frame. This could lead to some unexpected flickering of the envmap that your players would not see.
(We might fix eager bulk execution and envmap, but for now, turning it off is the way)

Use future lighting
Envmap really does shine with the future lighting. That is because in Future we compute per pixel lights and in very simplified terms: those are designed to work with the EnvMap … in fact: they are part of one system.



FAQs:

Why can’t devs place env maps?
Roblox highly believes that instances used in the engine should represent the real world. There is no such thing as a “lighting probe” in the physical world, so we cannot add such concepts.

I understand that this may sound highly inconvenient, but you can always just decide to not use the IBL system until we improve it to your liking.

We plan on improving the automatic placement based on your feedback. Please provide more concrete cases where automatic placement failed You. Send us (@convexRumbler or @programeow ) rbxl files with repros and mark spots where you would expect the probes to be placed!

We want to improve the system before shipping it.

In future we want to have a very robust system in which you won’t even need to think about probes. Lighting will just work. It will take a while to get there. In the meantime we want to start with this system: one probe and automatic placement.

What is indoor and outdoor?
Roblox has a pretty straightforward concept of indoor and outdoor. It is still voxel (LightGrid) based and it has its flaws. We know! It is hard to replace this system, but we are also working on it. In the meantime “Skylight term” decides what is inside and outside. It can fail sometimes (if the walls are too thin) and it also has resolution problem. Same as the rest of the voxel based lighting: 1 voxel = 4x4x4 studs.

Why no parallax correction?
The examples that you guys shared are from situations where reprojection is trivial: eg. simple analytic shapes (box, plane). These are simple to reproject. However more complex scene are quite hard to get right.
However we do not give up and have some thoughts on parallax correction. This is not closed chapter.

Why no humanoids in the env map?
This feature is not meant to be a mirror. It is to help improve visuals indoors. Since the computation of envmap takes couple of frames (to split to load and to not slow down the game) we purposely choose not to render humanoids into env maps.

Why no screen space reflections
Again: This feature is not for mirrors. It is to improve shading of (mosty) PBR metallic objects indoors where we were lacking quality. Screen space reflections typically mean a single bounce/mirror like reflection. This is not the same as a prefiltered (precomputed) map that supports objects of varying roughness. So (only) screen space reflections are not solution to this problem.

However! We as engine team are definitely not opposed to the SSR and agree that they can be really useful, maybe even combined with envmaps in the future… Maybe!



We want your feedback!
Now with lots of confusion cleared… At least I hope so! We would love to hear your thoughts and feedback. We are really curious about the cases where the automatic probe placement breaks. When does it place the probe at a silly place, where would you rather have it? When did it react to slow for You?
Does it hurt visuals of your game? How?
Please provide videos, screenshots and ideally! Provide rbxl files (not your complete games obviously :wink: ) with repros. This would really help us make this feature better!

Thanks!

45 Likes

I undestand whats happening more, but then another issue lies, if they are not intended for mirrors, or accurate reflections, why can we see messed up reflections on reflective meshes? It personally looks very ugly and im not very pleased with it.

What i was thinking is, why not use env maps for the lighting, and SSR for reflective materials? That way you no longer need the hacky ambience and you have beautiful looking reflections.

Personally i really hope that roblox eventually realises its a game engine, not a game itself, and decies to allow developers to create AMAZING graphics, and not be forced to have them work on every platform.

Also, it would be sick to have more robust graphics setting for users, so they can easily disable shadows, reflections etc - yes, it may break some games, therefore there also should be a feature for developers to restrict certain graphics changes.

2 Likes

What i was thinking is, why not use env maps for the lighting, and SSR for reflective materials? That way you no longer need the hacky ambience and you have beautiful looking reflections.

We are considering options like this. SSR is not a silver bullet thought

It personally looks very ugly and im not very pleased with it.

Happy to get feedback. But please provide concrete examples. It is hard to fix things that we cannot see! :slight_smile:

7 Likes

So practically a feature so big that could’ve been used in so many ways is just to improve metals because I can’t see the effects of global illumination on regular parts.
I always think that we get so many limited features just because many users don’t know some basic optimizations to use them properly and then they will come to complain, the engine itself doesn’t lack many features they’re just extremely limited in properties
I don’t understand why is it really important to be automatic instead of manual that’s how it works everywhere and no one ever complained because there is another thing when you feel like you can actually make something the way you like and letting a system do it for you

2 Likes

Its hard to explain, but i can move around, and randomly because the wall was orange, the whole scene turns orange. Later down you can see me standing in a closed space, and white walls, appear blue and red?

Its also purely impossible to light up rooms properly, as you make the scene lighter, and suddenly after a few seconds its glowing, then make it a little darker, and it turns black.

If you would like to, i could somehow screenshare and explain whats happening visually which would be much easier.

10 Likes

My question is, why is the skybox color influencing the reflection color indoors? If this feature is made strictly for indoor spaces, why is the skybox having an effect on this?

3 Likes

that’s just how cubemaps that aren’t parallax corrected work. you almost certainly wont need mirror-finish floors anyway; with roughness variation / nonmetal materials its fine imo

1 Like

I think that’s due to how the IBL is lighting the objects along with the actual lighting in the room. you add a light, not only does that illuminate the object, but it becomes part of the cubemap and therefore image based lighting and it’s multiplied.

I understand why Roblox would want their rendering features to be as physically-based as possible - but not allowing the manual placement of probes by that same justification just doesn’t make much sense to me. Sure, envmap probes don’t exist in real life, but having the computer automatically decide where to capture the envmap instead of the user doesn’t change that fact.

I get Roblox’s approach to probe placement in the context of its userbase and overall philosophy - the engine already handles all of the lighting features with little interaction from the user, and it makes sense for that to be the case. Requiring every user to manually set up lighting probes for their objects to shade correctly indoors would definitely not be a good idea, given how Studio already avoids so many other aspects of other engines that beginners could get confused by. However, I can still hope that at some point in time, assuming there’s enough support from other devs as well, manual zones/placement of probes can be made an option.

9 Likes

I’m glad this is modern-day Roblox, because of communication like this! But… good communication doesn’t solve problems. It’s not too late to change the name to a more accurate name! I feel like that would reduce confusion. Also, having studio be as close to reality as possible is NOT a good excuse for not letting developers set probes for this. Automated things in computer science are never as good as a human set thing, unless it’s AI.

4 Likes

When messing around with this in the Castle premade map, I moved the ball from the house to the castle. While the ball was in the castle, it still displayed the surroundings of the house.

1 Like

If Reflectance is legacy now, does that mean I can no longer use it for my games? Also, if Reflectance is going to become a “legacy feature” then shouldn’t you guys bring back the 2 sliders that SurfaceAppearance had in the FiB v15 build? Sliders are going to be very important for customization’s sake, since sliders can reduce the amount of different textures a game has to load. Say I want to offer players a customizable reflectance slider for a car. If I’m using SurfaceAppearance textures, I’m forced to swap out the roughness/metalness maps because I have no actual access to a slider that controls the intensity of Metallic and Roughness maps.

8 Likes

You should add blurred reflections, kinda like this.

10 Likes

It still would have been nice if AT LEAST the developers were given the Enum.GraphicsSettings values to use for themselves.

If Roblox doesn’t want to go through the hassle of testing it, at least we could try ourselves if we’re allowed to manually set them with localscripts. That means that while Roblox themselves wouldn’t have the Advanced Graphics integrated in their own UI, at least we developers can test for them and give results or just use it with our own settings, which would solve their “testing” issue.

Another thing I want to point out about that staff’s explanation is he’s trying to prove to someone why the graphics bar can’t be replaced, not why an Advanced Options should be alongside it. I don’t want the graphics bar to disappear, but clearly the graphics bar does not give anyone knowledgeable full control over what to toggle. His explanation, I quote:

… Most kids just want to play Roblox, not solve mathematical problems. Hence the automatic mode, and the manual slider to back it up the rare time it fails.

If the advanced options is completely separated, this isn’t an issue to begin with. Kids don’t know ANYTHING about what the Micro Profiler or Performance Stats does, so why would Advanced Options be ANY more confusing than either of those options?

12 Likes

Standalone AAA and even Indie games offer detailed graphics options for a reason. A developer doesn’t choose to strip fancy post processing effects from a game so it can run on all devices, they provide options so users on lower end machines can decide which sacrifices to visual fidelity they want to make to prioritize performance. Neutering the maximum potential of an engine by primarily designing it around lower end hardware with no happy middle ground is such a backwards method that has been plaguing Roblox for years.

Please don’t tell me advanced options would be “too hard” to make, your company has more than enough resources required to fund the research and effort that would go into such a huge benefit for the engine. Same goes for the tired “confusing new users,” argument, keep the graphics slider for casual users and integrate a advanced options submenu for the people who care.

14 Likes