inconsistent Local Exposure behaviour

Hello,

We’ve been noticing some unexpected/ odd behaviour with local exposure.

There seems to be a huge difference in the local exposure results when we use Exposure compensation or not (the final scene EV is the same).

Expect local exposure to work the same regardless of whether we use compensation or not.

In the repro below, we’ve set up a scenario where we have 2 post processes aiming for a target EV of -1.27.

One post process is doing this with compensation, the other is achieving this by setting the min and max EV to -1.27 (no compensation whatsoever).

The shadow contrast scale is set to 0 in both cases to exaggerate the effect.

  • Shot 1: Local exposure + Exposure compensation
  • Shot 2: Local exposure + locked exposure (min EV and max EV are set to -1.27)
  • Shot 3: Eye adaptation viewmode (compensation) -> target EV -1.27
  • Shot 2: Eye adaptation viewmode (no compensation min max set to -1.27)

Any ideas what could cause this difference in local exposure results based on whether we use compensation or not?

Steps to Reproduce
Scene Setup

  • Open the repro project attached
  • The startup level should be LV_LocalExposureIssue
    • The lighting in this level is intentionally underexposed. (what we do for night time)
  • Pilot the camera “CameraActor” in the scene (transform is locked to a view that shows the issue consistently)
  • In the outliner, notice the folder 01_LocalExposure_PPV’s
    • This folder contains post-process volumes that show the differences in local exposure behaviour for the Same EV
    • Note that all these volumes have a target final EV of -1.27
    • PPV_BaseNight+LocalExp
      • Leave this post process enabled; this contains the local exposure value (shadow contrast scale 0)
      • This post-process volume just ensures that the same local exposure value is used for the different setups
    • PPV_NightEXPComp_LocalExp_On
      • This post-process volume achieves a final EV of -1.27 by using the exposure compensation curve.
    • PPV_ NoEXPComp_LocalEXP_On
      • This post-process volume achieves a final EV of -1.27 by setting the min and max EV to -1.27, there is no compensation involved here.

Repro:

  • Enable PPV_NightEXPComp_LocalExp_On
    • Take note of the local exposure in the shadows
    • Toggle the local exposure view mode on (ShowFlag.VisualizeLocalExposure 1)
  • Disable PPV_NightEXPComp_LocalExp_On
  • Enable PPV_ NoEXPComp_LocalEXP_On
    • Take note of how much brighter the local exposure is
    • Toggle the local exposure view mode on (ShowFlag.VisualizeLocalExposure 1)
    • Notice in the view mode how much more screenspace is considered for local exposure (more red)

Expected result

We expect local exposure to behave the same whether we use exposure compensation or not. We believe that the behaviour without compensation (PPV_NoEXPComp_LocalEXP_On) is the correct behaviour. Since we underexposed the scene, there are significantly more dark areas that need lifting.

Hey Chris,

Thanks for taking a look!

This is a great find! I can confirm that the pre-exposure is indeed different between the two post-process volumes.

  • In PPV_NightEXPComp_LocalExp_On (compensation curve) i get a pre-exposure value of 4.48 (screenshot 1)
  • In PPV_NoEXPComp_LocalExp_On (locked with min max) i get a pre-exposure value of 14.95! (screenshot 2)

I’m not sure why the pre-exposure value would be different for the same final scene EV, but a different way of getting to it.

What would the expected pre-exposure value be for this given final EV?

[Image Removed][Image Removed]

Hey Chris,

Thank you again for confirming the issue and for setting up a bug tracker.

I’ve relayed this info to our lighting team!

Kind regards,

Sander

Thank you Chris!

I’m happy for you to close this case!

Hello there,

Thank you for the very detailed description and the repro project.

I’m not immediately sure that this is an issue with local exposure; it actually seems to be something with the PreExposureValue in general.

I created a second PPV that mirrors the curve but with a constant -2.6555 value in Exposure Compensation, and that matches the curve, which is expected.

What is less expected is that NoExpComp closely matches a PPV with MeteringMode set to Manual and exposure set to 11.18, but it does not match a third PPV with Min/Max EV100 set to 0 and ExposureCompensation set to 1.27.

Are you seeing the same behaviour?

Best regards,

Chris

Upon a bit of further investigation, this does appear to be caused by local exposure as you noted. I hadn’t correctly turned local exposure off when observing the pre-exposure values. There seems to be something happening with the eye adaptation readback in darkly lit scenes and different exposure controls (seemingly manual and min/max EV100 controls) that causes the GPU to compute the last average local exposure as significantly higher than other methods.

I’m reported this as a bug and will link the tracking issue when one is available.

Best regards,

Chris

The tracking link should be live at Unreal Engine Issues and Bug Tracker (UE\-327117\).

Further updates should be reflected there.

Best regards,

Chris

I’m very glad that I could help.

If you have any further questions, please feel free to ask. Otherwise, would you mind if I close this case out for now?

Best regards,

Chris

You’re very welcome.

Best regards,

Chris