HDR Output to HDR10 compatible display looking washed out

Hi,

I’ve been experimenting with HDR Output to a HDR10 compatible display, but cannot seem to get the more vibrant outcome that I was expecting.

I’m on Unity 2020.3.25f1 / Built-in pipeline / Windows standalone player

Everything in Unity is setup to render in HDR (cameras, quality settings, player settings etc)
My platform is reporting that it is capable of HDR Output.

I’m using PPv2 to Tonemap the HDR rendering to the SDR range in both cases below (using Custom settings that attempt to emphasise the brighter colours in the range)

Case 1: HDR Output = OFF >> The displayed image looks quite good due to the tonemapping being applied and increasing vibrancy of bright colours
Case 2: HDR Output = ON >> The displayed image looks quite washed out and greyed, with no real vibrancy - a much worse image than Case 1

I would have expected the exact opposite ?!?

So in case 2. The Unity docs suggest above is the correct way to handle it. Unity Auto tonemaps from the SDR image that is output from PPv2 to a HDR10 format for the display.

Can anyone confirm this is indeed the correct setup for HDR Output to a HDR10 display, or do I have the tonemapping somehow wrongly configured for case 2 ?

Another observation that may be relevant: HDR Output only works in Unity when the Windows primary display is set to HDR ON in Windows > otherwise Unity does not report HDR capability. And regardless of whether I use case 1 or 2 above, my display thinks its in HDR Mode. ie it doesn’t seem possible for Unity to really switch HDR Mode ON and OFF on the display even though I’m using Fullscreen Exclusive Mode, like some non-Unity games are able to do. Maybe thats by Unity design…

Just to make sure, HDROutputSettings.active returns true?

There is also some additional information here. I haven’t tried this personally, so unfortunately, I can’t tell you any more than this.

Found your problem. HDR Output is not supported in the built-in render pipeline:

yes HDROutputSettings.active is true indeed

and I thought HDR Output is supported in 2020.3… but yes it seems to have been deprecated in the current version… for some bizarre reason…

I’ll check into your other link… thanks for the hints

This page suggests that HDR Output should work in 2020.3

Feature comparison table | Universal RP | 10.9.0 (unity3d.com)

1 Like

Can anyone from Unity please confirm that HDR Output should work in 2020.3 so that I’m not chasing down a dead end…

…and also whether/why it is not supported in the current version. seems like a backwards step to me at least and would be good to understand why

It’s looking increasingly like a dead end… :frowning:

I guess I’ll have to abandon plans for HDR Output

@richardkettlewell Can you tell us which of the two doc pages is correct, please?

No - I have no idea. There is a link at the bottom of the manual pages called “Report a Problem”. If you click it and explain there is a contradiction in the docs pages, someone from the correct area will take a look.

Also, from experience, docs contradictions take around 5 years to get addressed, so don’t hold your breath.

I can at least confirm that HDR Output for Built In was a working feature at some point.

I haven’t tested new versions, but it seems like Unity removed the feature.

It still seems super odd to me how beneficial changes are not being done to Unity in fear of breaking someone’s workflow, but at the same time they just remove features without second thoughts.

Yeah, I’ve reported many documentation issues in the past few years and not a single one got addressed.
Thanks for the response, though.

Thanks for trying to bring some clarity guys, much appreciate it.

In 2020.3, HDR Output is definitely switching the output to the display. I can turn it ON and OFF and the displayed image is noticeably different. The main issue I have is that it looks infinitely better with it OFF than ON !!

Anyhow, since it looks like it’s been deprecated in built-in pipeline, I’ll not put more time into it.

On 2021.3.11, I can confirm that HDR output is working with the built-in renderer.

A few things to note:

You’ll need to(at least temporarily) make DirectX12 your first rendering API to see it in the Editor. You can easily move from SDR to HDR if you have two displays you can drag the Game window between. If it’s looking grey or washed out in the editor, this is likely the issue(not actually HDR). Note that DX11 HDR works fine in Standalone so you can remove DX12 when you’re not testing.

Secondly, make sure you’re outputting to a 10-bit swap chain, as the 16-bit swap chain doesn’t appear to work.

When connected to a HDR display, the backbuffer appears to be R16G16B16A16_SFloat.

When not connected, the backbuffer appears to be R8G8B8A8_SRGB.

They look quite different - you’d expect the Post Processing Color Grading to output something similar to either, but it seems that the LDR conversion happens after because the Post Processing stack resolves into a R16G16B16A16_SFloat regardless.

So I’ve had to create a separate post process profile for HDR/LDR and have balance them differently. I pick the profile based on whether HDROutputSettings shows it’s hooked up to a HDR display. The HDR output looks quite rich and good, so it feels like it’s worth pursuing?

My only remaining issue is with UI. On URP/HDRP it looks like they may have fixed Overlay canvases to “just work”, but with built-in I have yet to figure out a solution that looks good on both HDR and LDR screens. Converting textures to Linear looks great on HDR, and too bright on LDR, because Overlay draws directly into the backbuffer which is different in each case. Next up I’ll be experimenting with custom UI shaders to do the mapping. If anybody has any suggestions I’d love to hear them.

3 Likes