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.
41 lines
2.1 KiB
Markdown
41 lines
2.1 KiB
Markdown
# 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.
|