w23 / xash3d-fwgs

Vulkan Ray Tracing fork of Xash3D FWGS engine. Intended to be merged into master at some point in the future.
160 stars 16 forks source link

HDR output for HDR display #121

Open 0x4E69676874466F78 opened 2 years ago

0x4E69676874466F78 commented 2 years ago

Разная информация https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdc2017/Presentations/Fry_Alex_HighDynamicRange.pdf https://www.youtube.com/watch?v=7z_EIjNG0pQ https://github.com/Unity-Technologies/PostProcessing/blob/v2/PostProcessing/Shaders/Colors.hlsl https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/gameworks/hdr/UHDColorForGames.pdf https://ieeexplore.ieee.org/document/7291452

Требуется (устарело) [x] vk_hdr 1|0 для вкл/выкл HDR. #249 [x] #202 [ ] нормализация или более правильный этап с тонемаппингом, возможно автоматом поможет #193 Если после текущего тонемаппинга добавляю `/ 1.3` то смотрится вполне сносно, но взрывы уже не такие яркие, видимо надо будет взрывам более задирать светимость в конфиге (когда будет). #249 [x] определять перед нами HDR монитор или нет, если нет то блокировать vk_hdr #249 [ ] починить скриншоты для HDR (понятия не имею как, но есть инфа в https://github.com/w23/xash3d-fwgs/pull/249#issuecomment-1019382385 )

Дополнительная инфа: https://on-demand.gputechconf.com/siggraph/2016/presentation/sig1611-thomas-true-high-dynamic-range-rendering-displays.pdf https://developer.nvidia.com/hdr-display-sample

https://gpuopen.com/learn/using-amd-freesync-2-hdr-color-spaces/

https://developer.qualcomm.com/sites/default/files/docs/adreno-gpu/developer-guide/tutorials/android/hdr10.html

Related: #193

0x4E69676874466F78 commented 5 months ago

Заметки: При VK_FORMAT_R16G16B16A16_SFLOAT(97)+VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT(1000104002) получается автоматическая гамма-коррекция, более того там есть откуда-то тонемаппинг! Хотя цвета от этого немного плывут в ряде сцен. При VK_FORMAT_A2B10G10R10_UNORM_PACK32(64) VK_COLOR_SPACE_HDR10_ST2084_EXT(1000104008) нужно производить специальную коррекцию через функцию PQ, тонемаппинг сам не производится, но если его произвести мы теряем в яркости и получается LDR, то есть нужен особый тонемаппинг для HDR или после него надо домножать на что-то. Вот картинки в архиве, здесь в 8 бит сложно передать, в наивном виде они выглядят одинаково (обрезается диапазон). hl hdr test.zip

0x4E69676874466F78 commented 5 months ago

Я разобрался для VK_FORMAT_A2B10G10R10_UNORM_PACK32(64) VK_COLOR_SPACE_HDR10_ST2084_EXT(1000104008) как раз нужна функция applyHuePreservingShoulder, тогда вид становится правильный в ярких областях, ранее я тестировал её но не видел разницы, но с дураты разницу не там смотрел. Пока я прихожу к выводу что тонемапперы по большей части не нужны для HDR и это прибалуда для LDR.

0x4E69676874466F78 commented 5 months ago

Из известной информации мы ещё можем сходить в проприетарные протоколы нвидии и амд, достав максимальную яркость монитора оттуда, но код будет грязный-муторный, так что я решил что лучше через настройки указать пик яркости монитора самому. Можно создать предустановки на HDR400, HDR600, HDR1000 помимо тонкой настройки.