Files
wyj d2a901cab1 Feat: Add CSV CIE 1931 blackbody LUT backend
Replace the in-tree Wyman analytic CIE fit with a repository CIE 1931
2-degree LUT derived from the 360-830 nm, 1 nm-linear CSV reference. The
GRBBLUT3 table stores 1024 uniform log(T) XYZ nodes over
[670.146556, 101408.88] K with four-point cubic Lagrange interpolation, and
the same CSV reference supplies a three-term Rayleigh-Jeans form above the
table and an inverse-temperature/log-XYZ crossover with channel-specific
endpoint forms below it. The loader validates the header and payload
checksum and rejects legacy formats and runtime generation.

Initialize the backend in the renderer, frame test, and PSF capture tool so
the new default is active wherever colors are produced.
2026-09-12 15:29:33 -04:00
..

CIE 1931 blackbody LUT

cie1931_2deg_xyz_1024.grbblut is the sole repository LUT. It contains 1,024 XYZ nodes uniformly spaced in log(T) over [670.146556, 101408.88] K. Wolfram integrates the Planck spectrum against the piecewise-linear 1 nm data in assets/CIE_xyz_1931_2deg.csv at 40-digit working precision and rounds each stored value once to little-endian IEEE binary64.

The 160-byte GRBBLUT3 header records the CIE 1931 2-degree, 360--830 nm, 1 nm-linear reference definition, node count, temperature limits, physical constants, generator description, and payload FNV-1a checksum. The C loader validates the header, exact payload size, and checksum, and rejects trailing bytes. Runtime table generation and the former GRBBLUT1/GRBBLUT2 formats are not supported. The evaluator uses four-point cubic Lagrange interpolation in log(T).

  • file size: 24,736 bytes
  • payload FNV-1a: 0e39867b0e70a809
  • file SHA-256: 850446663212fe488c88fca3ac2f54d6f8119a04801dda84fc1a62acdec37d63
  • all 1,023 interval midpoints versus independent Gauss-16 integration: max XYZ-channel relative 5.4633e-5, no negative XYZ

The LUT interpolation acceptance limit is 1e-4. A separate 5e-4 overall relative error budget accounts for the estimated error of linearly interpolating the 1 nm CIE samples; the LUT's much smaller internal error must not be mistaken for physical-reference accuracy.

Outside the stored range, the same CSV reference supplies both models. Above 101408.88 K the evaluator uses three integrated Rayleigh--Jeans terms A T+B+C/T (maximum validated XYZ-channel relative error 1.6635e-5 through 10*Tmax). Below 670.146556 K it uses a six-segment, degree-eight inverse-temperature/log-XYZ Chebyshev--Lobatto crossover down to 4.097321 K and channel-specific endpoint forms below that. Their maximum sampled XYZ relative errors are 8.16e-5 and 6.69e-5.

The Wolfram generation/validation scripts that produced this table, together with the bounded performance and accuracy evidence, are preserved on the experiment branch codex/blackbody-cost-experiment (tag blackbody-cost-experiment-2026-09-12) and are not part of the mainline tree.