Тестовая версия 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.
|