Reflections of HDRI skies are unnaturally clipped

Hi, I’m seeing strange behavior with shiny materials and HDRI skies in HDRP 7.4.1. Unsure if this is a bug, limitation, or config issue.

Here’s a camera pointed at a chrome sphere, which is reflecting an HDRI sky. The sky’s intensity is set to a 1x multiplier. As one would expect, as I increase the camera’s exposure value the reflection of the sky darkens until only the disc of the sun is visible:
hospitableesteemedleafhopper

However, if I increase the intensity of the sky to realistic levels, something goes awry. Here the sky has been set to 111,000 lux, and the camera’s EV raised accordingly. As I further raise EV to darken the image, the reflected sky clips to white and then darkens uniformly, washing out the sun in a blob of grey:
respectfulunpleasantboar

NOTE: This problem ONLY affects REFLECTIONS. The camera here is pointed at the surface of a smooth, fully-metallic ball. If I point the camera directly at the sky and adjust the EV, the image darkens naturally. This issue appears to only affect the lower-resolution cubemap that Unity generates for sky reflections, not the sky itself.

For an even more dramatic example, here’s the Gareoult HDRI from Unity’s own sample assets. It is extremely bright, with the sun directly overhead. Unity provides the actual measured lux value to scale the HDRI back to real-world intensity.

At a 1x multiplier everything looks good, although the intensities are obviously non-physical:

However, if I scale the intensity up to 135,000 lux (the value supplied by Unity for this sky) and raise EV to compensate, something goes horribly wrong. The blue of the sky (which should be extremely dim compared to the sun) has somehow blown out the apparent color of the non-metals, while the sun disc is again a washed-out grey:

These scenes are using all default settings from the HDRP wizard, except for the overrides shown in the images. It seems as though the reflection cubemaps that HDRP generates are unable to represent the dynamic range of physically-realistic sunlight.

Is this a bug in HDRP, or is there some configuration setting that I’m missing?

Hey, the amount of light given by the sky is roughly 20 000 to 25 000 lux on a bright day, in real life.

You’re now requested HDRP to provide roughly 4 to 5 times the lux value if you set the desired value for the sky at 111 000 or 135 000 lux. This will burn (=over-expose) your HDRI. The burning might happen earlier if the HDRI has a lower precision btw (like 16 or 8 bit only, or wasn’t generated properly).

Just for reference, here’s a correctly tuned HDRI at ~14.5 EV (that’s roughly the same as requesting 20 000 lux):

And then the same at 18EV, that’s 16 times brighter than 14 EV (!):

I reckon you might be confused with the intensity of the sunlight, which is indeed around 100 thousand lux. But it’s not the same as the intensity of the sky overall (even though the sun might be “baked” into the HDRI).

Also, the precision of the reflection probe might be reaching its limit when pushing the sky too far as well.

Thanks a lot! Makes sense.

Followup question: What then is the meaning of the lux values in Unity’s sample HDRI pack?
The Gareoult image, for example, comes with a text file with the following info:

Shot name: Gareoult
Location: Gareoult (South France)
Date: 16/07/2016

Time: 12h30

Weather: Sunny


Range: 26 EV

Standard capture:
1/4000 - 1/30


Highlight & Sun capture:
ND 1000 + 500: 1/4000 - 1/16
ND 1000: 1/4000 - 1/8


Camera Settings:
EV Step: 1
F/8
ISO 100

Lux: 135 000

Luminance on Main green LED screen : 19730

After Processing (With Sun):
White balanced Lux: 3.088
Absolute multiplier: 43717.6166

Notably it states 135,000 lux, which matches the Absolute Multiplier value.
What is the significance of the lux/multiplier values, if not for directly setting the brightness of the sky? Given that a lux meter typically measures a hemisphere, why would a lux meter placed at the camera’s location record such a high value?

It’s worth noting the other HDRIs in that pack all have SIGNIFICANTLY lower lux values in their info files. The Treasure Island image, which also contains the sun disc (albeit lower in the sky), is only 51,000 lux.
Is it possible the Gareoult image is miscalibrated in some way, since it’s such an outlier? Or is there something else I’m misunderstanding here?

Hi,

Regarding the HDRI lot of detail are available here:

and

Short sum up: 135K is the sum of both Sky + Sun. The Sun when we have done the capture was particularly bright and at the zenith, in a clear sky. We haven’t measure the sky in isolation (which can be done if you hide the sun with a cardboard), but my guess is that the sky was around 20K lux and the sun contribute to 115k for this value.

Other HDRI like treasure highlight was a cloudy day when we have done it. So the Sun brightness is decrease by cloud. Even if the sun disc is visible doesn’t mean it is intense. also the sun wasn’t at the Zenith.

In HDRP Sun intensity is provided with the value of the sun when it is perpendicular to the ground so at its zenith.

the absolute multiplier 43717.6166 provided is to recover the absolute HDRI (in HDRP you can enter a multiplier value for HDRI sky to transform the relative HDRI provided to an absolute HDRI). But in this case you shouldn’t setup any directional light. Those HDRI was capture to be use with the LookDev tools (Windows → Render Pipeline → LookDev), where you don’t provide any sun light and the HDRI itself can cast shadow.

To use such HDRI for a game, you need to remove the sun disc, setup the HDRI with a desired Lux value of around 20K and setup a sun light of around 115K.

Hope this help.

2 Likes