The scene is lit far brighter than a display can show and drawn into a
floating point RenderTarget without any colour
conversion. A second pass, a fullscreen triangle with a
createToneMapMaterial(), reads that texture, multiplies
it by the exposure, squeezes it into range with the chosen curve and
converts it to sRGB for the canvas. With none the highlights
just clip to white.