godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.05k stars 21.18k forks source link

Procedual Environment map reflecting through geometry #27740

Closed golddotasksquestions closed 5 years ago

golddotasksquestions commented 5 years ago

Godot version: 3.1 stable

Issue description: Environment map is reflecting through geometry on the default material (possibly because of Fresnel reflection which brings other ugliness with it: https://github.com/godotengine/godot/issues/19561) This makes the level look "see through", as if opaque geometry is semi transparent.

Examples: Here, especially visible when jumping, going up the stairs, though it seems always slightly present: https://youtu.be/Lq5Dmo6t46s?t=96 https://youtu.be/Lq5Dmo6t46s?t=282 shine-through-geometry

Here: https://twitter.com/GammaGames/status/1111193086317617153 reflecting_through_geo2

Calinou commented 5 years ago

Is it possible to fix this at all if one uses the procedural sky's reflection?

golddotasksquestions commented 5 years ago

Idk. I was hoping someone with insight into Fresnel reflection rendering / environment mapping would help out with their expertise.

BastiaanOlij commented 5 years ago

The environment is reflected based on the roughness and metallic settings of the material. This is why the default material in Godot now has roughness set to 1 and metallic set to 0. That isn't going to apply to any material that was created before this change was put through even if you're now on 3.1 stable, only on new materials you create the settings will have that default.

The reflectiveness of the environment you see in those two videos are thus correct for the settings of the material, if you don't want the environment reflected, turn up the roughness and turn down the metallic settings until it looks good.

Also keep in mind that the procedural sky is incredibly uniform, what you're seeing is the reflections of the sky behind you, not seeing through the material, that illusion is simply caused by the uniformaty of the default sky. Load in a proper HDRI and you immediately see what is really going on.

The other problem here that people forget is that it's an ambient lighting feature that isn't effected by other geometry, so if other geometry sits between your object and the sky, the sky still reflects. It would require a raytracer to fully fix that (bring on RTX ? :) ). You can use a GIProbe or well placed reflection probes to get some middle ground here.

golddotasksquestions commented 5 years ago

The environment is reflected based on the roughness and metallic settings of the material. This is why the default material in Godot now has roughness set to 1 and metallic set to 0.

That's good news. Closing the issue because it does not seem to happen anymore with the current default material and is expected result if no GIprobes are placed and metallic settings turned up.