Day 25 - 🧪 Experiment - Lighting with Only Image Based Lighting

General / 04 June 2026

No directional lights. No point lights. Just a cubemap. Here is what breaks, what holds up, and what surprised me.


The Setup

The goal was to keep everything simple; a bare minimum setup just to demonstrate the impact of IBL. I reinstalled Unreal Engine and had to pick up after many years of not being as active in it anymore.

  1. Found an interesting IBL I'd grabbed from the Unreal Marketplace years ago.
  2. Grabbed the Lighting Level from the Test Content and stripped out everything except a Skylight and a Directional Light (disabled for the first test), leaving a clean scene to start the experiment with.
  3. Tweaked the IBL intensity.
  4. Added a PostProcess volume.
  5. Removed the SkyAtmosphere setup. No dynamic time of day needed here, and I didn't want a feature that would significantly skew the results. Then kicked off a light bake.

IBL from marketplace, used in the scene.


Results

Soft, even light. No directionality, no shadows. All coming from the environment.


IBL only; direct lighting disabled.

Lighting pass only; direct lighting disabled.

Additional experiments


First bake with the wrong directional light color sampled.

Pass with the directional light color sampled from the actual IBL instead of eyeballing, for consistency sake.

Lighting pass only


A night of good sleep

After thinking about the process some more, I felt like I'd gone about it all wrong. The settings were off, the setup was fine, but I hadn't looked closely enough at the Sunny-16 rule. I set it to overcast, which puts exposure at f/8, then started balancing the intensity of the Skylight, since it's intensity-driven rather than lux-value-driven (or so I thought).


Sunny 16 rule: at f/8, 400 ISO and 1/400
In the previous image it might look a bit dark but turning the camera towards the light direction brightens the overall feel, as you typically see with lightly clouded skies. Head-on, it would still hurt your eyes.


What Worked

It produced a natural-looking result: the light bounces helped a lot. Simply rotating the IBL gave noticeable, subtle shifts in lighting that you just don't get with a uniform sky color.

Iteration was also faster than I remembered, compared to old versions of Unreal. Setting up and re-baking is significantly quicker than it used to be.

From the Unreal documentation: "Sky Lights use the pixel intensity multiplied by the light intensity result in a total luminance that is expressed in cd/m2 in HDR. For example, if the HDR pixels were thought of as a filter and those pixels ranged from 0 to 1.0 with the sky set to an intensity of 1000 cd/m2, the resulting luminance would be 1.0 * 1000 cd/m2."

I learned this the hard way, I only saw the Intensity slider and didn't realize it would translate to 1000 cd/m2, which is why the earlier experiments look a little off. I was able to verify the sky intensity (average) against 2k cd/m2 (2000 cd/m2), which helped make the system more consistent overall. Using the illuminance and luminance meter I could verify my values and confirm that any Exposure Compensation adjustments would hold up. Since the scene is overall darker and receives less light than a sunny day, you have to compensate slightly for overall intensity. After more tinkering and using the debug settings, I landed on f/12.5 (the IBL reads more as 'cloudy' than 'overcast') and dialed in the Exposure Compensation accordingly.


What Broke

IBL-only produced a very overcast tone, technically plausible, but not visually interesting on its own. Adding even a subtle Directional Light made a noticeable difference in bringing some life to the scene.

I also had to bump up the contrast on the IBL. Despite having plenty of bit depth, the initial result was very flat. A bit of contrast went a long way.

On the light values: overcast skies have a luminance of around 1,000–2,000 cd/m2 and an illuminance of roughly 1,000–10,000 lux (commonly 5,000 lux), while bright midday sun sits at roughly 100,000 lux. Unreal's Directional Light defaulted to 10 lux, which visually looked fine but felt off numerically, unless they mean k-lux. Setting it to the physically correct value blew out the render completely, so I ended up dividing it by 1000, not ideal, but it worked.


What I Would Do Differently

With more time, I'd dig deeper into the exposure settings and get a better understanding of what Unreal currently offers there. I'd also spend more time experimenting with different light types and intensities.

I'd also place more reflection probes to see how they affect the specular IBL. Everything defaulted to the global IBL here, which felt a bit out of place, though it did serve as a useful sanity check that the system was working correctly.


Conclusion

This experiment made me think about the implications for games. IBL-only produces static results. You could interpolate between states if you have skilled matte painters, but then your light bakes fall out of sync. I understand why studios want to reduce their reliance on static IBL: Time of Day basically can't change, and you lose the accuracy of volumetric cloud scattering and dynamic atmospherics that come with it.

Building everything procedurally in-engine is a significant investment in resources and compute time, but it gives you precise control over the exact look you want, say, 20% cloud coverage casting soft shadows with correct atmospheric influence. That said, in Unreal the IBL system is still used even alongside dynamic TOD systems; it just gets updated every few frames rather than being fully static. So it is in support of new features instead of being replaced completely.

© 2026 Stefan Groenewoud - All views are my own, not those of my employer.