Distance Field Ambient Occlusion в Unreal Engine 4

0
0
Применение Distance Field Ambient Occlusion ue4
Тень для Movable Sky Lights обеспечивается за счет использования Signed Distance Field Volumes, предварительно вычисленных вокруг каждой жесткой меши, для создания среднего масштаба окклюзии окружения (Ambient Occlusion). В Unreal Engine 4 (UE4) это называется Distance Field Ambient Occlusion (DFAO). Он поддерживает динамические изменения сцены; жесткие меши могут быть перемещены или скрыты, и это повлияет на окклюзию. В отличие от  Screen Space Ambient Occlusion (SSAO), окклюзия вычисляется из окклюдеров мирового пространства, поэтому нет никаких артефактов из отсутствующих данных за пределами экрана.

Это динамическое решение AO не будет работать для всех проектов, так как оно имеет некоторые инвазивные ограничения, которые позволяют поддерживать динамические изменения сцены. В частности, поддерживается только незначительное неравномерное масштабирование (хлопок). Кроме того, большие статик меши дают результаты низкого качества, потому что текстура небольшого объема отображается на каждый объект.

Настройка сцены

Для этой функции требуется, чтобы Generate Mesh Distance Fields был включен в настройках проекта в разделе RenderingДополнительную информацию смотрите на странице Mesh Distance Fields.

Чтобы включить Distance Field Ambient Occlusion, перетащите Sky Light в сцену и установите ее мобильность на Movable.

Для пошагового руководства следуйте документации по Distance Field Ambient Occlusion, чтобы узнать больше.

Sky Light

Компонент Sky Light позволяет настроить различные параметры, которые можно найти в разделе Distance Field Ambient Occlusion. Это сравнение некоторых настроек, которые вы можете регулировать:

Контраст Окклюзии 0 ue4Контраст Окклюзии: 0 

Контраст Окклюзии 1 ue4Контраст Окклюзии: 1

 

Минимальная Окклюзия 0 ue4Минимальная Окклюзия: 0

Минимальная Окклюзия 1 ue4Минимальная Окклюзия: 1
Контраст ОкклюзииМинимальная Окклюзия

 

Оттенок Окклюзии черный ue4Оттенок Окклюзии: черный 

Оттенок Окклюзии красный ue4Оттенок Окклюзии: красный

Оттенок Окклюзии

 

Дополнительную информацию о настройках Sky Light и дополнительных примерах читайте на странице справочной информации

Представление сцены

Режим просмотра для поля расстояния AO позволяет вам видеть, как DFAO смотрит на уровень, независимо от любого другого освещения, которое происходит.

Вы можете визуализировать Distance Fields, которые отражают окклюзию окружающего пространства сцены, используя режим просмотра Level Viewport для Distance Fields Ambient Occlusion, выбрав Show > Visualize > Distance Fields Ambient Occlusion.

Меню включения визуализации ue4Окружающая окклюзия UE4

Хотя в этом режиме просмотра единственным параметром Sky Light,который будет иметь какой-либо эффект, является Макс. Расстояние окклюзии.

Качество

Качество Distance Field AO определяется разрешением Mesh Distance Field, которое оно представляет. Так как AO очень мягко затеняет, поэтому, даже если поверхности не представлены должным образом, окклюзия дальше от поверхности будет точной. Это часто не заметно при окклюзии в небе. Однако убедитесь, что более крупные детали меши хорошо представлены в Mesh Distance Field для получения хороших результатов. Используйте визуализацию Mesh Distance Field Visualization для проверки качества.

Дополнительную информацию о качестве Mesh Distance Field читайте на странице Distance Fields.

Результаты Окклюзии

Diffuse – Диффузный

Distance Field AO создает изогнутую нормаль (направление наименьшей окклюзии), которая используется для изменения расчета рассеянного небесного освещения (наряду с коэффициентом окклюзии).

Без Distance Field AO ue4Без Distance Field AO

С Distance Field AO ue4С Distance Field AO

В этом примере это уровень Fortnite в полдень. В Fortnite игроки могут сбить любую стену, пол или потолок и построить новые, поэтому освещение должно быть соответствующим образом обновлено. Distance Field AO поддерживает эти типы динамических изменений на уровне вокруг вас.

В этом примере с уровня в Fortnite, АО обновляется в реальном времени, поскольку активы скрыты или перемещены в Редакторе.

Specular – Зеркальный

Distance Field AO также обеспечивает приблизительную зеркальную окклюзию на Sky Lights. Это вычисляется путем пересечения конуса направленной окклюзии с конусом отражения (размер которого зависит от резкости материала).

Без Зеркальной Окклюзии ue4Без Зеркальной ОкклюзииЗеркальная Окклюзия ue4Зеркальная Окклюзия

Зеркальная окклюзия на трубах.

