FidelityFX Luminance Preserving Mapper 1.4
What is FidelityFX Luminance Preserving Mapper?
The FidelityFX Luminance Preserving Mapper (LPM) is a tone mapping and gamut mapping solution for high dynamic range (HDR) and wide gamut content. FidelityFX LPM tone maps the luminance (luma) of the red-green-blue (RGB) pixel instead of the color itself, but ensures sure that the tonemap(luma(RGB))
would be very similar to the luma(tonemap(RGB))
, that is to say it preserves the luminance information of the pixel.
FidelityFX LPM off
FidelityFX LPM on
High-level overview:
FidelityFX LPM is split into two parts: a setup call and filter call.
The setup call writes pertinent data to a fixed size control block with regards to what the tone and gamut mapping calculations need, and the filter call reads from the control block, calculates, and outputs a tone and gamut mapped color value or pair of values for the FP16 version.
ffx_lpm.h
:
-
A common header file for CPU-side setup of the mapper and GPU-side setup and tone and gamut map calculation functions.
-
LpmSetup()
is used to setup all the data required by mapper in a control block:-
What is the content gamut.
-
What is the display gamut.
-
Max brightness value of content in RGB.
-
Exposure steps above SDR/LDR 1.0
-
-
LPMFilter()
is used to do the calculations for mapper by reading data from the control block. -
For detailed intructions please read the comments in
ffx_lpm.h
ffx_lpm.cpp
:
-
CPU-side setup code for FidelityFX LPM.
-
Select the right
LPM_config_*_*
andLPM_color_*_*
configurations based on content gamut and display mode selected.
ffx_lpm_filter.hlsl
:
-
GPU-side call to do the tone and gamut mapping.
-
Select right configurations of
LPM_config_*_*
based on content gamut and display mode selected.