Here's a set of images that showcase the following tonemappers in Unreal Engine 5.
- UE's default SDR tonemapper
- AgX (SDR)
- ACES 2.0
- Pumbo Luma WIP display mapper
The SDR tonemapper is "clipped" to SDR but matched in brightness to the HDR screenshots, for comparison. To be noted that it's not exactly ACES 1.3 but an approximation of it (called "Filmic" in UE code).
The intent of Pumbo's tonemapper is to act like an extremely neutral display mapper, leaving the control for color grading and contrast curves to prior phases (backed by engine customizations to allow for more advanced grading tools).
The scene is a default Unreal Engine asset map. This particular scene had a very wide dynamic range, and felt right for modern HDR tonemappers testing.
The post process grading settings are 100% neutral so all colors are from lighting and objects.
OPEN THE IMAGES IN A NEW TAB TO VIEW THEM IN FULL SCREEN.
A chromium based browser is necessary to view HDR images, and the Windows HDR brightness slider should be set to 31 for the brightness to be neutral.
The screenshots have a peak brightness of 1000 nits so they might clip if your display cannot reach 1000.
Text comparison:
SDR filmic tonemapper, due to its per channel nature and arbitrary intermediary color space, it shifted all colors randomly and specifically red->orange and blue->purple. Furthermore it was way too filmic.
AgX is the same as usual. SDR only here, as there's no final/proper HDR implementation, and I believe it's design is focused in SDR principles.
ACES 2 is obviously an improvements, but unfortunately still suffers from design choices that don't make it a suitable choice for videogames (it's IMO more focused on movies):
- It desaturates all colors too much, everything from midtones to highlights is heavily desaturated.
- The brighter and closer to the display peak brightness a color is, the more it's turned into "white" (D60). This is generally just not how our vision works and produces uncanny results. The minor advantage is that very bright highlights retain visibility but we are talking about things that are so bright that shouldn't need to be seen in detail before the auto exposure catches up. Furthermore, ACES starts desaturating so early that actual color information is lost, and one can only tell shapes or lights directions. The priority with its design was matching HDR to SDR, treating SDR as baseline and HDR an "extra", as opposed to putting HDR first.
The colors of human skin particularly look off, and the skin tones between humans are barely any different.
Ultimately, it doesn't look much different from AutoHDR on Windows/Xbox. - Highlights desaturate to D60 instead of D65, meaning that any white that was already in the scene will be more blueish than white "generated" by ACES (on highlights).
- It produces widely different results depending on the "paper white" user brightness, the classic slider that HDR games expose for players to adjust the image to their liking and viewing conditions. This adjustment is extreme and makes the image very washed out at 300 nits paper white. This means room for growth in the future will be limited, because with HGiG, in a few years, we'll be able to play at 300 nits paper white and 4000 nits+ peak white, but not with ACES 2 games.
- An input of mid grey (0.18, ~18 nits) is mapped to an output of 10 nits in SDR, while it approaches 18 nits as the peak brightness goes to 10k nits. This is not really good for games as you can't reliably math SDR and HDR.
- The tonemapping curve isn't "neutral", it's still filmic and crushes blacks
- Highlights are clipped, they retain no detail (see the sky in the nature shots)
- It offers no customization controls, the look is entirely pre-fixed and that is seen as an advantage, because of the idea of a unified color pipeline between applications. But the fact that its look isn't neutral at all butchers this conception, given that it's impossible to make neutral content (textures, light colors, post processing) if contrast and saturation are so heavily changed across the board.
- Red is turns somewhat orangish and blue slightly purple, though these are hard to solve and happen in almost all tonemappers.
Pumbo's tonemapper on the other hand is focused exclusively on retaining the scene colors as purely as they come, making sure they fit perfectly in the brightness and gamut range of your display. When it cannot display a color, it desaturates to white to retain brightness/detail, but only to the minimum amount it needs to fit the color. The amount of desaturation it does is configurable, and was set to low for this comparison, it can easily be increased a lot.
For the purpose of this comparison I added a filmic toe to it, which slightly crushes shadow, otherwise it would have been hard to visually match to ACES.
The colors you see are next to identical to their raw texture/material colors. Grading is then meant to do any image alterations.
This tonemapper while fully stable and usable, is still under tweaking, so it will further improve.
Images:
- Filmic SDR
- ACES 2
- Pumbo



- Filmic SDR
- AgX SDR
- ACES 2
- Pumbo




- ACES 2
- Pumbo


- Filmic SDR
- ACES 2
- Pumbo (default settings)
- Pumbo v2 (newer version with better highlights desaturation)
- Psycho HDR tonemapper (from ShortFuse/RenoDX) (this looks great, handles highlights perfectly with next to note perceptual hue shifts)
- Raw scene display mapped by max channel, to show the actual hues






Comparison of how the ACES 2 handles different user paper white brightness levels, vs how our custom tonemappers do.
As you can see, ACES 2 is completely unreliable in that regard, massively shifting the amount of desaturation it does depending on the user settings.
This is simply not suitable for video games, because the game will look completely different when played in a dark room (80-100 nits paper white) vs a lit room (as many gamers do, hence play at ~300 nits paper white)
ACES 2 - 40 nits - 120 nits - 300 nits



Psycho - 40 nits - 120 nits - 300 nits



ACES 2 - 40 nits - 120 nits - 300 nits



Psycho - 40 nits - 120 nits - 300 nits


