Тема: Back to the future
Показать сообщение отдельно
Старый 15.05.2023, 20:03   #232
yt2
Местный
 
Регистрация: 18.01.2012
Сообщений: 814
По умолчанию

Тестовая версия 2.1.2.7
Добавление ReversedZ тестирования буфера глубины.
Линк на обновление как обычно в первых постах темы

Довольно передовая техника повышения точности буфера глубины (по меркам OpenGL конечно. Появилась в районе 2012 года).
Из-за архитектурных особенностей OpenGL проигрывает точности буфера глубины DirectX. Даже при переходе с 24 битного Z-буфера на 32 float Z-буфер OpenGL точность выполнения тестирования не возрастает (в отличие от DX). Это является одной из причин склонности к проявлениям мерцания дальних объектов в OpenGL.
Заметно повысить точность расчётов позволяет методика обратного буфера глубины с изменённым диапазоном. Для реализации этого требуется поддержка OpenGL 4.5 или поддержка расширения "GL_ARB_clip_control".
В этом случае становится возможным включить данную технику параметром
UseReversedZ=1 (в файле conf.ini, секция [Render_OpenGL]. Параметр автоматически добавится после первого запуска)
Особенно замечу, что включение данной техники становится возможным при поддержке оборудования. Если ваше оборудование не поддерживает эту возможность, то параметр UseReversedZ=1 будет проигнорирован, и вам будет доступен только параметр переключения с 24 на 32 битный Z-буфер.

Теперь для буфера глубины в конфиге присутствует два (новых) параметра Use32bitZBuffer и UseReversedZ
Их комбинации позволяет выбрать 1 из 4 доступных режима:

Use32bitZBuffer=0 + UseReversedZ=0 Стандартный 24 битный int Z-буфер
Use32bitZBuffer=1 + UseReversedZ=0 Стандартный 32 битный float Z-буфер
Use32bitZBuffer=0 + UseReversedZ=1 Обратный 24 битный int Z-буфер
Use32bitZBuffer=1 + UseReversedZ=1 Обратный 32 битный float Z-буфер

Из-за особенностей OpеnGL, только Обратный 32 битный Z-буфер демонстрирует заметно лучшую точность.
Комбинации Стандартный 32 и Обратный 24 ничем особо заметным от классического Стандартный 24 в лучшую сторону не отличаются.

Небольшим огорчением является то, что данные техники могут потребовать дополнительной настройки под каждый используемый вариант.
Сейчас объясню, что я имею ввиду...

В конфиге также присутствуют два параметра PolygonOffsetFactor и PolygonOffsetUnits
Их правильная настройка также СУЩЕСТВЕННО сказывается на мерцинии дальних объектов. При некорректной настройке этих параметров мерцать могут объекты расположенные очень близко к камере игрока. Поэтому корректные настройки этих значений очень важны.
Жаль, но числовые значения этих параметров отличаются для каждой из комбинаций буфера глубины и выбранных методик тестирования

Для начала я приведу значения которые могут считаться стартовыми.
Эти значения вы можете проверить на своём оборудовании. Но не забудьте сделать резервные копии файла conf.ini на всякий случай!

;Это дефолт. Можно использовать как базовые значения
;24 и 32 битные стандартные Z-буфера
PolygonOffsetFactor=-0.0625
PolygonOffsetUnits=-1.0

;24 бит ReversedZ
PolygonOffsetFactor=0.0625
PolygonOffsetUnits=1.0

;32 бит ReversedZ
PolygonOffsetFactor=0.0
PolygonOffsetUnits=1.0

Подбор корректных параметров для каждой комбинации техник возможно займёт какое-то время.
В следующем посте я опишу технологию подбора данных значений и их проверка в игре.

Последний раз редактировалось yt2; 15.05.2023 в 21:29.
yt2 вне форума   Ответить с цитированием