Match colours
On the Compare page, Limner suggests the post-process values that bring the viewport closer to the reference: exposure compensation, white balance, saturation and contrast, and optionally midtones, highlights and blacks. It previews the values in the viewport, renders again, corrects them over a few passes and keeps the closest pass. Nothing is written while it solves.
Apply then writes them in one undoable step to the camera the viewport looks through, an unbound Post Process Volume or a new volume above the others. New in version 1.1.
Match a shot
Section titled “Match a shot”-
Show a reference over the viewport: double-click it on the board, or look through a camera it is linked to.
-
Open the Compare page. The Match colours to the reference card is next to the comparison results, or under them in a narrow dock.
-
Choose what may change with the switches, and where Apply writes with Write to.
-
Click Solve. The viewport shows the suggested values as a preview, and the table lists each value now and after.
-
Turn Preview in viewport on and off to judge the change, and lower Strength to apply only part of it.
-
Click Apply to ….
Ctrl+Zundoes it.
The hints of a comparison link straight to it: “The scene is 9 L* darker than the reference on average.”, “The scene is cooler than the reference.” and the contrast hints have a Match colours link that solves right away. See What to change.
The card
Section titled “The card”| Control | Does |
|---|---|
| Write to | Where Apply writes the values: the camera the viewport looks through, an unbound Post Process Volume, or a new volume above the others. |
| Exposure | Exposure compensation (EV); works with auto and manual exposure. |
| White balance | White balance temperature and tint. |
| Saturation | Global saturation (the W channel; per-channel values stay as they are). |
| Contrast | Global contrast (the W channel). |
| Shadows and highlights | Midtones (gamma), highlights (gain) and blacks (offset). Off by default. |
| Also make a LUT | Apply also makes a LUT texture for what the settings cannot do and sets it on the target. The texture is a new asset in the LUT folder. Off by default. |
| Strength | How much of the suggested change Apply writes, from 0 to 100 % (Match Strength in the settings, 100 % by default). |
| Solve / Solve again | Render the viewport, suggest values, preview them and correct them over a few passes (Match Passes in the settings, 3 by default). |
| Preview in viewport | Show the suggested values in the viewport. Nothing is written to the level. |
| Apply to … | Write the values in the table to the target in one undoable step. |
| Export LUT | Write a LUT for what the settings cannot do: a .cube file for other tools, or an Unreal LUT texture. |
After a solve, the table shows each switched-on setting with its value Now and the Suggested value at the current strength: Exposure compensation (EV), White balance temperature (K), White balance tint, Saturation, Contrast, and with Shadows and highlights also Midtones (gamma), Highlights (gain) and Blacks (offset). Under it, a line sums up the solve, for example “3 passes · mean L* 41 → 47 (reference 47) · colour difference 11.2 → 2.4”.
A switch turned on after solving is not part of the result: the card says “Solve again to include the settings switched on after solving.” Only the settings in the table change.
Where Apply writes
Section titled “Where Apply writes”| Target | Label in Write to |
|---|---|
| The camera the viewport looks through | CineCamera sh040_ruins, with “(the reference is linked to it)” when it is the reference’s camera |
| An unbound Post Process Volume | Post Process Volume PPV_Global (unbound, priority 0.0) |
| A new volume | New volume 'Limner Match' (unbound, priority 1.0), above the volumes in the level |
The default is the linked camera, otherwise the strongest unbound volume, otherwise a new volume. After Apply to a new volume, that volume becomes the target, so a second Apply changes it instead of adding another one.
Apply writes only the switched-on settings, with their override boxes ticked, as one undo step (“Limner: match colours to reference”). A new volume, and the LUT with Also make a LUT, are part of that step; the LUT texture itself stays in the LUT folder. The card then confirms it, for example “Applied 5 settings to CineCamera sh040_ruins. Ctrl+Z undoes it.”
Some differences can’t be reached with exposure, white balance, saturation and contrast. For those, Limner can make a LUT:
- .cube file: a 33×33×33
.cubefile for other tools, in the export folder of the Project Settings (Saved/Limnerby default). Cube Size in the settings changes the grid size. - Unreal LUT texture: a 256×16 LUT texture asset in the LUT folder of the Project Settings, for Color Grading LUT in a post process volume or camera. Export LUT creates it and selects it in the Content Browser; Also make a LUT creates it and sets it on the target with Apply.
How it works
Section titled “How it works”- It measures both images on the same parts as Compare: mean and percentiles of L*, chroma, the colour cast of the near-neutral pixels (a* and b*) and the spread of L* for contrast.
- The first estimate uses a copy of Unreal’s own white balance and colour grading math. The tonemapped result is not exact, so Limner previews the suggestion, renders the viewport, measures again and corrects it (Match Passes in the settings, or until mean L* is within 1 and the colour cast within 2 of the reference). It keeps the closest pass.
- The preview is added on top of the values in effect, on the active viewport only; nothing is written while solving.
- Apply combines the values in effect with the suggestion, scales the change by Strength, and writes only the switched-on settings, with their override boxes ticked, as one undo step.
- It matches the overall look of one frame. Where the light falls, the value structure, stays the artist’s job; Compare’s value hints cover that.
The colour difference in the result line combines the differences in mean L*, mean a* and b*, chroma and the spread of L*.
From Python
Section titled “From Python”solve_color_match() solves in the viewport, solve_color_match_from_files() without one, and apply_color_match() writes the result. export_color_match_lut() and apply_color_match_lut() handle the LUT. See Python.