Poor quality HDRI lighting in Eevee

I’ve been experimenting with Eevee for the first time, and an issue I ran into is that light/reflections cast on objects from a HDRI environment texture are strangely ‘pinched’ and ugly, almost like how it might look if the HDRI was being projected wrong. Playing around with it led me, I found this only affects HDRIs (light cast by lamps works fine), and then only materials with nonzero roughness.

To illustrate, here’s an object with a principled shader set to metallic. Roughness here is precisely zero, and the result is more or less perfect.

Introduce some roughness to the material…


…and there are oddly pinched, triangular shading artifacts everywhere. The geometry here is clean, it’s essentially just a bunch of cylinders. In Cycles, there is no issue.

I found the indirect lighting settings, cubemap size and filter quality especially, make a difference to how the object is lit, and while setting them higher results in more accurate brightness values, it doesn’t deal with the pinching. Is there something I can do to improve this?

Do you have any flipped normals? I know it’s “just cylinders”, but try checking the face orientation first, because the problems you are showing look like what happens whenever I have flipped normals.

Nope, normals are fine. For what it’s worth someone else trying this out yesterday got the same results independently.

Hard to guess without a file to look at.

I made a minimal setup which reproduces the issue: Just a principled cylinder and the default studio HDRI. The best result can be achieved by increasing filter quality under indirect lighting settings, but the basic problem remains. See also how the problem disappears if you set roughness to zero.

eevee_hdri.blend (668.8 KB)

@Elukka,

I tried but cannot reproduce the problem. Maybe try loading startup file (be sure not to safe preferences automatically in case, or save start up file). File > Defaults > Load Factory Settings.
But using HDRI is not a good idea in EEVEE. Better use lights, though it’s not related to this problem.

I see the problem, and I think I understand what is going on. Eevee doesn’t “trace rays” to find the environment, instead it appears to simply blur the texture, and you can’t apply fast gaussian blur to an equi map. If you change the cylinder to a smooth subdiv’ed sphere, you’ll see that for the studio.exr the visible pinching (caused by texture blurring) occurs only for the north pole which has variations in it. The south pole looks fine, because it has no features.

Maybe this behavior of how the hdri is blurred could be improved. But for now, I suggest using hdri with no features near the poles, or open it up and paint them out.

Cycles doesn’t have this because it actually traces rays to find varying positions on the map rather than looking up a single blurred point.

That’s my guess on it anyways.

I’m thinking you might very well be right. Some further experiments:

  • Anything short of painting a full half of the HDRI a flat color doesn’t help. It looks like if there’s anything at all that hits the north side of the object, it’ll get pinched.
  • If I flip the image, the problem instead occurs on the south pole… I’m not sure what conclusion to draw from this. That makes it sound like it’s something about the image itself that Eevee doesn’t like. The top half of the studio image pinches regardless of how it’s oriented, and regardless of whether you paint out major features, like the thing hanging off the ceiling.

Edit: It seems this problem is largely mitigated if the HDRI doesn’t have particularly strong values. It might be the solution for now is to not use any HDRIs with bright lights (or paint them over), and use actual lamps in their place.