Page MenuHome

Eevee reflected lights appear ahead objects in the reflected surface
Closed, InvalidPublic

Description

System Information
Operating system: Ubuntu Linux 18.04
Graphics card: Intel

Blender Version
Broken: 2.80rc3
Worked: (optional)

I have noticed that visible area lights are reflected ahead other objects closer to the reflective surface. Objects are rendered with the correct depth in the reflection.

Attached you find the .blend file. Indirect lightning must be baked!

Details

Type
Bug

Related Objects

Event Timeline

Another equivalent simple setting. It seems to be light/shadow interaction as the reflected light seems to receive shadow.

Another unexpected (?) thing: the light is visible in the mirror, but not the original light, outside the mirror. Is that coherent?

I agree with your simpler setting. (btw didn't you enable Screen Space Reflections?)

Technically, to me is seems like something related with the z-buffer (does eevee use it? I am not a big expert) of the reflection plane when dealing with ligths. I have also tried to make the issued light apart from the scene in my blend. At some point I have got

which is a cool effect... but stilll strange.

and in your model you can test that the image of the light on the reflection plane is not effected by Clipping Offset, while the sphere is.

I have also noticed that all the light types are affected by this problem.

Jacques Lucke (JacquesLucke) triaged this task as Confirmed, Medium priority.

@Jeroen Bakker (jbakker) @Clément Foucault (fclem), I can clearly see the issue in the second file. Is this a bug or a limitation?

Clément Foucault (fclem) claimed this task.

This is a shadowing problem. In EEVEE we decouple the visibilty from the lighting in a non-physical way so the reflections are not shadowed correctly and can be seen through objects that would normally occlude them.

This is a limitation. Closing.

This severe issue should absolutely not be closed, since a "partial solution" already exists, but needs a way to be implemented during render. The "show preview plane" option for debugging a reflection plane removes the reflections of lamps from the scene. This basic functionality is absolutely essential to produce any kind of realism, especially for objects with a mirror surface (or anything with roughness less than 0.2). Using the same tech that makes "show preview plane" work correctly, there needs to be a way to bypass those horrible reflections permanently during render. NOTE: People can always add in emissive mesh objects if a reflection of a lamp's shape is really needed.

But there is absolutely NO practical reason to see floating orbs shining through objects as if in X-RAY. This completely defeats the purpose of using EEVEE for archviz. I show some more examples linked below that reveal this limitation should indeed be treated as a high-priority bug. We are currently able to add objects to a collection that is then bypassed from being seen in the reflection plane. We need to be able to do this same thing with lights, or just make all lights invisible to reflection planes like "show preview plane" does. At least this way artists would have a decent workaround until a more complete solution can be found.

Link with image examples:

How to hide lamp reflection in EEVEE

Thank you for your attention to this very serious issue.

-Adam Janz

Dear Adam,

thanks for your solution. I think that the response of Clement was rough and inadequate, and I share your perspective that this MUST be solved within the EEVEE renderer.

Thanks again!

Fabio Garofalo (FabioGarofalo) raised the priority of this task from Confirmed, Medium to Confirmed, High.

You are welcome, Fabio. Thank you for your support on the issue. I trust the talented devs will find a excellent solution for this.

I trust them too, and I am pretty sure they will.

Philipp Oeser (lichtwerk) closed this task as Invalid.

I think this is still best judged by the developer himself, please dont set priorities yourself...

That being said: @Clément Foucault (fclem) : are the above statements changing your mind?

@Fabio Garofalo (FabioGarofalo) , @Adam Janz (Copperplate) : please dont consider this rude, but will have to reset to the previous state and let @Clément Foucault (fclem) decide here...

Adam proven that a solution is yet within the EEVEE actual capabilities, so I would not define this as an EEVEE "limitation" simply because it does not seem to be so. I hope that Clement is going to re-consider the status of this issue. I am confident: EEVEE can do that! :)

I'm sorry if that came out as harsh.

The reflection plane has nothing to do with the light's reflection. The reflection plane only capture the other geometric objects in the scene. The specular light from light object is evaluated sperately.

You can make a light's specular power 0 to remove the light reflection from all surfaces.

