Maniphest T67788

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

Assigned To
Clément Foucault (fclem)
Authored By
Fabio Garofalo (FabioGarofalo)
Jul 27 2019, 9:28 AM
Tags
  • BF Blender
Subscribers
Adam Janz (Copperplate)
Christian Hubert (alikendarfen)
Clément Foucault (fclem)
Fabio Garofalo (FabioGarofalo)
Jacques Lucke (JacquesLucke)
Jeroen Bakker (jbakker)
Philipp Oeser (lichtwerk)

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!

Related Objects

Event Timeline

Fabio Garofalo (FabioGarofalo) created this task.Jul 27 2019, 9:28 AM
Christian Hubert (alikendarfen) added a subscriber: Christian Hubert (alikendarfen).Jul 29 2019, 7:32 PM

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?

Fabio Garofalo (FabioGarofalo) added a comment.EditedJul 30 2019, 6:59 PM

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) lowered the priority of this task from 90 to 50.Aug 7 2019, 12:32 PM
Jacques Lucke (JacquesLucke) added subscribers: Clément Foucault (fclem), Jeroen Bakker (jbakker), Jacques Lucke (JacquesLucke).

@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) changed the task status from Unknown Status to Archived.Aug 7 2019, 12:44 PM
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.

Adam Janz (Copperplate) added a subscriber: Adam Janz (Copperplate).Aug 14 2019, 8:16 PM

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

Fabio Garofalo (FabioGarofalo) added a comment.Aug 14 2019, 8:22 PM

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) changed the task status from Archived to Unknown Status.Aug 14 2019, 8:26 PM
Fabio Garofalo (FabioGarofalo) raised the priority of this task from 50 to High.
Adam Janz (Copperplate) added a comment.Aug 14 2019, 8:38 PM

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

Fabio Garofalo (FabioGarofalo) added a comment.Aug 14 2019, 8:41 PM

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

Philipp Oeser (lichtwerk) changed the task status from Unknown Status to Archived.Aug 14 2019, 8:46 PM
Philipp Oeser (lichtwerk) added a subscriber: Philipp Oeser (lichtwerk).

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...

Fabio Garofalo (FabioGarofalo) added a comment.Aug 14 2019, 8:55 PM

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! :)

Clément Foucault (fclem) added a comment.Aug 14 2019, 8:56 PM

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.

Adam Janz (Copperplate) added a comment.Aug 14 2019, 9:22 PM

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:

Clément Foucault (fclem) added a comment.Aug 14 2019, 9:49 PM

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.

Adam Janz (Copperplate) added a comment.Aug 14 2019, 10:03 PM

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.

Fabio Garofalo (FabioGarofalo) added a comment.Aug 15 2019, 10:08 AM

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?

Christian Hubert (alikendarfen) added a comment.Aug 15 2019, 10:52 AM

@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) added a comment.Aug 15 2019, 11:27 AM
In T67788#753569, @Christian Hubert (alikendarfen) wrote:

@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.

Adam Janz (Copperplate) added a comment.Aug 15 2019, 2:26 PM

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.

Fabio Garofalo (FabioGarofalo) added a comment.Aug 15 2019, 3:02 PM

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?

Adam Janz (Copperplate) added a comment.Aug 15 2019, 3:55 PM

@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.

Adam Janz (Copperplate) added a comment.Aug 15 2019, 7:06 PM

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

Fabio Garofalo (FabioGarofalo) added a comment.Aug 16 2019, 12:36 PM

@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. :)