Tone Mapping¶
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 so that certain values can be calculated automatically based on the peak luminance value.
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 |