Width gate for the joint packet: below this stencil half-width (CSS px) the
vertex stage skips the packet math, so hairline scenes pay nothing for the
deficit rule — EXCEPT where the turn is SHARPER THAN 120° and BOTH of my
raw radii reach CAPSULE_MIN_RADIUS_PX (#1495).
ANGLE: past 120° the bisector cuts my rod LENGTHWISE, so the skipped packet
costs real light — short partner (ql = 0.4 r), −0.28 of peak at 135°
(r = 1.5) to −0.72 at 160° (r = 3.5) against −0.05…−0.12 for a congruent
joint at the same angle and radius, a difference that is ≤0.03 up to ~90°.
(That subtrahend is the congruent joint's own packet-suppressed deviation,
itself part chop.) A WIDENING partner is not part of the case: its far end
clears this gate, so its packet already refills the cut. The test reuses the
sharp clause's > 0.5 axis-dot, agreeing by DUPLICATION, not construction —
16 shader literals (4 surfaces × 2 ends × {gate, clause}) against this
model's one sharpTurn, so no pin covers the clause copies.
FLOOR: capsuleLegWidthScale dims a sub-floor leg while the deficit cancels
the partner's UNSCALED profile, so a pair at different scales OVER-fills
(+0.14…+0.16 at 175° with one end sub-floor) — a bead, the artifact class
this primitive exists to remove. It closes that half ONLY: fade can still
disagree between legs (block comment below), so the exactness condition is
"the partner's SCALED field <= mine everywhere", NOT "widthScale == 1". The
price is real — a drawable sub-floor taper (own raw 1.2 → 3.0) would measure
−0.05…−0.07 with a packet against −0.33…−0.79 gated, and −0.002…−0.004
against −0.03…−0.10 with a congruent partner and no bead at all. A dim gap
over a bright bead is the trade, not a free win.
COST is fragment work, not stencil area (the kept half-disc already spans
sin(turn/2) >= 0.87 of the disc past 120°): a live packet makes every
foreign-side fragment evaluate the partner rod instead of discarding, and
past 120° that region runs lengthwise along the rod — 18.3% of a leg's own
covered footprint at 121°, 27.5% at 150°, 56.8% at 175° (r = 2, len 12;
15.8/23.4/50.9 at r = 3.5) against 12–15% at a gentle joint. The thin-line
fill arm was NOT re-run, and the perf benches are not obviously immune:
their walk draws every step independently, so 24.9% of their joints turn
past 120°, and whether their drawn radius lands in the band this opens
depends on framing (not measured).
All radii and residual measurements in this block are CSS-pixel values;
fragment-work percentages vary with the render-target scale.
THREE RESIDUALS, all pinned by the sweep: a joint at or below 120° still
hard-cuts (−0.19 at ql = 0.4 r, −0.39 at 0.05 r, r = 3.5); the angle
threshold is hard, so a projected bend sweeping it pops (−0.175 → 0.000
across 119.5° → 120.5°, r = 2); the floor is harder still (raw 1.4999 → 1.5
goes −0.21 → 0.000 at 125°, −0.72 → 0.000 at 175°) — a zoom sweeps that one.
Width gate for the joint packet: below this stencil half-width (CSS px) the vertex stage skips the packet math, so hairline scenes pay nothing for the deficit rule — EXCEPT where the turn is SHARPER THAN 120° and BOTH of my raw radii reach
CAPSULE_MIN_RADIUS_PX(#1495).ANGLE: past 120° the bisector cuts my rod LENGTHWISE, so the skipped packet costs real light — short partner (
ql = 0.4 r), −0.28 of peak at 135° (r = 1.5) to −0.72 at 160° (r = 3.5) against −0.05…−0.12 for a congruent joint at the same angle and radius, a difference that is ≤0.03 up to ~90°. (That subtrahend is the congruent joint's own packet-suppressed deviation, itself part chop.) A WIDENING partner is not part of the case: its far end clears this gate, so its packet already refills the cut. The test reuses the sharp clause's> 0.5axis-dot, agreeing by DUPLICATION, not construction — 16 shader literals (4 surfaces × 2 ends × {gate, clause}) against this model's onesharpTurn, so no pin covers the clause copies.FLOOR:
capsuleLegWidthScaledims a sub-floor leg while the deficit cancels the partner's UNSCALED profile, so a pair at different scales OVER-fills (+0.14…+0.16 at 175° with one end sub-floor) — a bead, the artifact class this primitive exists to remove. It closes that half ONLY:fadecan still disagree between legs (block comment below), so the exactness condition is "the partner's SCALED field <= mine everywhere", NOT "widthScale == 1". The price is real — a drawable sub-floor taper (own raw 1.2 → 3.0) would measure −0.05…−0.07 with a packet against −0.33…−0.79 gated, and −0.002…−0.004 against −0.03…−0.10 with a congruent partner and no bead at all. A dim gap over a bright bead is the trade, not a free win.COST is fragment work, not stencil area (the kept half-disc already spans sin(turn/2) >= 0.87 of the disc past 120°): a live packet makes every foreign-side fragment evaluate the partner rod instead of discarding, and past 120° that region runs lengthwise along the rod — 18.3% of a leg's own covered footprint at 121°, 27.5% at 150°, 56.8% at 175° (r = 2, len 12; 15.8/23.4/50.9 at r = 3.5) against 12–15% at a gentle joint. The thin-line fill arm was NOT re-run, and the perf benches are not obviously immune: their walk draws every step independently, so 24.9% of their joints turn past 120°, and whether their drawn radius lands in the band this opens depends on framing (not measured).
All radii and residual measurements in this block are CSS-pixel values; fragment-work percentages vary with the render-target scale.
THREE RESIDUALS, all pinned by the sweep: a joint at or below 120° still hard-cuts (−0.19 at
ql = 0.4 r, −0.39 at 0.05 r, r = 3.5); the angle threshold is hard, so a projected bend sweeping it pops (−0.175 → 0.000 across 119.5° → 120.5°, r = 2); the floor is harder still (raw 1.4999 → 1.5 goes −0.21 → 0.000 at 125°, −0.72 → 0.000 at 175°) — a zoom sweeps that one.