vkBasalt (Vulkan post processing)

Теги

Термин «постобработка» (vkBasalt) используется в видео / игровой индустрии, для улучшения качества методов обработки изображений.

vkBasalt - это слой постобработки Vulkan для изменения визуальной графики игр. Главное слово "изменения", а не "улучшения". Основной разработчик кода vkBasalt, позиционирует это как, улучшения визуальной графики игр, опираясь на личные нужды. Действительно в рабочей среде GNU/Linux, мало похожих программ и решений. Нативные игровые проекты минимальны по решениям постобработки, по причине "меньшего зла багов". Давайте разберем, нужен или нет, очередной "костыль" в системе?

Разбирать ситуацию с видеодрайверами в GNU/Linux, смысла нет. Тема больная и вечная. Основное отношения разработчиков и производителей к подобным ситуациям, можно выразить в одном смысле. "Зачем вам под управлением GNU/Linux игры? Или? это ОС для нищеты и бомжей". Автор не преувеличивает, по заявлением Nvidia, попытки реализовать систему трассировки лучей под API Vulkan, это "Бомжь RTX". Конечно, в мире и таком благе социальной жизни, купить видеокарту за 1000 долларов, не представляет проблем :-) От лирики, к делу...

В настоящее время поддерживаемые эффекты в vkBasalt:

  • Контрастный  Adaptive Sharpening.
  • Denoised Luma Sharpening.
  • Быстрое сглаживание, Approximate Anti-Aliasing.
  • Усиленное Subpixel Morphological Anti-Aliasing.
  • 3D цвет, LookUp Table.
  • Можно использовать шейдеры от Reshade Fx.

Список не большой, но для начала хватит. Главное при развитии кода в API Vulkan, мы получим еще больше функций, на это не кто не обращает внимание.

Изначально нужно определиться, зачем вам использовать vkBasalt. Производительность в играх, через костыль Proton (WineHQ), он не прибавит. Хотя +10% FPS, можно прибавить, например, отключить тупые настройки FXAA от разработчика (минимум, средне, и тд), и добавить максимум FXAA, с точностью до сотой процента. Но, это не повышение производительности, это костыль. Схемой и расчетом сглаживания FXAA должен управлять изначально основной видеодрайвер в системе. Если вам надо убрать "графику вырви глаз", вроде Корейских игр, античит система не позволяет использовать post processing, старые игры "дают на экране много мыла", тогда использовать необходимо.

Первый шаг, ваш монитор. Возможно автор вас разочарует. Есть смысл использования vkBasalt, только на IPS мониторах. Причина проста, угол изображения, цвета (особо черный цвет), встроенные настройки для монитора. Поэтому, изначально займитесь настройкой изображения на IPS мониторе. Например...

  • Установите для своих глаз и нужд, цветовую схему.
  • Откалибруйте насыщение черного цвета.
  • Включите систему контроля Motion Blur.
  • Включите систему FreeSync (если есть смысл).

Второй шаг, настройка видеодрайвера. Например как в Nvidia X Server Settings, так и в самом Х11 (конфигурационные файлы). Тут все для ваших нужд и задач.

  • Отключите Vblank.
  • Отключите Allow Flipping.
  • Включите максимальную производительность для изображений.
  • Отключите перезапись драйвером Anti-Aliasing и Anisotropic.
  • Отключите на рабочем столе Composite (заметки для Arch Linux).
  • Проверить, включить, Dithering controls (настройка для себя).
  • Проверить, включить, настроить, цвет и отклик баланса цветов (настройка для себя).
  • Проверить сам, конфигурационный файл запуска сервера Х11.

У автора есть свои настройки сервера Х11 по нуждам, пример...

# cat /etc/X11/xorg.conf.d/90-mhwd.con

Section "Device"

        Identifier  "card_nvidia"

        Driver      "nvidia"

        BusID       "PCI:1:0:0"

        Option      "TripleBuffer" "On"

        Option      "metamodes" "nvidia-auto-select +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}"

        Option      "EmulatedOverlaysThresholdValue" "9"

        Option      "XvmcUsesTextures" "true"

        Option      "IndirectMemoryAccess" "on"

        Option      "NoRenderExtension"    "off"

        Option      "AllowSHMPixmaps"      "on"

EndSection  

Третий шаг, сборка vkBasalt. Не каких AUR извращений, flatpack грязи. Собрать для своей системы, руками.

Зависимости при сборке:

  • GCC >= 9.
  • X11 development files.
  • glslang.
  • SPIR-V Headers.
  • Vulkan Headers.

В этих заметках используется --prefix=/usr, что обычно не рекомендуется, так как vkBasalt будет устанавливаться в каталогах, предназначенных для менеджера пакетов. Альтернативой является не установка префикса, а установка в /usr/local. Но вы должны убедиться, что ld найдет библиотеку, так как /usr/local, скорее всего, не находится в пути по умолчанию.

# git clone https://github.com/DadSchoorse/vkBasalt.git

# cd vkBasalt

Сборка 64bit:

# meson --buildtype=release --prefix=/usr builddir

# ninja -C builddir install

Сборка  32bit (игры в Steam и Proton) Убедитесь, что PKG_CONFIG_PATH=/usr/lib32/pkgconfig и --libdir=lib32 корректны для вашего дистрибутива и при необходимости измените их. На дистрибутивах, основанных на Debian, вам нужно заменить lib32, например, на lib/i386-linux-gnu:

