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 |