Are ssr broken? If I have a non-metallic material for the ground and a blue cube the reflection of the cube is grey/black. If I set metallic to 1 the reflection is blue. Also roughness is not working. The reflection always has the same roughness. This is in a new project with a ground, a cube and the default procedural sky.

In my current project ssr are flickering and there are some weird lines (I can post a video later)

Win 10, GTX 1070, Godot latest stable version, GLES-3.

This is usually an issue with the normal maps. First make sure that you are using a normal map (it won't work without it). Then that the normal is correct. There are two major formats, DirectX and OpenGL. Godot uses OpenGL, but many times I have seen normal maps online labeled wrong, or just be broken (like some of the maps I got from Poly Haven were wrong). If you have a height map / depth map grayscale, you can generate a normal map in GIMP with the normal map filter and it will be the correct format for Godot.

I have created a simple test normalmap in Gimp for the ground but its still not working. Or it this the way it should look like? And why do I need a normal map? Is this normal or just a known limitation of the current implementation?

Yeah, that looks normal and is working. To get proper reflections, you need all the PBR textures. Definitely need a normal map (as this is how it calculates the reflected rays), and also a textures for both metallic and roughness. Sometimes it is okay to not have a metallic texture and just use a number, but roughness only works with a texture. Also, SSR does not work well on completely flat mirror like surfaces. Which is why having the full PBR textures help, as they can mask some of the inaccuracy.

I know about the general limitations of ssr but they way they work in Godot is just weird. Why do non-metallic material do not reflect the color of the object and why does roughness not work? That cant be normal.

They do, it just depends on the color or texture of the floor.

@cybereality said: They do, it just depends on the color or texture of the floor.

Not in my case (as you can see in the video). The reflection should be blue or am I wrong?

Thats how it should look like:

Well SSR is not physically accurate, it's a hack, and I have noticed in Godot it looks different than other engines. I was never sure if this was intentional, or maybe done as a sort of performance optimization, that I don't know. But you are not going to get the same results as real ray tracing in Blender. However, if you do like I say and create a full PBR material (meaning diffuse, normal, metallic, and roughness textures, at the very least) then it should look good enough.

You can see the SSR in my demo, it looks quite good.

@cybereality said: Well SSR is not physically accurate, it's a hack, and I have noticed in Godot it looks different than other engines. I was never sure if this was intentional, or maybe done as a sort of performance optimization, that I don't know. But you are not going to get the same results as real ray tracing in Blender. However, if you do like I say and create a full PBR material (meaning diffuse, normal, metallic, and roughness textures, at the very least) then it should look good enough.

The Blender screenshots are not raytraced. They are in realtime with eevee. And of course it will always look different in other engines but it should still follow some basic physical laws. I can get the same effect I have in Blender in UE4.

@cybereality said: You can see the SSR in my demo, it looks quite good.

Your ground is probably a metallic material and I'm talking about non-metallic materials. Also your material can still have a roughness of 0 and a normal map and it would look kind of rough (like in your picture) but its still not correct. I mean can you actually change the roughness value of your material and see a difference?

Yes, you can change the roughness and it will go from more of a mirror to more blurred.

@cybereality said: Yes, you can change the roughness and it will go from more of a mirror to more blurred.

Hmm thats strange because my material always has the same roughness and only the brightness changes a bit.

Roughness is a measurement of microscopic changes on a surface. If it is completely flat and smooth, then it is not rough. Which is why you need a roughness texture for it to work. That is what I'm trying to explain.

Godot 4.0 has proper roughness simulation for SSR, but Godot 3.x only darkens reflections in roughness (as it's much cheaper to do). In 4.0, SSR still doesn't look ideal right now – it will look better once temporal antialiasing is implemented (providing you enable it, of course).

@Calinou said: Godot 4.0 has proper roughness simulation for SSR, but Godot 3.x only darkens reflections in roughness (as it's much cheaper to do). In 4.0, SSR still doesn't look ideal right now – it will look better once temporal antialiasing is implemented (providing you enable it, of course).

Ah ok, thanks for your explanation. Is it also on purpose that the reflection of e.g. a blue box will be grey or black for non-metallic materials?

@cybereality said: Roughness is a measurement of microscopic changes on a surface. If it is completely flat and smooth, then it is not rough. Which is why you need a roughness texture for it to work. That is what I'm trying to explain.

I know what you mean but you can still have a smooth surface that is rough. Of course the surface is not 100% smooth but as you said "Roughness is a measurement of microscopic changes on a surface.". But I think we are missing each others point but thanks for your help! Calinou explained the current roughness limitation pretty well.

Yes, that is what I was guessing, which is why I thought the developers did it for performance reasons. As the SSR looks very different in Unity and very different in Unreal as well. However, I actually prefer the look of Godot, particularly if you use a texture with a lot of variation. In Unreal, for example, the SSR always looks sort of like a mirror finish. This is better for puddles (or in your case, where you want a flat ground to act like a mirror and show the accurate colors), but actually worse for more realistic textures, like the picture I showed of my project.

Also, it helps if you make reflective surfaces slightly metallic, even though this is not physically accurate. I usually use between 0.1 to 0.3 for metallic, even on matte surfaces, because it makes the graphics look better.

Is it also on purpose that the reflection of e.g. a blue box will be grey or black for non-metallic materials?

Yes :)