# ASFLAGS=--32 CFLAGS=-m32 CXXFLAGS=-m32 PKG_CONFIG_PATH=/usr/lib32/pkgconfig meson --prefix=/usr --buildtype=release --libdir=lib32 -Dwith_json=false builddir.32

# ninja -C builddir.32 install

Возможные ошибки, пример отсутствия пакетов для сборки:

FAILED: src/reshade/libreshade.a.p/effect_codegen_spirv.cpp.o 

Не хватает пакета для сборки, spirv-headers. Обратите внимание, у вас должен быть настроен и работать API Vulkan. Обратитесь к вашему Wiki, дистрибутива. Быстро проверить работу Vulkan 3D приложений можно командой (есть кубик?):

# vkcube

Четвертый шаг, настройка vkBasalt.conf (файл конфигурации который будет отвечать за вывод изображения). Тут мы с вами можем написать целую книгу, от методов отображения шейдеров, LUT схемы цветов, расширения API Vulkan и тд. Поэтому кратко и по делу, обратитесь к документации по созданию шейдеров, прочтите схему построения LUT цветов.

Создайте или скопируйте из исходного кода в GIT, папка /vkBasalt/config/, файл vkBasalt.conf в домашнюю рабочую папку. Например основной файл vkBasalt.conf, будет находиться в...

/home/fsb-bunker-otdel-k/.config/vkBasalt/vkBasalt.conf

Проверим работу vkBasalt (есть кубик?):

ENABLE_VKBASALT=1 vkcube

vkBasalt info:  config file: /home/fsb-bunker-otdel-k/.config/vkBasalt/vkBasalt.conf

vkBasalt info:  effects = smaa:cas:dls:fxaa

vkBasalt info:  reshadeTexturePath = /home/fsb-bunker-otdel-k/.config/vkBasalt/Textures/

vkBasalt info:  reshadeIncludePath = /home/fsb-bunker-otdel-k/.config/vkBasalt/Shaders/

vkBasalt info:  depthCapture = off

vkBasalt info:  toggleKey = Home

vkBasalt info:  casSharpness = 0.6

vkBasalt info:  dlsSharpness = 0.7

vkBasalt info:  dlsDenoise = 0.22

vkBasalt info:  fxaaQualitySubpix = 0.75

vkBasalt info:  fxaaQualityEdgeThreshold = 0.125

vkBasalt info:  fxaaQualityEdgeThresholdMin = 0.0312

vkBasalt info:  smaaEdgeDetection = luma

vkBasalt info:  smaaThreshold = 0.05

vkBasalt info:  smaaMaxSearchSteps = 32

vkBasalt info:  smaaMaxSearchStepsDiag = 16

vkBasalt info:  smaaCornerRounding = 25

vkBasalt info:  lutFile = /home/fsb-bunker-otdel-k/.config/vkBasalt/Textures/lut.png

Пятый шаг, редактирование vkBasalt.conf, тут мы с вами можем опять написать целую книгу, поэтому по делу.

Для каждого игрового проекта, создавайте свой vkBasalt.conf (копировать в папку основного бинарного файла запуска игры).

Установка минимального набора Shaders и Textures.

https://github.com/crosire/reshade-shaders

Копируем готовые решения и папки в папку пользователя, /home/fsb-bunker-otdel-k/.config/vkBasalt/. Указываем в vkBasalt.conf, пути к папкам:

reshadeTexturePath = "/home/fsb-bunker-otdel-k/.config/vkBasalt/Textures/"

reshadeIncludePath = "/home/fsb-bunker-otdel-k/.config/vkBasalt/Shaders/"

lutFile = /home/fsb-bunker-otdel-k/.config/vkBasalt/Textures/lut.png"

Указать какие изменения в графике и расширения мы будем использовать:

effects = smaa:cas:dls:fxaa

Добавляем свой шейдер, через переменную:

4xgls = /home/fsb-bunker-otdel-k/.config/vkBasalt/Shaders/4xgls_good.fx

Помним, дописать в настройку разрешенных эффектов:

effects = smaa:cas:dls:fxaa:4xgls

В целом все описание есть в самом vkBasalt.conf, прочтите страницу разработчика.

Шестой шаг, калибровка для себя и игрового проекта, калибровка... калибровка... калибровка, настройка :-)

Пример файла vkBasalt.conf для игрового проекта ИЛ-2 Штурмовик: Великие Сражения (файл конфигурации обрезан, помним о настройках графики в самой игре, сбросить четкость поверхностей в null).

../steamapps/common/IL-2 Sturmovik Battle of Stalingrad/bin/game/vkBasalt.conf

effects = cas:dls:lut:fxaa

depthCapture = off

casSharpness = 0.1

dlsSharpness = 0.1

dlsDenoise = 0.14

fxaaQualitySubpix = 0.70

fxaaQualityEdgeThreshold = 0.125

fxaaQualityEdgeThresholdMin = 0.0833

smaaEdgeDetection = luma

smaaThreshold = 0.04

smaaMaxSearchSteps = 32

smaaMaxSearchStepsDiag = 16

smaaCornerRounding = 30

Дополнительно стоит обратить внимание на lut.png файл, и его цвета. Уделите этому факту внимание, возможно в будущем мы к этому вернемся. Дополнительно полезно в реализации по данной тематики (гироприцелы на любом самолете и игровом проекте).


Поддержка depth buffer в vkBasalt пока не готова, в разработке.