По умолчанию ненаправленный AO применяется к зеркальному. Вы можете использовать r.AOSpecularOcclusionMode, чтобы получить более точные результаты окклюзии, чем метод по умолчанию, пересекая конус отражения с незакрепленным конусом, созданным DFAO. Обратите внимание, что это может привести к артефактам выборки DFAO.

Foliage – Листва

Для актеров, нарисованных с помощью Foliage Tool, вы должны сначала включить опцию Affect Distance Field Lighting в настройках инструмента.опция Affect Distance Field Lighting ue4

Несмотря на то, что Distance Field AO работает на поверхностях, оно все равно может обрабатывать листву, где много маленьких листьев объединяются в листы. Наилучшие результаты можно получить, включив Two-Sided Distance Field Generation для объектов типа листвы из опций Build Settings в Редакторе статик меши. Это смягчит вычисленную окклюзию.

В параметрах Sky Light увеличьте Min Occlusion, чтобы не допустить, чтобы внутренние части актива полностью чернели.

опция Two-Sided Distance Field Generation UE4

Это пример, когда DFAO включен и использует Two-Sided Distance Field Generation:

Только Screen Space AO ue4Только Screen Space AODistance Field AO на листве ue4Distance Field AO на листве

Для объектов Foliage, использующих LOD (Уровни детализации), вы можете столкнуться с некоторыми проблемами с Distance Field AO, которое вызывает чрезмерную окклюзию. Это происходит, когда Mesh Distance Field остается точным на дальних расстояниях, но уровень LOD использует нижний счет треугольника и может сокращаться внутри сгенерированного Mesh Distance Field.

Чтобы бороться с этим, вы можете использовать World Position Offset на этих LOD, чтобы вытащить вершины за пределы Distance Field. Как правило, небольшое смещение к камере достаточно эффективно, чтобы разрешить артефакт. Для рекламных щитов используйте функцию Pixel Depth Offset, чтобы создать допустимые значения глубины, которые лучше представляют собой оригинальную трехмерную треугольную меш. Эта техника использовалась в демо-версии GDC «A Boy and His Kite» (Мальчик и его Воздушный Змей), в которой использовались Distance Fields для дальних расстояний.

Без Pixel Depth Offset ue4Без Pixel Depth Offset

Pixel Depth Offset ue4Pixel Depth Offset

Билборды с отдаленным деревом, показывающие чрезмерную окклюзию. Используйте Pixel Depth Offset и Skylight Min Occlusion, чтобы уменьшить чрезмерную окклюзию.

Landscapes – Пейзажи

Пейзажи используют heightfield (поле высоты) для своего представления вместо Mesh Distance Field. Для этого используется приблизительное пересечение конуса, которое вычисляется против пикселей с разрешением высоты, не имеющих представления Distance Field, для получения окклюзии. Тем не менее, нет тени для затенения или Distance Field. Вместо этого ландшафты должны использовать Far Shadows с затенением каскадных теневых карт (Cascaded Shadow Maps – CSM) для дальних расстояний.

Режим визуализации DFAO, показывающий ландшафтную окклюзию.

Производительность

Стоимость Distance Field AO – это, прежде всего, графическая память и видеопамять. DFAO оптимизирован таким образом, что он может работать на ПК со средним спектром, PlayStation 4 и Xbox One. В настоящее время он имеет гораздо более надежную стоимость, поэтому он в основном постоянный (с небольшой зависимостью от плотности объекта).

В случаях со статической камерой и в основном плоскими поверхностями DFAO в 1,6 раза быстрее по сравнению с предыдущими реализациями. В сложных сценах с листвой и быстро движущейся камерой последние оптимизации в 5,5 раз быстрее. Стоимость Distance Field AO на PlayStation 4 для полной игровой сцены составляет около 3,7 мс.

Оптимизации

Ниже приведены некоторые из оптимизаций, которые были добавлены в DFAO, чтобы сделать его быстрее, эффективнее и улучшить внешний вид.

Общие улучшения

С Unreal Engine 4.16 это некоторые улучшения для DFAO с результатами тестирования с использованием PlayStation 4:

Оптимизация

Оригинальная Стоимость (мс)Новая стоимость (мс)Экономия (мс)
Алгоритм отбраковки изменился, чтобы создать список пересекающихся экранной плитки для каждого объекта, а не наоборот. Каждое пересечение фрагмента / объекта получает свою группу потоков трассировки конуса, поэтому волновые фронты намного меньше и планируются стать лучше.3,633,480,15
Медленные инструкции во внутреннем цикле были заменены быстрыми приближениями.3,253,090,16
Преобразование было перенесено из внутреннего цикла из мира в местное пространство (позиция образца, построенная из локального пространственного положения + направление).3,093,040,05
Вычисляется шейдер для ClearUAV. 3,042,620,42

Мягкая выборка

Прежде чем использовать мягкую выборку для DFAO, была использована адаптивная выборка, которая означала, что плоские поверхности делали меньше работы по сравнению с более плотными сценами со многими поверхностями, такими как листва. Это также означало, что в чистых средах может быть много пятен.

