Exposure and the Grade
Set exposure and grading on look presets using Unreal Engine post-process settings
Exposure and the Grade
Agentic Atmos uses photometric light intensity and Unreal Engine 5.8's own FPostProcessSettings for exposure and grading. There is no separate exposure controller, hidden night lift, or custom metering system to configure.
If you already expose scenes with a post-process volume, the controls are the same. Author the time-of-day grade on a look preset; keep project-wide decisions in your own volumes and project settings.
Where exposure lives
| Layer | Authoring location | Purpose |
|---|---|---|
| Per-look grade | UAtmosPostProcessModifier on the look preset's Post Process slot | The complete FPostProcessSettings: exposure bias, metering, brightness limits, adaptation speeds, histogram percentiles, color, contrast, bloom, and tone |
| Level fallback | AAtmosSkyActor.PostProcess, under Atmos Sky > Advanced | Exposure when no cycle is assigned or no slot covers the current hour |
| Project | Your post-process volumes and project settings | Settings not asserted by the preceding layers, and higher-priority volume overrides |
The modifier owns the entire engine settings struct. Each field's bOverride_ flag determines whether it applies. An untouched field does not overwrite the project's setting; the engine's flags provide the selective merge.
The actor's fallback layer enables one override: AutoExposureBias = -0.4. This is a noon calibration for a physically lit sky around 128,000 lux, not a required value for every look.
Author a grade
- Open the active look preset and create its Post Process modifier if the slot is empty.
- Enable the override flags for the fields you want this look to control.
- Set
AutoExposureBiasas the artistic EV offset on the metered result. It is an absolute offset, not another exposure envelope. - Set metering method, adaptation limits, speeds, and percentile range using the engine controls. Color, contrast, bloom, and tone retain their normal post-process-volume behavior.
- Save the preset and use Refresh Now on the sky actor if the viewport does not update. Confirm the active slot references the edited preset before retuning it.
For deterministic cinematics or A/B captures, set the engine's minimum and maximum auto-exposure brightness to the same value. Equal limits pin the exposure; there is no additional Agentic Atmos locked-exposure mode.
Meter a real-lux scene
The engine interprets auto-exposure brightness limits as EV100 only when:
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=1Without that setting, the fields use raw luminance. The metering histogram also needs a log window wide enough for the scene. A physically lit noon around 128,000 lux can exceed its highest bucket, preventing the meter from representing the brightness correctly.
If daylight is flat white, check extended luminance range and the histogram's log window before lowering exposure bias. A metering-range problem is not fixed by changing the look's light intensity or repeatedly reducing the bias.
Hold the sun for a shot
Under Atmos Sky > Advanced, enable bPinSunPosition and set PinnedSunElevationDeg and PinnedSunAzimuthDeg. The position pin outranks the clock. A pinned sun and equal exposure limits let you compare a fixed composition without solar motion or adaptation changing the result.
Pinning position does not replace the look's authored light settings. Keep time, camera, and weather constant when evaluating one grade change.
How a transition is rendered
The full post-process settings struct is not numerically interpolated into one replacement struct. The outgoing and incoming settings are applied through two post-process components, with weights 1 and the transition alpha. The renderer produces the dissolve, including the resolved exposure bias, rather than a one-frame grade switch.
The modifier also contains class-level calibration fields marked EditDefaultsOnly:
| Field | Default | Role |
|---|---|---|
SideAPriority | -1001 | Outgoing post-process component priority |
SideBPriority | -1000 | Incoming component priority; it is above side A so the destination wins the blend |
ActorDefaultsExposureBiasEV | -0.4 | Initial bias on the sky actor's fallback layer |
EngineDefaultBloomIntensity | 0.675 | Engine bloom baseline used by multiplicative effects when a side does not override bloom |
Both component priorities are below the default priority 0 of a project-authored post-process volume. Your normal project volumes therefore outrank them. Explicitly setting a project volume to a lower priority changes that ordering.
The actor reads this calibration from class defaults during construction. Editing an individual preset instance is not a way to change the component priorities or initial actor bias. Change class defaults or C++ calibration only when your renderer defaults genuinely differ. The bloom anchor ensures an effect such as twice the bloom multiplies the engine baseline rather than zero on an ungraded look.
Readouts are not controls
AtmosSky.GetSky exposes the physical model's SunIntensityLux, MoonIntensityLux, SkyLightIntensityLux, and TotalHorizontalIlluminanceLux. Use them to check whether the expected illuminance and your exposure window are consistent. They describe the model, not a measurement of every rendered component; check bDrivingTheBackend separately.
AAtmosSkyActor::GetLastAppliedExposureEV() reports the exposure bias resolved from the last applied pair of post-process settings. It is read-only and returns 0 before the first apply, when nothing has been pushed.
Next steps
See day-cycle transitions, use the agent toolsets for repeatable inspection, or visit Discord support.