Default (ACES)
Uses Unreal’s native FilmToneMap with the engine’s color processing.
A useful baseline. This does not certify a complete ACES transform.
Explore eleven tonemappers inside Unreal Engine. Tune a look in Preview, then compile it into the production rendering path when it is ready.
These instructions describe the plugin’s current workflow. Recorded GPU validation covers Unreal Engine 5.0.3, D3D12 / SM5 and SDR rendering. Reference fidelity and support for other configurations have separate limits, explained below.
Install the plugin build that matches your Unreal Engine version. Enable UnrealTonemapper in the editor’s Plugins window, then restart the editor when requested. A source distribution also requires a compatible C++ toolchain and a successful project build.
Use the plugin’s editor toolbar action. Plugin settings are also available under Project Settings → Plugins → Unreal Tonemapper.
Select a tonemapper in the sidebar. For AgX, choose a look as well. Enable Preview to see your draft in the editor viewport and adjust its parameters.
Click Compile Tonemap. After a successful compilation, Preview switches off and its checkbox clears. The viewport displays the newly compiled version.
Use a consistent camera, scene and exposure while comparing curves. Automatic exposure can make two settings look more similar—or more different—than the tonemapper alone.
The plugin keeps two states: your editable draft and the last compiled snapshot. Changing a setting saves the draft; it does not automatically replace the compiled tonemapper.
The tonemapper and parameter values you are editing.
Shows the draft immediately, with an editor-only PREVIEW frame.
The committed curve used when Preview is off and when cooking.
| What you do | What the viewport shows | Plugin requests compilation? |
|---|---|---|
| Enable Preview | Current draft | No |
| Change a curve or parameter in Preview | Updated draft | No |
| Disable Preview | Last compiled snapshot | No |
| Edit with Preview disabled | Last compiled snapshot | No |
| Click Compile Tonemap | New compiled snapshot after completion | Yes |
The explicit request waits if Unreal’s shader compiler is busy. Preview remains active while the request is pending and switches off after successful completion. Compile is disabled while compilation is pending, and when your draft already matches the committed snapshot.
Yes / CompileCompile the draft, wait for completion, then close.
No / Keep draftKeep the draft for later and return to the last compiled rendering.
CancelKeep Studio open and continue editing.
A thin frame repeats PREVIEW along all four viewport edges, leaving the center clear. Its default opacity is 0.6. It is an editor overlay, separate from the color processing; it does not appear in scene captures, standard or high-resolution screenshots, or packaged games. Watermark style settings are kept in code and configuration rather than exposed in Studio.
Unreal may still compile shaders after installation, a renderer change, an update or a cache miss. This engine activity does not mean the plugin has promoted your draft into the compiled snapshot.
Each operator offers a different response to brightness and color. The descriptions below identify the implementation and its limits; a familiar name alone does not guarantee a match to another application.
Uses Unreal’s native FilmToneMap with the engine’s color processing.
A useful baseline. This does not certify a complete ACES transform.
An analytic polynomial approximation with exposure-range controls. Choose True AGX, Golden, Punchy or ACES Like.
The historical “True AGX” label does not imply a verified Blender or OCIO match.
A rational filmic curve with adjustable shoulder, linear section, toe and white normalization.
Uses an exposure bias of 2 and a default white point of 11.2; custom grading changes the response.
A compact scalar fit using Narkowicz’s published five coefficients.
Distinct from a complete ACES transform and from Stephen Hill’s matrix fit.
A simple curve, with optional extended white-point control. White Point 0 selects the classic form.
Independent channel compression can change RGB ratios.
Applies the curve to luminance and preserves RGB ratios at that stage. Supports an extended white point.
Later processing can still clip out-of-gamut colors.
Uses the published operator structure and constants, designed around linear Rec.709 input and output.
Reference comparisons require neutral grading, saturation and output-gamma settings.
The plugin’s existing Lottes-inspired curve, with contrast, shoulder, toe and toe-exponent controls.
Its coefficient construction differs from the author’s anchored formulation.
Adjusts the toe, linear section and shoulder using the author’s parametric structure.
The corrected toe blend was checked against the author’s graph; full independent GPU reference validation remains separate.
A custom rational filmic response or a linear response with optional S Curve contrast.
Not matched to the complete pipeline of a specific Unreal release. S Curve applies only with Filmic Mode disabled.
A custom style using linear clipping followed by Unreal’s display encoding.
Does not reconstruct Source’s complete HDR, exposure or contrast pipeline.
Studio shows the selected operator’s controls. Open More settings for additional curve and output controls. Hover a parameter for its specific tooltip.
| Control | How to use it |
|---|---|
| Min EV / Max EV | Set the operator’s exposure range. AgX uses a log-exposure range; the other operators use the shared black-point and range-scale grading before their curve. |
| Pre exposure | Shift exposure before the curve. The default 0 adds no bias. |
| Saturation | Use 1 for unchanged saturation, 0 for monochrome, or larger values for a stronger effect. |
| Output gamma | Use 1 for no additional artistic gamma adjustment. Unreal still performs the final display encoding; 2.2 is not a neutral “enable sRGB” setting. |
| White point | Controls white normalization in Hable and extended compression in Reinhard. The meaning is operator-specific. |
| Convert from ACEScg | AgX’s optional AP1-to-Rec.709 conversion. Its implementation omits D60-to-D65 white adaptation; it is not a complete OCIO transform. |
A small reset icon appears beside a numeric or boolean parameter only when it differs from its native default. It restores that parameter alone. Its space stays reserved so the input does not move. Resetting a value updates the draft without requesting compilation.
Reset to Default restores the active operator’s parameters. For AgX, it restores the active look’s parameters, output gamma and Force SDR. The separate look reset returns the look selection to True AGX. Reset actions remain draft edits until you compile.
Shared grading for non-AgX operators starts at Min EV −20, Max EV 0, Pre exposure 0 and Saturation 1. Output gamma starts at 1.
True AGX, Golden and Punchy start at Min EV −12.47393, Max EV 4.026069 and Pre exposure 0. ACES Like starts at −6.5 and 0.5, with saturation 0.9 and per-channel slope/power 1. Conversion defaults follow whether the project uses ACES AP1.
Hable’s default A–F coefficients are 0.15, 0.50, 0.10, 0.20, 0.02 and 0.30, with white point 11.2. Reinhard white point defaults to 0. Uchimura starts at P 1, a 1, m 0.22, l 0.4, c 1.33 and b 0. Lottes starts at contrast 1.6, shoulder 0.977, toe 0.18 and toe exponent 0.22.
The sidebar selector changes Unreal’s working color space. It is not a display-gamma switch or a substitute for the tonemapper. The available choices are:
The selector uses Unreal’s renderer setting and offers to restart. Until restarted, the footer’s startup color space identifies the space active for the current session. Selecting Custom does not define its primaries; configure those through Unreal’s renderer settings.
For reliable comparisons, hold the working space, exposure, white balance and display output constant. AgX’s conversion toggle does not provide complete color management, and disabling it applies a Rec.709-oriented operator directly to AP1 values.
Preview evaluates the production curve with live parameters into a LUT. The compiled path uses constants and the same curve functions. Both feed the native tonemapping lookup.
The recorded SDR run passed 20 cases on Unreal Engine 5.0.3 / D3D12 / SM5. Each case compared all 32,768 cells of a 32³ LUT. The maximum accepted and observed difference was one 10-bit LUT code; four graded profiles matched exactly.
This requires an independent reference with the same input space, exposure, parameters and output encoding. Preview agreement alone cannot establish it.
The source audit checks selected formulas and identifies artistic variants. It does not certify every operator against an independent GPU reference, Blender, OCIO, HDR luminance or a calibrated display.
Exposure, bloom, vignette, film grain, artistic LUT blending, post-tonemap materials and output transfer functions keep their native order. Preview is not a second curve applied to an already display-encoded image.
Internal validation also exercises manual compilation, draft persistence, Studio controls and resets. Those checks describe the tested build; they do not extend the compatibility claim to untested engines or displays.
| Area | Documented scope |
|---|---|
| Recorded rendering validation | Unreal Engine 5.0.3, D3D12 / SM5, SDR native 32³ LUT. |
| C++ build validation | Editor Development and standalone Game Development builds passed in the tested environment. |
| Other engine versions / renderers | Use a matching plugin distribution and validate it for your target. The measurements above do not establish support. |
| HDR | The plugin contains a project-specific HDR extension. SDR parity results do not validate HDR displays or absolute luminance. |
| Packaged rendering | Uses cooked shaders and forces Preview off. A successful C++ build alone is not a packaged visual validation. |
Compile the desired look explicitly and inspect the result with Preview disabled. Cooking uses the committed constants. A pending draft should not be treated as the production look.
Keep Config/UnrealTonemapperCompiled.ush with the source project: it records the last compiled constants separately from the draft configuration. On startup, the plugin uses that snapshot without deliberately promoting draft changes. A cooked executable uses its cooked shaders and does not need this file at runtime.
The plugin uses a generated project-local shader mirror and a virtual source mapping. It does not require editing the installed engine’s shader files. Validate plugin interactions if another extension also changes the same engine shader mapping.
Check Preview first. With Preview disabled, the viewport intentionally retains the last compiled snapshot. Enable Preview to inspect the draft or click Compile Tonemap to commit it.
The draft may already match the compiled snapshot, or a compilation may still be pending. Make a change and wait for existing shader work to complete. Resetting all edited values can make the draft clean again.
First use, updates, cache misses and renderer configuration changes can trigger engine shader compilation. This is separate from the plugin’s explicit draft-to-compiled action.
Confirm that the same draft was compiled, then compare with fixed exposure, camera, post-process settings and working space. Wait for compilation and exposure adaptation to settle. After changing the working color space, restart the editor. Recorded parity measurements cover the tested SDR setup, not every output configuration.
Confirm the plugin build matches the project’s exact engine version. For a source plugin, close the editor, install the required Unreal C++ toolchain and rebuild the editor target. Inspect the first compiler error or editor-log error before retrying; stale binaries from another engine version are not a compatible build.
This plugin uses an analytic polynomial approximation with custom controls. It is not a certified Blender/OCIO implementation. A meaningful comparison needs a fixed OCIO configuration, compatible color conversions, matching exposure and identical output encoding.
The footer reports the space used at editor startup. Restart the editor to apply the changed renderer configuration correctly.
The frame is intentionally restricted to the editor viewport. It is omitted from screenshots, scene captures and packaged games.
Watermark appearance is kept in plugin code and configuration. Studio hides those style controls to keep the editing interface focused.
These references explain the named operators. Their inclusion does not imply endorsement or certify the plugin’s complete rendering pipeline.