Tone Mapping ================== ``` mermaid flowchart LR A("ACES RGB Input") --> B[ACES to JMh] --> C["Tonescale (J Only)"] --> D["Chroma Compression (M Only)"] --> E["Gamut Compression (J & M)"] --> H["White Limiting"] --> F["Display Encoding"] --> G(Display RGB Output); style C stroke-width:4px ``` ### Tone-mapping After the data is in a JMh representation, the J channel is sent through the tone scale function. ### Requirements Here were a few of the key requirements considered when designing the tone mapping curve: * **S-shaped**: Tone scale shall have an "S-shaped" curve with a toe and shoulder. * **Monotonic**: Tone scale shall be continuously increasing over the domain. * **Non-asymptotic**: Tone scale shall not have any vertical or horizontal asymmptotes * **Continuity**: Tone scale shall be defined continuously over the domain. * **Domain**: Tone scale shall be defined for all float values. * **Contrast**: Tone scale shall have a log-log slope (gamma) through 18% mid-gray less than 1.55, which was the mid-slope contrast in ACES 1. * **Dynamic Range**: Tone scale shall provide the ability to produce consistent output for arbitrary dynamic ranges, but also provide preset values for common display setups, including: * 48 nit cinema * 100 nit video * 108 nit Dolby Cinema * 1000 nit HDR ### Tone-mapping Function The tone mapping function is based off a Michaelis-Mentin curve, and parameterized such that certain control values are derived from a single control parameter based on the peak luminance value. ### Linear scaling In the display encoding step, the algorithm allows for a "linear scale" value, which is used to compress. Specifically, the ### Values
ACES value
Peak Luminance
(nits)
0 0.18 1.0 2.0
100 0.000 10.000 45.757 63.988
500 0.000 13.193 89.098 158.949
1000 0.000 14.512 106.564 205.783
2000 0.000 15.747 121.664 248.779
4000 0.000 16.824 133.883 284.433