Screen Space Reflections for BaseParts

Not a new thing. Roblox water uses it which means it is likely already somewhere in the render pipeline. Water is sadly too distortive and big to use for actual reflections. This type of reflection should at least be available via a seperate material (such as refraction only being available to glass), but hopefully it’ll be fully integrated into the PBR pipeline!


Mobile devices are getting better and better every year, my iPad from 5-6 years ago can run FIB games really easily and smoothly. (although it drains fairly fast)


Working on an outdoor rainy environment at the moment wishing Screen Space Reflections were a reality in the engine. These PBR puddles would look incredible with a hint of reflectance :pensive:

Hopefully an engineer on the engine team considers this feature soon. Would certainly be an early Christmas gift for builders across the platform.

As a side note, I’m seeing many posts pointing out the fact that water has SSR (which it does) - an engineer commented on this when asked why it’s unavailable for parts:

Looks like it might be a lot more complex than it seems at first glance. Keeping my hopes high though, maybe we’ll see this revisited soon.


SSR is already in roblox? The terrain water material has screen space reflections by default. I don’t think optimization would be a huge issue since most optimization issues are player cause, or cause by generally bad methods of doing things.


If I remember correctly, it’s really just an approximation that only works because of the water’s waves making it look less bad. It would not work properly for regular parts.
Edit: Original post

1 Like

Actually, a lot of other game engines allow you to put SSR on anything, it’s just that they have a decent fallback when the SSR can’t reflect anything because those things are offscreen, AKA parallax-corrected cubemaps.

On Roblox however, the only possible fallback in case SSR can’t reflect anything is either the skybox, or the kind of bad indoor envmaps.


You can remove the waves to see what it looks like without them.

The result is very acceptable.



This is definitely an interesting test-case. I honestly wouldn’t mind if the reflections weren’t super clear as you outlined in this post, they still look really cool.

Perhaps if this is implemeneted, the reflections could be blurred to hide jagged lines or rendering artifacts as a result of optimization.

Regardless, I’m still very excited for SSR - I’m fully confident it will be an invaluable tool in creating realistic games. The platform is headed in this direction anyways :sweat_smile:


And I think ROBLOX’s reasoning for NOT implementing this is because “Low-end devices wouldn’t be able to handle it”. So, to solve that problem, allow devices that CAN handle it to have it.


Actually, I think the only reason that someone at Roblox has given so far is that the water shader was only designed to work on water…

Anyway, I think the reason they do not want to implement other features like Surface Projection is because they want all features they implement to work on all platforms, except for the purely visual ones, like grass sway. This makes more sense in the case of the Surface Projection feature, because that can be used for puzzles etc.

But, screenspace reflections is definitely a feature they should implement.


I’d like to mention, although i don’t have an example, roblox does have a very very scuffed “dynamic cubemapping”. I can’t possibly explain this other than the engine just taking a new cubemap for reflections every few minutes or seconds.

1 Like

Oh yeah, THAT feature. I’m still wishing that they would have listened when people asked for manual cubemap place, the ability to disable them without setting specular scale to a low value, and just more control over them in general.

1 Like

A potential alternative to SSR is parallax corrected cubemaps. We already have cubemap reflections, and now cubemaps that are taken at point points across a level, albeit automatically. Valve has been using parallax correction on their cubemaps for decades now.

Ex: Local Image-based Lighting With Parallax-corrected Cubemap - Youtube

It is definitely not taxing on performance like SSR, most people wouldn’t notice a difference, while low end devices can have it automatically turn off at lower graphics settings like many things already do. I don’t see why the argument of, “it can’t be implemented because mobile devices wouldn’t be able to run it,” when Roblox literally spent so many resources making FIB 3 a thing, last I checked it doesn’t quite work on mobile.

Parallax corrected cubemaps, along with the ability to manually place the cubemap capture locations, would be an amazing addition to Roblox for environment fidelity, while hardly affecting performance. As great as SSR would be, the caveats of the tech and hurdles of implementing far outweigh the potential improvement it could add to most experiences. Parallax corrected cubemaps on the other hand, are the way to go.


fib does work on mobile devices, only ios though. I agree though, such a standard feature is nowhere to be seen

I’m going to be that guy and point out that this isn’t true, actually. Parallax-corrected cubemaps were only introduced with Source 2 - the first use of Source 2 being Destinations/SteamVR Home, and their first use in a game being Half-Life: Alyx.

Also somewhat importantly; though I don’t disagree that parallax-corrected cubemaps can give a pretty convincing illusion of depth for cheap, it has a pretty big limitation in that it only really works for spaces with a primitive shape, commonly cuboid spaces. It works well in places like Half-Life: Alyx (and the Source 2 engine generally) because those games are optimised around corridors and rooms. Roblox is much more freeform than that, so it’d need some kind of heuristic to decide what the appropriate shape of the space is, or whether to disable parallax because it’d lead to a visually worse result. That would require much more processing on top of the current casting used to place the cubemaps, so it’s not exactly a free lunch.

Valve’s modern IP such as Counter-Strike 2 actually end up using a lot of blended parallax-corrected cubemaps to get acceptable shape fidelity. See this video about the cube mapping on Mirage and this follow-up using developer commands to showcase the underlying cubemaps clearly.


Or we can just manually cubemap, like valve. Literally what anyone who has had issues with EnvMaps ever wanted…

And the “it’s too difficult for new users” thing. Just keep the automatic behaviour but atleast allow manual cube mapping.

It’s not about difficulty. It’s actually about having a semantic API surface that doesn’t lock Roblox into forwards-incompatible technology decisions. Cube maps, when authored by artists, are an opinionated art decision. If Roblox implements them as a primitive, then every observable effect and visual quirk is fair game for artists to depend upon. This can have bad consequences (see: glass invisibility cloaks) so Roblox always tries to stick to opinions they can be confident in changing as little as possible over time so as not to create future compatibility hazards.

This is why Roblox insists on physically based definitions so much - physics has consistent opinions in the volatile realm of computer graphics. All rendering tech tries to approximate physics to some degree, so it tends to be more portable across rendering techniques if your scene is based on physical properties rather than artist-tuned primitives (see: PBR vs specular content authorship).

Cube maps are already known to be a stepping stone towards proper GI of some form; Godot is already looking into low-end-friendly GI tech as we speak, and no doubt Roblox is, too. That’s why Roblox won’t want to expose them to you, because there is a clear path to future obsolescence that will cause artist intent to be lost when it is replaced in future.

Does this suck today? Yes. But Roblox’s decision making in this vein is the only reason tons of older content is even still viewable anywhere near as completely as it is today.

Its a tradeoff and you can’t pick both. This is why SSR is immediately more likely than manual cube maps.


The downside of SSR is that on certain view angles they will just look extremly odd. I like how unreal engine combines cubemaps + SSR.

If SSR is unable to reflect a certain area, parralax corrected cubemaps will be there as a fallback.

What did you do to remove the waves

1 Like

You go to your Roblox folder and delete the normal maps of the water texture. It will stay like that until Roblox updates or you put the textures back.