Files
GR-raytracing/assets/blackbody/README.md
T
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

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.