All Projects → GPUOpen-Effects → FidelityFX-LPM

GPUOpen-Effects / FidelityFX-LPM

Licence: other
Luma Preserving Mapper (LPM)

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to FidelityFX-LPM

FidelityFX-SPD
Single Pass Downsampler (SPD)
Stars: ✭ 94 (+36.23%)
Mutual labels:  cauldron, dx12, fidelityfx, gpuopen
FidelityFX-SSSR
Stochastic Screen Space Reflections (SSSR)
Stars: ✭ 130 (+88.41%)
Mutual labels:  cauldron, dx12, fidelityfx, gpuopen
wgpu-py
Next generation GPU API for Python
Stars: ✭ 210 (+204.35%)
Mutual labels:  dx12
Explosion
💥 A modern cross-platform game engine (WIP)
Stars: ✭ 102 (+47.83%)
Mutual labels:  dx12
Crucible
Crucible is a Thermos fork containing various patches for bug fixes and performance improvements. Join our discord to stay updated with the project development.
Stars: ✭ 67 (-2.9%)
Mutual labels:  cauldron
catalyst
A REST API base implemented as a microservice written in Go using the Clean Architecture paradigm.
Stars: ✭ 14 (-79.71%)
Mutual labels:  cauldron
Mohist
Minecraft Forge Hybrid server implementing the Spigot/Bukkit API, formerly known as Thermos/Cauldron/MCPC+
Stars: ✭ 861 (+1147.83%)
Mutual labels:  cauldron
Cauldron
C# Toolkit
Stars: ✭ 68 (-1.45%)
Mutual labels:  cauldron
Gfx
[maintenance mode] A low-overhead Vulkan-like GPU API for Rust.
Stars: ✭ 5,045 (+7211.59%)
Mutual labels:  dx12
Xacor
Experimental Game Engine
Stars: ✭ 24 (-65.22%)
Mutual labels:  dx12
pygfx
Like ThreeJS but for Python and based on wgpu
Stars: ✭ 72 (+4.35%)
Mutual labels:  dx12
XUSG
XUSG, XU's supreme graphics lib, is a handy wrapper currently for DirectX 12. It can be a good reference for designing your own DX12 wrapper APIs.
Stars: ✭ 57 (-17.39%)
Mutual labels:  dx12
FANCY
A rendering-framework for DX12 and Vulkan. Mostly intended for personal learning purposes and graphics demos
Stars: ✭ 21 (-69.57%)
Mutual labels:  dx12
openvr fsr
Add Image Upscaling via AMD FidelityFX SuperResolution or NVIDIA Image Scaling to SteamVR games
Stars: ✭ 1,182 (+1613.04%)
Mutual labels:  fidelityfx
openvr fsr app
Management Gui for OpenVR FSR PlugIn
Stars: ✭ 179 (+159.42%)
Mutual labels:  fidelityfx

FidelityFX LPM

What is LPM?

Luma Preserving Mapper is a tone mapping and gamut mapping solution for HDR and wide gamut content. LPM tone maps the luma of the RGB pixel instead of the colors itself, but it makes sure that tonemap(luma(RGB)) would be very similar to luma(tonemap(RGB)), that is, it preserves the luma of the pixel.

Sample Overview:

  • This sample is meant to show LPM integration into DX12 and Vulkan API.
  • LPM is a single header tone and gamut mapping solutions tailored to work for HDR and wide gamut colour pipelines and displays.

FidelityFX LPM Off

NoLPM

FidelityFX LPM On

LPM

Build Instructions

Prerequisites

Running the LPM Sample:

  • Clone the repo with its submodules:

      > git clone https://github.com/GPUOpen-Effects/FidelityFX-LPM.git --recurse-submodules
    
  • Generate the solutions:

     > cd sample/build
     GenerateSolutions.bat
    
  • Open the solutions in the VK or DX12 directories, compile and run.

  • The tonemapper selected in GUI will already be set to LPM.

  • If using HDR10 or FS2 displays, you can also change display mode option in UI.

  • Use test pattern option in UI to do accuracy testing of LPM on different colour swatches or test HDR photograph image.

High-level overview:

For a detailed explanation of LPM, please read sample/docs/LPM_doc.pdf and read the comments in ffx-lpm/ffx_lpm.h.

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 and 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() used to setup all the data required by mapper in a control block.
  • Information like:
  • 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() used to do the calculations for mapper by reading data from the control block.
  • For detailed intructions please read comments in ffx_lpm.h

LPMPS.cpp:

  • CPU side setup code for LPM.
  • Select the right LPM_config__ and LPM_color__ configurations based on content gamut and display mode selected.

LPMPS.hlsl/glsl:

  • GPU side call to do the tone and gamut mapping.
  • Select right configurations of LPM_config__ based on content gamut and displaymode selected.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].