Measured against After Effects at 32 bpc:
- Classic Color Dodge, Classic Color Burn and Classic Difference at partial opacity: AE
fades the source toward the mode's neutral colour (0 for Dodge and Difference, 1 for
Burn) by the opacity and applies the classic formula at full strength (b / (1 − k·o),
|b − k·o|, 1 − (1 − b) / (1 − k·(1 − o))). We mixed the full-strength result by opacity:
up to 45/255 off on ordinary 0–1 footage.
- Overlay, Exclusion, Luminosity, Color Burn and Classic Color Burn keep their plain formula
for values above 1 (HDR passes). They were missing from `supports_hdr`, so their inputs
were clamped to 0–1 (Exclusion was up to 208/255 off); Classic Color Burn also clamped
its result at 0, where AE keeps negative values.
The CPU blend (color::blend_pixel) and the GPU kernel (common.wgsl) change together.
Tests: the reporter's formulas for each case (blend.rs); the CPU/GPU parity test of every
blend mode at every bit depth (over-range values, 70 % opacity) passes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QiAJeFttZp83Fh7YuzAR5f