As an average Roblox developer who works a lot inside studio, it is currently impossible to or creating some sort of reflect across workspace or parts/meshes around that particular part that is mirroring and reflecting thinks back on what it shows around it; if a part has the reflectance value of 1, then it would just reflect the sky and not any celestial bodies or models.
At the moment, you’ve might have seen some games or showcases that showcase reflecting baseplates and mirrors in Camping 2 which is fairly common when it was out, but what if something like reflecting instances around a reflected part? The reflectance for parts/meshes is something creative and used by many developers/users who put it into games to reflect some sort of mirror or a situation to use a part that needs to use the reflectance material to
The only way to replicate something that can mirror and reflect models often is using scripts or more instances and time to try and make something very similar to what real-world objects work or just mirrors; yes it is efficient to do do some scripting and time to try and replicate a reflecting masterpiece, but for some they might not have that time
^ Another issue with this is that it doesn’t show or reflect the sun/moon at all, which isn’t very affecting the user experience but still would be a bit nice to do so.
An idea that I had for reflectance is having a checkmark to disable/enable it and have 2 ~ 3 settings to choose from such as the amount of reflecting it wants or environmental purposes to reflect off.
^ Putting it to perspective:
Amount of Reflectance: This will have a number or scrolling output to where or however much reflecting you would want for
Reflect Boundaries: Determine if the part shall reflect certain objects/instances inside workspace or lighting itself with sunrays
Instances: Everything inside workspace.
Celestial bodies: Sun/Moon in the skybox.
Environment: Determinating if it should reflect sunrays, Depth of Field, and maybe
ColorCorrection?
Reflectance Color(s): Choose what color reflecting shall look like along with the skybox as well.
If Roblox is able to address this feature, it would improve my development workflow and experience a bit better because it would open up an easier and faster way to create mirrors or a weapon/model/building that can use the reflectance for more uses and not an alternative way to create things that can take a couple of minutes or seconds when fiddling with the settings.
Correct me if I’m wrong, but I thought dynamic reflections were one of those things so performance intensive that we developed an entire new hardware technology to do it.
Not sure if this would go well for lower end devices.
Like what @Autterfly said, this feature more known as Raytracing is very performance intensive. I can’t even run my computer at max graphics as of now in Roblox and raytracing will worsen it. But, there is an alternative called RayMarching, which is less performance intensive.
This has been spoken about before, the issue with the entire reflections is genuinely the amount of memory and processing required to have perfect reflections with the addition of the client having to do a large chunk of the work because it would be rendered based on perspective.
A giant issue as well with reflecting surfaces would be to what scale would you reflect the surface - should it recognise convex / concave shapes, should it reflect a part that is 1000 studs away that is visible.
So its possible, but how much stuff would have to be done by the client:
imagine the amount of maths the client would have to perform to recognise every single reflect instance.
imagine how much additional maths would have to be done by the client for all those reflect instances: the perspective changing based on your angle.
imagine adding additional properties to this which adds to the maths.
imagine then also making it so sunrays reflect or refract off a surface.
So what does this mean:
You have to remember this is going to be done by the client, not the server, as its going to be client based perspective. So to give true reflections of all instances is genuinely going to be too much for most modern day computers and as such no one could use it because as you add more reflect instances you’d essentially make the load for your GPU even bigger.
I mean valid alternatives exist such as:
Screen Space Reflection
Ray Marching
But they are still performance intensive and do not scale well as you add more instances.
Will it come? Eventually yes.
I can happily say I can run any game at max graphics (with few exceptions), but then I also forked out £2600 on a computer (for my career / personal use) which most people will not do or can’t afford to do. But even with my expensive computer I will struggle after you add tons of reflect instances because its going to be tons of maths constantly being run.
But luckily technology naturally scales up over time and my computer will not be the top of the line: Today on the 25/08/2020 I can say that I can run at max graphics but the chances are in 10 years time my computer will be way behind and I’ll have to replace its core parts because we’ll have bigger core CPU’s in less space or graphics cards that can do 30x more. Reflections isn’t going to be a thing until on the grand scheme of things it is a small load.
Real-time raytracing is so expensive it requires dedicated hardware, which currently means a top-of-the-line graphics card that fewer than 0.01% of Roblox players have, so don’t hold your breath waiting for this.
Raymarching isn’t a cheap alternative to raytracing, and it also requires significant GPU horsepower. Raymarching excels at rendering volumes you can describe with functions of position (x,y,z), not something you can do for an arbitary triangulated mesh, so not suitable for Roblox.
Game engines like Unreal and Unity generally do reflections two ways: Reflection Probes and Screen Space Reflection. Reflection Probes have the cost of having to render the scene from the PoV of the probe, typically to a cube map (like the Roblox skybox). If you want perfect moving, dynamic reflections, this is A LOT of extra rendering overhead every frame, way more than the main render pass done by the player’s camera, because the probe can see omnidirectionally (so no Frustum culling). This is more CPU and GPU load, and again, something that would only run well for the folks with top-end gaming PCs.
Screen space reflection is a post-processing trick that can only show you reflections of things that are already visible in the scene. It gets used for things like wet or polished floors, puddles, etc. It can’t do mirrors, because it can’t show you the sides of something you aren’t looking at, and it can’t show things that are outside the view of the camera. So, it’s kinda limited. Roblox uses it for smooth terrain water reflection.
Since terrain water already has screen-space reflections, I don’t see why parts couldn’t have it too. I can’t see actual reflections coming to Roblox, because they are so hard to calculate and because it can give players with better computers an advantage (since they could see something outside of their screen). But screen-space reflections are not nearly as hard to calulate, and won’t give anyone an advantage because it’s impossible to see anything in a reflection that you can’t already see on screen. Terrain water already does this, bu only on higher graphics quality, so I don’t see why they couldn’t add that to parts.
Water is handled by one singular shader with no significant parameterization. Just because it can do something is not a strong indication that other things can easily support the same.
As cool as it would be, even something as simple as screen space reflections can be quite expensive on low-end hardware and requires additional samples if I recall.
But it would be neat to have a property on meshes to allow for swapping between different types of reflections and quality levels perhaps.
On mirrors you might want full reflections that update real-time, while on windows and driving cars you might want cheaper reflections just to make the metal looks a bit more shiny.
Having ultra-HD real-time-updating reflections on everything would simply kill performance, even on RTX cards.
One thing I couldn’t ever understand with the performance excuse Roblox making from not implementing the features when this already archived by many other existing game engine but then saying “This would be expensive”, sure Unity and Unreal is also expensive.
As much as Roblox’s responsible for maintaining good performance for all devices including mobile, it should be the Developer’s choice and not Roblox to decides whatever they should implement the feature or not. If they would want to stick to the moto “Powering Imaginations” but our imaginations is so limited in the shell.
Roblox so concerned about these stuff when Developers are now using unsupported method to work around with these, like bypassing the tris limit by separating into pieces, upload sliced images to archive 4k. Literally putting highlight into glass and set transparent to 10 just to get some reflection.
It would be very nice if Developers are allowed to add more custom stuff like imported shader like in Blender, C4D, 3DsMax if Roblox not going to do it. Why they even care whenever it’s performant, it’s not their Experience, it’s the developer’s responbility. If it’s lag they won’t do it, or they’ll work around to optimize it on their own anyways.
The way Roblox handled Shadows in FiB or Shadowmap is worst than every game engine’s handle on SSR. My graphic card is literally GTX 1050 and I have no problem with other engine. We aren’t doing Ray tracing or newer techs my friend. This is Screen Space Reflection and this existed for over two decades. Also parallax effect if Roblox really care about the performance, they go on over to not implement stuff. But what they get is Developer is exceeding what they can to get good result since there’s no technology and tools to aid them in this. So let’s expect overly detailed building in Roblox, this thing is more than obvious in term of performance.
(I also don’t understand why there’s no option to add custom normal map for water material, or in fact create own Glass, Neon, materials. It proves Roblox are capable of these but they just won’t allow us to customize it.)
I agree. While performance and optimization are important, I feel like in the end, it should be up for the developer to decide if they’re gonna value higher quality over performance. That’s where graphics setting come into play as well . Normally in most video games, if the “fancy nice graphics” result in poor performance, the player would just toggle them off, sacrificing quality for performance.
In short: We shouldn’t be graphically limited due to performance concerns from lower end devices. I don’t see why roblox can’t just implement something like SSR and have graphics options, like “SSR On/Off”"
I’m pretty sure someone made a feature request on graphics settings, I forgot what it was called though.
There is significant distance between “possible” and “viable”.
The graphics technique used in that video (realtime reflection probes) is incredibly expensive - even on desktop, and even with graphics cards - which is why Roblox uses a significantly scaled back implementation of it (indoor cubemaps) and only uses it on Future lighting.
What we all were requesting isn’t real time probes burning my GPU, but just Screen Space Reflection which isn’t expensive to render and game from decades ago uses it, might even be cheaper than FiB’s Shadows even. SSR Only render content in screen after the main render work, and doesn’t render anything that goes behind the screen or player did not see. That’s why when you move the camera, the reflection goes off since it’s based off the central of camera.
At the last, it should be optional feature that allow developer to choose whenever to implement it or not in cost of performance just like Future Lighting. We have Corrected Parallax Cubemap, Planar Reflections for Floor and Screen Space to choose what to use. Probes could be useful for mirrors, and should be able to turn on/off + render only upon seen on client’s screen.
Another major problem with the current method Roblox currently using is the lack of customizability not just this but on the SurfaceAppearance that doesn’t have Brightness/Contrast value adjustment which kinda annoying when you want to adjust certain BasePart’s roughness, metallic, or even NormalMap strength.
This goes the same to the Indoor Environment Specular which centralized instead of adding BasePart.Specular which could work on non-metallic materials than having everything so contrasted, not to mention the outdoor just mapping the skybox.
Alright let’s talk for real here, I used to play a racing game called Blur in 2010, it had environment ray-tracing for cars and you can literally play it on a GTX 270 on mid graphics which are the graphics which contain the ray-tracing. Ray-tracing is not performance heavy it’s just that Roblox sucks with CPU and memory optimization
Roblox indeed suck with optimization which I believe they should put more effort into improving their engine than just making silly excuse that stuff are expensive for performant when other engine available out there are doing much better job.
Although I’d say “Old-hardware” excuse is no longer proper excuse since this is 2024 and if you buy new laptop now even cheapest is already has RTX series in it. Yet we didn’t even get SSR or properly parallax, actual Ray-tracing might be a long way…
I don’t like correcting others, but what you have said here is simply untrue.
Blur did not feature real time raytracing for anything, it used pre-calculated cubemaps, like everyone else did at that time (you may confirm this for yourself by playing the game and moving through the environment slowly, the illusion falls apart), because computers of the time were simply not powerful enough to use real time raytracing at a playable framerate, a few games did make use of some extremely hacky methods to fake real time dynamic reflections, but these were few and far between and would not be applicable to the Roblox engine.
While modern computers can do ray-tracing, it still comes at an extreme performance cost and would be prohibitively expensive on mobile and console.
While there are genuine methods of rendering real time reflections in a fashion which would be performant enough for the Roblox engine to implement (provided they are used sparingly, there’s no free lunch, people.) these are methods that the Roblox engine development team is already more than aware of and have been investigating for years.