display_curve
The chain's display transform in Luau, for a suite that reads a rendered pixel and has to say what light produced it.
__display__ runs on every frame the engine delivers, so a surface answering a
known light value does not arrive at the frame as that value: it arrives as the
Khronos PBR Neutral tone curve of it, encoded for a display. shownRGB is that
pair composed — hand it the light a case authored and it answers the code
values the capture should read.
local DisplayCurve = require("@builtin::tests.fixtures.display_curve")
local expected = DisplayCurve.shownRGB({ 0.8, 0.2, 0.2 })
-- … compare `expected` against the pixel the capture returned …
The curve mixes channels by their shared peak, so neutralCurve and shownRGB
take the whole triple; a case holding a single channel still passes the three.
srgbEncode is the transfer function alone, for a case that holds
__display__ at curve = 0 and measures the encode by itself. srgbDecode is
its inverse, for a case that reads such a frame back and needs the light a
code value came from — dividing out the exposure the frame was captured
under recovers the scene-referred value.
The formula is zero_display_neutral in
src/engine/renderer/subsystems/post_process_renderer.rs, read on a light
triple rather than on a fragment.
Scoped to this part · feeds back into the world's score.