Let the tone curve continue past 1.0, and test that nothing clips

The tone curve clamped its input to [0, 1] and its output back to 1.0
around a 2.2 gamma, mid-chain — master and per-channel both. So any
edit with a curve made every scene value above 1.0 the same number
before the view transform ever saw it: D19's fourth finding. Beyond its
last point the curve now continues along its last span, whose secant
is the tangent the spline already gives that point, so the join is
smooth and an identity curve stays the identity to any height. The only
clamp left is the floor at zero, where there is no light to curve.

FR-DEV-2's acceptance test is how the rule stays true.
`scene_referred_until_the_view` wraps every point operation, at
non-neutral settings, between a gain of sixteen and one of a
sixty-fourth, with an identity in the view transform's place, and
renders a ramp from 0.4 to 15.2 times sensor saturation through it. The
output must still increase with the input and still separate the top of
the ramp. Run against the previous commit's tone curve it fails with
[21, 29, 33, 33, 33, 33, 33, 33]; every other operation already passed.
It renders on a device because dr-pipeline has none, and the spec's
pointer to it says so.
This commit is contained in:
2026-09-27 16:52:55 -04:00
parent 657f8f19ff
commit 0682d05f95
5 changed files with 265 additions and 30 deletions
+3 -3
View File
@@ -1272,9 +1272,9 @@ and unbounded, and no operation clamps above 1.0, applies a transfer function or
gamut. The view transform (FR-DEV-3j) is the one stage that does, and the output transform after
it clips and encodes. This is the constraint the base curve broke and ARCH §5.2 had drawn all
along: a display-referred curve in the middle of the chain throws away what every later stage,
the neighbourhood ones above all, needs. A test (`scene_referred_until_the_view`) runs every point
operation over a ramp to 16.0 so that a fragment that clips fails the build rather than the
photograph.
the neighbourhood ones above all, needs. A test (`scene_referred_until_the_view`, in `dr-gpu`)
runs every point operation over a ramp to 16.0 so that a fragment that clips fails the build rather
than the photograph.
---