Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HDR output (outdated) #249

Closed
wants to merge 20 commits into from
Closed

Conversation

0x4E69676874466F78
Copy link
Collaborator

@0x4E69676874466F78 0x4E69676874466F78 commented Dec 2, 2021

Как включить

  1. В консоли ввести vk_hdr_output 1 либо в vk.cfg задать vk_hdr_output "1". Командная строка (+vk_hdr_output 1) пока нормально не поддерживается (подхватывает слишком поздно и требуется два запуска). Выйти из игры.

  2. Теперь не обязательно, но в случае проблем: проверить что в ОС включён HDR-режим (Пуск->Параметры->Система->Дисплей->Использовать HDR->Вкл).

  3. Запустить игру.

  4. При необходимости отрегируровать яркость через:

    • vk_hdr_output_manual_adjust_ui_down — яркость интерфейса
    • vk_hdr_output_manual_rtx_adjust_down — общая яркость изображения кроме addivite
    • vk_hdr_output_manual_rtx_adjust_additive_down — яркость текстур лампочек, вспышек, спрайтов
    • vk_hdr_output_manual_adjust_down — общая яркость для традиционного рендера (всё вместе)

    Потребуется перезапуск.
    Текущие значения рассчитаны на HDR400, на мониторах с HDR600 и HDR1000 картинка может быть слишком яркой.

Особенности

  • Работает как с лучами так и без, c лучами вау-эффекта больше, лучи ещё не до конца отнормированы потому что надо идти относительно конечного освещения, но уже смотрится интересно.
  • В традиционном рендере серьёзный компромисс, но есть идеи для улучшения.
  • Если HDR режим в винде не включен, то при vk_hdr_output 1 рендер его инициализирует, но только для монитора, требуется вручную включить в настройках винды HDR.
  • Для изменения настроек в реальном времени ещё не хватает корректного пересоздание рендерпасса и пушконстант (сейчас сделано через специализацию).

Что проделано

  • обновление на новую кодовую базу
  • переключение через vk_hdr_output 1|0
  • проверка оборудования
  • игнорирование vk_hdr_output 1 если оборудование не поддерживается
  • коррекция для меню
  • коррекция тонемаппинга для лучей
  • коррекция для традиционного вулкан-рендера
  • ручная настройка под мониторы с разной максимальной яркостью
  • автонастройка под мониторы с разной максимальной яркостью (не справлюсь без помощи)
  • перебор доступных цветовых пространств от монитора и выбор режима HDR. Сейчас жёстко забит VK_FORMAT_A2B10G10R10_UNORM_PACK32 + VK_COLOR_SPACE_HDR10_ST2084_EXT, есть другой вариант (я сначала пробовал его и он мне не понравился, но сейчас вижу в кваке решили использовать именно его) VK_FORMAT_R16G16B16A16_SFLOAT + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, этот другой вариант требует несколько иного подхода к данным. Помимо прочего есть ещё пачка других https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkColorSpaceKHR.html (типа VK_COLOR_SPACE_DOLBYVISION_EXT и VK_COLOR_SPACE_HDR10_HLG_EXT, хотя по характеристикам они совпадают с HDR10_ST2084) но моё оборудование их не поддерживает.
  • *_adjust_*_down поменять на max_nits, узнать константы соответствия с nit (для VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT это 80)
  • поддержка скриншотов
  • настройки через меню

ref_vk/vk_framectl.c Outdated Show resolved Hide resolved
@0x4E69676874466F78
Copy link
Collaborator Author

0x4E69676874466F78 commented Dec 2, 2021

Известная проблема: падает если нет нужного пространства при vk_hdr 1, попробую добавить обход. Исправил.

@0x4E69676874466F78 0x4E69676874466F78 marked this pull request as ready for review December 2, 2021 22:35
@0x4E69676874466F78 0x4E69676874466F78 marked this pull request as draft December 3, 2021 17:29
@0x4E69676874466F78 0x4E69676874466F78 marked this pull request as draft December 7, 2021 10:27
@0x4E69676874466F78 0x4E69676874466F78 changed the title HDR output HDR output 1 Dec 7, 2021
@0x4E69676874466F78 0x4E69676874466F78 changed the title HDR output 1 HDR output, part 1 Dec 7, 2021
change hdr* to hdr_output*
add new cvars for manual adjust HDR output
more correct HDR output for RTX
misc TODO for auto adjust (by VkHdrMetadataEXT)
@0x4E69676874466F78 0x4E69676874466F78 marked this pull request as ready for review December 7, 2021 16:31
@0x4E69676874466F78 0x4E69676874466F78 marked this pull request as draft January 22, 2022 22:20
@0x4E69676874466F78
Copy link
Collaborator Author

На данный момент пуллреквест сломан. Последний рабочий коммит 354a525

@0x4E69676874466F78
Copy link
Collaborator Author

0x4E69676874466F78 commented Jan 23, 2022

Исправил. Теперь с исправлениями на гамму ещё.
Но как оказалось не совсем доправил в ряде мест, картинка не совсем корректная (небо перенасыщенное, тени слишком тёмные).

@0x4E69676874466F78
Copy link
Collaborator Author

https://github.com/NVIDIA/Q2RTX/pull/159/files здесь есть код для скриншотов и для вычисления nit.
При этом с цветовыми пространствами для HDR там странно, завтра гляну как оно у них в игре работает.

@0x4E69676874466F78
Copy link
Collaborator Author

0x4E69676874466F78 commented Jan 24, 2022

Похоже (выявлено эмпирически) преимущество VK_FORMAT_R16G16B16A16_SFLOAT + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT над VK_FORMAT_A2B10G10R10_UNORM_PACK32 + VK_COLOR_SPACE_HDR10_ST2084_EXT это что не надо делать гамма-коррекцию в конце и этот режим хорошо работает без тонемаппера (точнее даже плохо работает с тонемапперами).
Но VK_FORMAT_A2B10G10R10_UNORM_PACK32 кажется оптимальнее потому что надо гонять 30 бит вместо 48, поэтому думаю поддерживать оба режима.
https://ourmachinery.com/post/supporting-native-hdr-monitors/

@0x4E69676874466F78 0x4E69676874466F78 changed the title HDR output, part 1 HDR output Sep 9, 2023
@0x4E69676874466F78 0x4E69676874466F78 changed the title HDR output HDR output (outdated) Dec 13, 2023
@0x4E69676874466F78
Copy link
Collaborator Author

Закрыто в пользу #727

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants