Call the reference curve what it is, and drop wording that reads as copying

The view transform's second curve is the DNG SDK's published reference
rendering — the ACR3 default curve applied by RefBaselineRGBTone — so
it is the "DNG Reference" curve in the panel, D21 and the code, not a
name borrowed from another product. Comments and docs that justified a
choice by another editor doing it ("as their Amount", "so a
photographer arriving from it finds the name") now give the actual
reason. The Vivid presets no longer describe themselves as reaching
for another editor's look; they are DarkRoom's own.

Factual mentions stay: which program wrote the library's DNGs, what
was measured against, and preset import. camera-profiles.md gains §15,
on starting a photograph from the edit it already carries.
This commit is contained in:
2026-10-03 14:22:49 -04:00
parent e12783da9f
commit 8294e6b59f
12 changed files with 68 additions and 52 deletions
+10 -10
View File
@@ -1,16 +1,16 @@
//! TRACES: FR-DEV-3j | FR-DEV-3e
//! Camera Raw's tone, as a rendering the view transform can choose (D21).
//! The DNG SDK's reference tone, as a rendering the view transform can
//! choose (D21).
//!
//! Lightroom's colour is mostly its tone curve (camera-profiles.md §1): the
//! The DNG specification's reference rendering runs a raw through the
//! profile's `ProfileToneCurve`, or the ACR3 default for a profile with none.
//! Half of what the curve does is *how* it is applied. Camera Raw's
//! Half of what the curve does is *how* it is applied. The SDK's
//! `RefBaselineRGBTone` runs it on the largest and the smallest channel, and
//! places the middle channel at the fraction between them it had before. Hue
//! is kept; saturation rises wherever the curve is steeper than the
//! diagonal, which for the ACR3 curve is the shadows and the midtones —
//! where Adobe Standard's look table desaturated to compensate.
//! diagonal, which for the ACR3 curve is the shadows and the midtones.
//!
//! It runs in linear ProPhoto, as Camera Raw does, on values clipped to
//! It runs in linear ProPhoto, as the SDK does, on values clipped to
//! `[0, 1]`; its output is linear and goes to the output transform as the
//! sigmoid's does. The curve is read from the profile buffer
//! (`ops::camera_profile::profile_buffer`), which always carries one.
@@ -22,14 +22,14 @@ use crate::ops::camera_profile::{mul, working_prophoto};
use crate::view::{DEFAULT_CONTRAST, DEFAULT_WHITE, SCENE_GREY};
/// The input scale for a white point: 1 at the default, so sensor white is
/// display white as in Camera Raw; each stop of `white` above it halves the
/// display white as in the SDK's reference; each stop of `white` above it halves the
/// input.
pub fn input_scale(white: f32) -> f32 {
(DEFAULT_WHITE - white).exp2()
}
/// The power the input is bent by about middle grey: 1 at the default
/// contrast, so the curve is Camera Raw's untouched.
/// contrast, so the curve is the reference's untouched.
pub fn contrast_power(contrast: f32) -> f32 {
contrast / DEFAULT_CONTRAST
}
@@ -50,7 +50,7 @@ fn rgb_tone(curve: &[f32], p: [f32; 3]) -> [f32; 3] {
}
/// TRACES: FR-DEV-3j
/// The view transform's Camera Raw rendering of one working-space colour.
/// The view transform's DNG reference rendering of one working-space colour.
pub fn apply_reference(curve: &[f32], c: [f32; 3], contrast: f32, white: f32) -> [f32; 3] {
let (to, back) = working_prophoto();
let scale = input_scale(white);
@@ -73,7 +73,7 @@ fn camera_raw_curve(x: f32) -> f32 {
return mix(profile_table[base + i].x, profile_table[base + i + 1u].x, s - f32(i));
}
// Camera Raw's RGBTone: the curve on the largest and smallest channel, the
// The SDK's RGBTone: the curve on the largest and smallest channel, the
// middle one kept at its fraction between them, so hue survives.
fn camera_raw_tone(c: vec3<f32>, scale: f32, power: f32, grey: f32) -> vec3<f32> {
var p = PROFILE_FROM_WORKING * c * scale;