Correct what D20 claimed the profile tables would do for colour
Measured after building them, on four of the library's 6D DNGs: Adobe Standard's tables lower mean saturation by 3-9 % at defaults, and the look at 200 % lowers it further. The 6D's look table scales saturation by 0.925 in its darkest value rows; it was tuned to sit under Camera Raw's default RGB tone curve, which DarkRoom does not apply, and the dark-tone desaturation is what is left without it. On _MG_9080 the Lightroom preview measures 0.49, the matrix alone 0.38, the profile 0.35. So the spec's "that gap is most of why the same file looks flatter" was wrong: the gap is tone. The tables stay — they put each hue where Adobe put it — and the spec, D20 and the Vivid file now say so. "Stronger camera look" is removed: a stronger Adobe Standard look is a less saturated picture, the opposite of its name. The Vivid presets, measured at 0.40-0.46 on the same frame, are what answers "more colourful" today.
This commit is contained in:
@@ -3,9 +3,10 @@ drpl 1
|
|||||||
# Vivid: more colour than the default rendering, for the photographer used
|
# Vivid: more colour than the default rendering, for the photographer used
|
||||||
# to Lightroom's richer starting point (camera-profiles.md §9).
|
# to Lightroom's richer starting point (camera-profiles.md §9).
|
||||||
#
|
#
|
||||||
# Most of that difference is the camera profile's look table, which D20 now
|
# That difference is mostly Camera Raw's tone curve, not the camera
|
||||||
# applies where a profile exists. These go further, and work on every
|
# profile: Adobe Standard's look table, which D20 applies, desaturates dark
|
||||||
# photograph — a JPEG, a body with no profile — because they lean on
|
# tones (camera-profiles.md §1). So these do the work themselves, and work
|
||||||
|
# on every photograph — a JPEG, a body with no profile. They lean on
|
||||||
# vibrance before saturation: vibrance lifts muted colours most and holds
|
# vibrance before saturation: vibrance lifts muted colours most and holds
|
||||||
# skin back, so a frame gets richer before anything in it looks painted.
|
# skin back, so a frame gets richer before anything in it looks painted.
|
||||||
# Saturation, which moves every colour alike, is used sparingly on top.
|
# Saturation, which moves every colour alike, is used sparingly on top.
|
||||||
@@ -66,10 +67,3 @@ colour_mixer.red_sat = -5
|
|||||||
contrast.contrast = 6
|
contrast.contrast = 6
|
||||||
saturation.saturation = -5
|
saturation.saturation = -5
|
||||||
vibrance.vibrance = 25
|
vibrance.vibrance = 25
|
||||||
|
|
||||||
# The camera profile's own look, pushed: Adobe Standard's look table at
|
|
||||||
# 175 % is close to the jump from Adobe Standard to Adobe Vivid. Where the
|
|
||||||
# photograph has no profile, only the vibrance moves.
|
|
||||||
[preset Stronger camera look]
|
|
||||||
camera_profile.look = 175
|
|
||||||
vibrance.vibrance = 10
|
|
||||||
|
|||||||
@@ -14,13 +14,25 @@ DarkRoom already applies, plus two lookup tables indexed by hue, saturation and
|
|||||||
- **`ProfileHueSatMap`** — a calibration. It corrects what a 3×3 cannot: a sensor whose reds and
|
- **`ProfileHueSatMap`** — a calibration. It corrects what a 3×3 cannot: a sensor whose reds and
|
||||||
oranges sit in the wrong place relative to its blues, which no linear map fixes. Two copies, one
|
oranges sit in the wrong place relative to its blues, which no linear map fixes. Two copies, one
|
||||||
per calibration illuminant, interpolated like the matrices.
|
per calibration illuminant, interpolated like the matrices.
|
||||||
- **`ProfileLookTable`** — a rendering intent. The "Adobe Standard" look: richer blues and greens,
|
- **`ProfileLookTable`** — a rendering intent: hue shifts of up to ±18° by hue, and saturation
|
||||||
warmer yellows, skin held where it is. The difference between Adobe Standard, Adobe Color and
|
and value scales that vary with brightness. The difference between Adobe Standard, Adobe Color
|
||||||
Adobe Vivid is mostly this table.
|
and Adobe Vivid is largely this table, together with each profile's tone curve.
|
||||||
|
|
||||||
Without them a raw renders through the matrix alone, which is accurate on a ColorChecker and reads
|
Without them a raw renders through the matrix alone, which is accurate on a ColorChecker and is
|
||||||
as flat next to Lightroom. The first complaint FR-DEV-3e's rationale names is exactly this, and
|
not what Lightroom showed for the same file.
|
||||||
the per-body base curves D19 retired were the cheaper stand-in for it.
|
|
||||||
|
**What the tables do *not* do is make a photograph more saturated.** Measured after the build
|
||||||
|
(2026-10-02), on four of the library's 6D DNGs rendered at defaults: Adobe Standard's tables
|
||||||
|
*lower* mean saturation by 3–9 %, and the look at 200 % lowers it further. The 6D's look table
|
||||||
|
scales saturation by 0.925 in its darkest value rows and by 1.0 from about a fifth of full scale
|
||||||
|
up, and its HueSatMap adds about 1 %. Adobe Standard was tuned to sit under Camera Raw's default
|
||||||
|
RGB tone curve, which raises saturation in the shadows and midtones, and the look's dark-tone
|
||||||
|
desaturation offsets it. Without that curve (§6) the offset is all that is left. On `_MG_9080`, Lightroom 6's own preview
|
||||||
|
measures 0.49 mean HSV saturation; the matrix alone renders 0.38, Adobe Standard's tables 0.35.
|
||||||
|
That preview also carries whatever was edited in Lightroom, so it is not a clean reference — but
|
||||||
|
the direction is unambiguous: **the gap to Lightroom's colour is mostly tone, not the profile's
|
||||||
|
tables.** The tables still matter for hue: they are what puts each body's reds, skin and foliage
|
||||||
|
where Adobe put them.
|
||||||
|
|
||||||
**What the library holds** (catalog of 2026-10-02): 17,286 of its raws are Canon EOS 6D. The
|
**What the library holds** (catalog of 2026-10-02): 17,286 of its raws are Canon EOS 6D. The
|
||||||
9,348 DNGs were written by Lightroom 6.14 and every one sampled embeds *Adobe Standard* with both
|
9,348 DNGs were written by Lightroom 6.14 and every one sampled embeds *Adobe Standard* with both
|
||||||
@@ -212,7 +224,8 @@ action sits on that line.
|
|||||||
|
|
||||||
## 9. Vivid presets
|
## 9. Vivid presets
|
||||||
|
|
||||||
Independent of the tables, and shipped in the same change: a *Vivid* section of read-only presets
|
Independent of the tables, and — given §1's measurement — the part of this change that actually
|
||||||
|
answers "more colourful". Shipped in the same change: a *Vivid* section of read-only presets
|
||||||
(`presets/vivid.drpl`) for the "more colourful than the default" request. They use only operations
|
(`presets/vivid.drpl`) for the "more colourful than the default" request. They use only operations
|
||||||
every photograph has — vibrance, saturation, the colour mixer, colour grading, contrast — so they
|
every photograph has — vibrance, saturation, the colour mixer, colour grading, contrast — so they
|
||||||
work on JPEGs and on bodies with no profile, and change only what they name (FR-DEV-6):
|
work on JPEGs and on bodies with no profile, and change only what they name (FR-DEV-6):
|
||||||
@@ -223,6 +236,11 @@ work on JPEGs and on bodies with no profile, and change only what they name (FR-
|
|||||||
- **Vivid warm** — oranges and yellows up, a warm highlight cast: golden hour.
|
- **Vivid warm** — oranges and yellows up, a warm highlight cast: golden hour.
|
||||||
- **Vivid portrait** — vibrance (which protects skin) with the orange and red bands held back.
|
- **Vivid portrait** — vibrance (which protects skin) with the orange and red bands held back.
|
||||||
|
|
||||||
|
Measured on `_MG_9080` (mean HSV saturation; Lightroom's preview 0.49, DarkRoom's default 0.35):
|
||||||
|
Vivid 0.40, Vivid strong 0.44, Vivid landscape 0.46, Vivid warm 0.38, Vivid portrait 0.37 — the
|
||||||
|
last two move particular bands, not the whole frame. Rendered with `cargo run --release -p dr-gpu
|
||||||
|
--example develop -- FILE.dng out.ppm "preset:Vivid"`.
|
||||||
|
|
||||||
They are bounded by the existing `bundled.rs` tests: every key names a real parameter, every value
|
They are bounded by the existing `bundled.rs` tests: every key names a real parameter, every value
|
||||||
is inside its control's range, and every preset changes something.
|
is inside its control's range, and every preset changes something.
|
||||||
|
|
||||||
|
|||||||
@@ -2750,8 +2750,12 @@ operation at order 25, after exposure, converting into linear ProPhoto and back
|
|||||||
fragment.** Design and the full argument: [camera-profiles.md](camera-profiles.md).
|
fragment.** Design and the full argument: [camera-profiles.md](camera-profiles.md).
|
||||||
|
|
||||||
*Why now.* The library's 9,348 Canon 6D DNGs carry Adobe Standard's tables, which Lightroom
|
*Why now.* The library's 9,348 Canon 6D DNGs carry Adobe Standard's tables, which Lightroom
|
||||||
rendered them through, and DarkRoom ignored them. That gap is most of why the same file looks
|
rendered them through, and DarkRoom ignored them, so every hue on those files sat somewhere other
|
||||||
flatter here.
|
than where Lightroom put it. *Measured after building it:* the tables are not why Lightroom's
|
||||||
|
rendering looks richer — at defaults they lower mean saturation by 3–9 %, because Adobe Standard's
|
||||||
|
look desaturates dark tones to sit under Camera Raw's tone curve, which DarkRoom does not apply.
|
||||||
|
The richer colour is tone, and the Vivid presets (FR-DEV-6) are what answers it today
|
||||||
|
(camera-profiles.md §1).
|
||||||
|
|
||||||
*Why there.* The matrix snippet stays what D19 made it, and every copy of it (masks, picker,
|
*Why there.* The matrix snippet stays what D19 made it, and every copy of it (masks, picker,
|
||||||
camera-space tap) stays correct without changing. Hue and saturation are invariant under the
|
camera-space tap) stays correct without changing. Hue and saturation are invariant under the
|
||||||
|
|||||||
Reference in New Issue
Block a user