web: separate global endpoint curves (blacks/whites) from local tone mapping to eliminate grey aura around silhouettes and bump sw cache to v4
This commit is contained in:
@@ -122,7 +122,7 @@ assert.doesNotMatch(
|
||||
);
|
||||
// The BLACK knob's Hunt chroma mask is the one thing that still reads the doc's
|
||||
// 0.18 — it is a chroma floor, not a knob window.
|
||||
assert.match(maths, new RegExp(text(`float uBl = clamp(1.0 - effBase / ${TONE_BLACK_EDGE}, 0.0, 1.0);`)));
|
||||
assert.match(maths, new RegExp(text(`float uBl = clamp(1.0 - t / ${TONE_BLACK_EDGE}, 0.0, 1.0);`)));
|
||||
const knobBlock = maths.slice(maths.indexOf('float tonebl'), maths.indexOf('float toneCurve'));
|
||||
assert.ok(knobBlock.includes('float tonewh'), 'the four knob functions are gone');
|
||||
assert.doesNotMatch(
|
||||
@@ -132,8 +132,8 @@ assert.doesNotMatch(
|
||||
);
|
||||
// DR rides the same four moves with a share of each instead of masked terms of
|
||||
// its own, so it cannot fight a knob over a band or invert the ramp.
|
||||
assert.match(maths, text('float o = toneCurve(effBase, clamp(bl + dr * 0.12, -1.0, 1.0), clamp(sh + dr * 0.06, -1.0, 1.0),'));
|
||||
assert.match(maths, /\n\s*clamp\(hl - dr \* 0\.09, -1\.0, 1\.0\), clamp\(wh - dr \* 0\.18, -1\.0, 1\.0\)\);/);
|
||||
assert.match(maths, text('float blVal = clamp(bl + dr * 0.12, -1.0, 1.0);'));
|
||||
assert.match(maths, text('float shVal = clamp(sh + dr * 0.06, -1.0, 1.0);'));
|
||||
assert.doesNotMatch(maths, /o = clamp\(base/, 'the ramp clamps the base before the curve again — the ends of the ramp are the anchors');
|
||||
assert.doesNotMatch(codeOf(sksl), /float a4 = /, 'the ramp is back inside the pass — one copy, not two');
|
||||
// The uniform block: the shader's declarations, arrays expanded and in
|
||||
@@ -195,7 +195,7 @@ assert.doesNotMatch(sksl, /clamp\(0\.25 \+ 0\.25/, 'a knob is clamped against a
|
||||
// blurred base itself. The ramp's own luma is still not what is handed to the
|
||||
// rebuild — the neighbourhood's is — or the move would be global again and the
|
||||
// band above SHADOW would be drawn flat, which is the whole bug.
|
||||
assert.match(sksl, /float target = clamp\(o \+ \(t - effBase\), 0\.0, 1\.0\);/);
|
||||
assert.match(sksl, /float target = clamp\(tGlobal \+ localShift, 0\.0, 1\.0\);/);
|
||||
assert.doesNotMatch(sksl, /float target = base > 0\.0004 \? o \* t \/ base : t;/, 'the gain-scaled detail came back — a tone knob softens again');
|
||||
assert.match(sksl, /vec3 res = lightMove\(c, t, target\);/);
|
||||
assert.doesNotMatch(sksl, /lightMove\(c, t, clamp\(o, 0\.0, 1\.0\)\)/, 'the ramp is read at the pixel again — a global curve');
|
||||
|
||||
Reference in New Issue
Block a user