There is no light linking possible in eevee for the time being so you cannot make this fix local to certain objects.

As for the shadowing issue it is not going away. The only way to do the right thing would be to have raytraced shadows and change eevee's architecture to be a deferred lighting rendered. And both are not feasible at the time being.

Thank you Clément. But as previously mentioned, until a more complete solution can be found, the tech contained within "show preview plane" is indeed a solution (at least for reflection planes).

More visual proof attached. Note how disabling specular on the point lamps inside the lamp shades causes not only the incorrect orb but also the highlights on the nightstand and bed to disappear, but with the "show preview plane" hack, only the unsightly orb is gone, retaining the specular highlights everywhere else. This indeed is a perfect workaround if it can be enabled during render.

"show preview plane" hack (issue fixed but specularity preserved):

actual rendered result:

actual rendered result, no specular:

That is exactly what I said.

You can make a light's specular power 0 to remove the light reflection from all surfaces.
There is no light linking possible in eevee for the time being so you cannot make this fix local to certain objects.

What you want is light linking and we can't have that at the moment. Only after T68474 is implemented we could implement light linking.

The "tech" inside the show preview plane is not suited for rendering arbitrary surfaces, and creating hack options will only create confusion and increase complexity of the engine.

Thanks Clément. So could you not enable this as an option ONLY for reflection planes? For typical usage scenarios inside archviz where you have a reflective mirror or window (both of which are planar surfaces, where reflection planes are always used) enabling this at rendertime would be ideal. It's seems a shame to have a solution built-in for debugging purposes but being unable to use that tech in a practical real-world scenario. Simply turning spec to zero is too destructive and can't be deemed a workaround, unless all the other surfaces in the scene have a high roughness value.

I'd like to understand better the meaning of "collection".

if the word "collection" is meant as the objects appearing in the reflection plane,
a naive approach could be to exclude the light(s) from the reflection plane collection by defaults. is that a wrong idea?

@Clément Foucault (fclem) No short term possibilities for just an option on light probes (at least plane) so that lights won't appear as plain objects on the corresponding mirror?

@Clément Foucault (fclem) No short term possibilities for just an option on light probes (at least plane) so that lights won't appear as plain objects on the corresponding mirror?

See my other reply

The reflection plane only capture the other geometric objects in the scene. The specular light from light object is evaluated sperately.

Hi again, Clément, so if specular light is evaluated separately from the reflection plane, just continue to skip evaluation for any areas covered by reflection planes during render. Just to reiterate what I and Christian Hubert are asking, is there a way to KEEP "show preview plane" ENABLED during render? Because if there is, it will make a lot of artists extremely grateful.

There must be a way to do this. JUST for reflection planes. We realize the technology is not there yet to do this for everything.
If it can work in the viewport, there has to be a way to make it work in the render.

Thanks, Clément, for all your hard work in this. I know it must be annoying to receive so much feedback, but it really is an exceedingly important feature for architectural visualization that literally determines whether certain shots are even possible. In the previous example I linked to on Stack Exchange, this is actually a crop taken from a fly-through animation of the bedroom. If I really had 3 mirrors on the wall as shown, the shot would be completely unusable -- except when "show preview plane" is ENABLED. This means the developers' decision to allow or disallow artists to ENABLE "show preview plane" during render would literally make or break the shot if our clients requested mirrors in that position. That's why it's so important to us.

I am still thinking that the solution would be in using a collection-type workaround since: "The reflection plane only capture the other geometric objects in the scene. The specular light from light object is evaluated sperately."

according to the documentation for reflection planes it seems that the collection slots for the reflection plane object could be used for this purpose. isn't it?

@Fabio Garofalo (FabioGarofalo) , that bypass unfortunately doesn't work for lights only objects, although it would certainly be ideal. According to Clément, such a feature would require "light linking", and I suppose that will enable per-object bypassing. But what I'm suggesting here is a temporary fix that ONLY applies to reflection planes, since light-linking is not here yet.

Here is an unexpected workaround for certain limited uses: https://blender.stackexchange.com/a/148702/39431

@Adam Janz (Copperplate) I think the workaround you propose would be perfect, for now. I understand the issue with light linking and collections. Let's wait for the developers, then. :)