В приведенном ниже примере вычисления AO теперь достаточно быстры, чтобы избавиться от адаптивной выборки, поэтому окклюзия намного более плавная.

Адаптивная выборка окружающей окклюзии ue4Адаптивная выборкаМягкая выборка окружающей окклюзии ue4Мягкая выборка
Вид сцены
 

1Адаптивная выборка окружающей окклюзии ue4Адаптивная выборка

2Мягкая выборка окружающей окклюзии ue4Мягкая выборка
Визуализация DFAO

Для гладкой выборки требуется более длинный фильтр истории, который может способствовать «преследованию» (или следу за движущимся объектом), особенно когда движущиеся теневые ролики перемещаются. В Unreal Engine 4.16 и более поздних версиях Ghosting был улучшен за счет того, что временной фильтр временного поля сохраняет значение достоверности. Он используется для отслеживания утечки окклюзии во время всплывающей подсказки, а затем быстрее сбрасывает эти пропущенные значения через историю. В целом, это должно помочь уменьшить ореолы, которые могут произойти, когда камера или динамический объект движутся быстро.

Global Distance Fields

Global Distance Field – это Distance Field с низким разрешением, которое использует окклюзию с Signed Distance Fields на ваших уровнях во время наблюдения за камерой. Он создает кеш Mesh Distance Fields для каждого объекта и объединяет их в несколько объемных текстур, расположенных вокруг камеры, называемых clipmaps. Необходимо обновлять только новые видимые области или объекты, затронутые изменением сцены, поэтому композиция (состав) не стоит дорого.

Клипмап (clipmap) разделяется на четыре фрагмента вокруг камеры, которые обновляются только там, где это необходимо, что может произойти, когда движение камеры обнаруживает новый срез, или объект никогда не перемещается, что заставляет его границы стать грязными. Средняя стоимость его поддержания остается близкой к нулю, однако в худшем случае стоимость обновления может быть выше при выполнении чего-то вроде телепорта.

Clipmap визуализирует размер текселя в клипмапах, причем каждый клипмап представлен другим цветом.

Более низкое разрешение объекта Distance Field означает, что его можно использовать для всего, но при вычислении дорожек конуса для окклюзии неба они отбираются вблизи точки затенения, тогда как Global Distance Field отбирается дальше.

Вы можете визуализировать Global Distance Field в окне просмотра, нажав Show > Visualize > Global Distance Field

Ниже приведено сравнение визуализации Mesh Distance Field для каждого объекта по сравнению с визуализацией Global Distance Fields, которая объединяет их в клипмапы на основе вида камеры и расстояния.

Визуализация Mesh Distance Field UE4Визуализация Mesh Distance Field

Визуализация Global Distance Fields ue4Визуализация Global Distance Fields

Global Distance Field является более низким разрешением, чем его сопоставление сторон Distance Fields, что делает Global Distance Fields неточными вблизи поверхностей. Когда есть следы конуса, Distance Field объекта используется вблизи начала окклюзионного (окружающего) конуса и Global Distance Field для остальной части пути, что дает лучшие результаты, потому что вы получаете точную самоокклюзию и эффективные дорожки дальнего расстояния. Из-за этого, окклюзия в небе дает в пять раз больше прироста производительности, так как эффективное влияние на расстояние действия объекта резко уменьшается.

Ограничения

Ограничения техники

  • Предоставляется только Ambient Occlusion, которая отличается от окклюзии Sky Occlusion, поскольку она имеет ограниченное расстояние блокировки.
  • Тени отбрасываются только из жестких мешей. Для скелетных мешей используйте Capsule Shadows для косвенно освещенных областей.

Ограничения текущей реализации (могут быть улучшены в будущем)

  • Обновления AO от динамических изменений сцены немного отстают, поскольку работа распространяется по нескольким кадрам, что приводит к смещению окклюзии по мере создания новых образцов. Это было улучшено в Unreal Engine 4.16 и более поздних версиях, так как временный фильтр Distance Field сохранил точное значение, которое используется для отслеживания утечки окклюзии во время всплывающей подсказки, а затем быстрее сбросить эти пропущенные значения через историю. Это помогает уменьшить ореол, который происходит, когда камера движется.
  • Большие объекты уменьшат разрешение Distance Field и приведут к ухудшению качества AO, поскольку вольюм текстура отображается на каждую меш.

Дополнительное ограничение Distance Field смотрите на странице Distance Fields.

Советы и приемы

Cheap Bounce Light

Если снять отметку Lower Hemisphere is Solid Color на небе и рисовать в каком-то грунтовом цвете в кубмапе, вы можете получить то, что похоже на освещение отскока Солнца, без каких-либо дополнительных затрат. Это может привести к утечке света в помещении, поскольку оно не учитывает затенение направленного света, но может быть эффективным для наружных сцен.