Mesh Distance Fields в Unreal Engine 4

0
4
Mesh Distance Fields в Unreal Engine 4

Unreal Engine 4 (UE4) использует силу Distance Fields для динамической окклюзии окружающего пространства и затенения для актеров Static Mesh в ваших играх. В дополнение к этому, представление Mesh Distance Field Актера может использоваться для других функций, таких как столкновения частиц GPU или даже с помощью Редактора Материалов для создания карт динамического потока и многое другое.

Продолжайте читать ниже, чтобы узнать, как Mesh Distance Fields работают в UE4, и некоторые способы, которыми вы можете использовать его в своих играх.

Как это работает?

Для представления поверхностей статик меши используется Signed Distance Field (SDF). Он работает, сохраняя расстояние до ближайшей поверхности в объемной текстуре. Для каждой точки на внешней поверхности меши считается положительное расстояние, а любая точка внутри меши сохраняет отрицательное расстояние. В приведенном ниже примере положительные расстояния отслеживаются и сохраняются для представления дерева в дальнейшем.Distance Field UE4

Первое свойство SDF, которое делает его нужным, заключается в том, что при трассировке луча вы можете спокойно пропустить пустое пространство, поскольку расстояние до ближайшей поверхности уже известно (это иногда называют Sphere Tracing). Это позволяет определять пересечения с помощью небольшого числа шагов. По лучам, прослеживающим поле расстояния, получается результат видимости, что означает, что если луч пересекает меш, свет затем будет затенен.Трассировка луча UE4

Второе свойство, которое делает SDF полезным, заключается в том, что при прослеживании луча, отслеживая самое близкое расстояние от луча, проходящего через окклюзирующий объект, можно вычислить приблизительное пересечение конуса без каких-либо дополнительных затрат. Это приближение позволяет делать очень мягкие тени области и окклюзию неба с использованием distance fields. Это свойство является ключевым для таких функций, как Distance Field Ambient Occlusion, поскольку небольшое количество конусов может вычислять мягкую видимость для всего полушария точки приемника.Трассировка конуса UE4

Вы можете прочитать далее об использовании Distance Fields для освещения здесь.

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

Каждый уровень, который вы создаете, состоит из всех этих Mesh Distance Fields для ваших размещенных Актеров. Когда поля Mesh Distance Fields генерируются, они выполняются так «оффлайн», используя трассировку треугольника, которая сохраняет результаты в текстуре вольюм. Из-за этого генерация Mesh Distance Fields не может быть выполнена во время выполнения. Этот метод вычисляет лучи поля подписи по всем направлениям, чтобы найти ближайшую поверхность и хранит эту информацию.

Вы можете визуализировать Mesh Distance Fields, которые представляют вашу сцену, используя окно просмотра и выбрав Show > Visualize > Mesh Distance Fields.

Меню для включения визуализации UE4Меню для включения визуализацииВизуализация Mesh Distance Fields UE4Визуализация Mesh Distance Fields

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

Качество

Качество представления Mesh Distance Field контролируется его объемным разрешением. Это можно изменить, используя Distance Field Resolution Scale в настройках сборки Static Mesh Editor.Качество представления Mesh Distance Field UE4

Качество Mesh Distance Field будет лучше всего для уровней, которые построены из мешей с одинаковым размером, так как большие сетки имеют тенденцию создавать много ошибок. Например, меши в Fortnite либо соответствуют сетке, либо являются реквизитами, расположенными вокруг частей уровня, что дает наилучшие результаты с небольшими ошибками. Ландшафты обрабатываются отдельно по heightfields и не зависят от разрешения Distance Field.

 

Исходная Меш ue4Исходная Меш

 

 

Разрешение маленькое Distance Field ue4Разрешение слишком маленькое, важные детали утеряны

 

Разрешение Distance Field увеличено ue4Разрешение увеличено, представлены важные детали

Разрешение вашего Mesh Distance Field должно быть достаточно скорректировано, чтобы фиксировать важные функции. По мере увеличения разрешения меши объем памяти Mesh Distance Field также увеличится. В редакторе Static Mesh вы можете увидеть размер Mesh Distance Field, указанный в левом верхнем углу окна просмотра.размер Mesh Distance Field UE4

Когда Mesh Distance Field создается, углы округляются по разрешению. Это может быть компенсировано увеличением его разрешения, но в большинстве случаев не должно быть проблемой в зависимости от сложности меши. Максимальный размер вольюм текстуры, который может иметь одна меш, составляет 8 мегабайт с разрешением 128x128x128.

Quality Corners1 ue4углы меши в distance fields ue41 углы меши в distance fields ue4

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

Global Distance Field

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

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

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

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

Визуализация Mesh Distance Field UE4Визуализация Mesh Distance Field Визуализация Global Distance Field UE4Визуализация Global Distance Field
Для получения дополнительной информации перейдите на страницу Distance Field Ambient Occlusion.

Foliage – Листва

Активы листвы также могут использовать Distance Fields, что позволяет иметь динамическую окклюзию или даже иметь дистанционное затенение за пределами того, что может затенять Cascaded Shadow Maps.

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

Two-Sided Distance Field

Для мешей с высокой плотностью (например, деревьев), где у вас есть поверхность, которая обычно состоит из маскированного материала, который представляет собой много отверстий для листьев или ветвей, они не могут быть представлены в виде сплошной поверхности. По этой причине вы можете включить настройку сборки для создания Two-Sided Distance Field Generation в Редакторе Статик Меши. Этот вариант будет хорошо работать для листвы, но придет на более высокую цену.опция Two-Sided Distance Field Generation UE4

В этом примере дерево слева использует по умолчанию непрозрачное поле Mesh Distance Field. Справа включено Two-Sided Distance Field Generation. Вы заметите, что distance field двухсторонней меши больше белого цвета, чем серого, а поверхности теперь полупрозрачные. Это означает, что для нахождения пересечения меши при генерации текстуры вольюма, чем при непрозрачной, требуется еще много шагов, и это будет стоить дороже.

Настройки инструмента Foliage Tool

В инструменте Foliage Tool вы должны включить каждый тип листвы, который вы хотите использовать для освещения окклюзии и тени. По умолчанию этот параметр отключен, потому что некоторые лиственные активы (например, трава), где у вас будут тысячи или десятки тысяч экземпляров, будут переполнять буфер отбраковки плитки. Когда это произойдет, вас огорчат артефакты. Таким образом, включите только Affect Distance Field Lighting для необходимых вам лиственных активов.опция Affect Distance Field Lighting UE4

Включение Distance Fields

Чтобы включить Mesh Distance Fields для вашего проекта, используйте меню файлов, чтобы открыть окно Параметры проекта, выбрав Edit > Project Settings, затем выберите раздел Rendering.включить Mesh Distance Fields для проекта UE4

В категории Lighting установите флажок на Generate Mesh Distance Fields.Generated Mesh DF UE4

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

При следующем запуске проекта вы увидите следующее всплывающее окно в нижнем углу, указывающее, что поля Mesh Distance Fields генерируются.поля Mesh Distance Fields генерируются UE4

После завершения вы можете визуализировать Mesh Distance Fields в окне просмотра, нажав Show > Visualize > Mesh DistanceFields. Вы должны увидеть аналогичный взгляд на это.

вид сцены ue4Вид сцены

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

Весь этот уровень представлен взятыми Distance Fields, которые хранятся в вольюм текстурах.

Использование памяти и оптимизация

  • r.AOListMeshDistanceFields, который выгружает Mesh Distance Fields, отсортированные по размеру памяти, в Output Log. Это может быть полезно для оптимизации контента.
  • Включите их из Project Settings > Rendering:настройка проекта ue4
  • Compress Mesh Distance Fields можно включить, чтобы сохранить вольюм текстуру Distance Fields, сжатую в памяти. Это уменьшит количество памяти, которую они используют, однако, если вы используете потоковую передачу уровня, они будут вызывать зависания в вашем игровом процессе, когда эти уровни будут переданы.
  • Eight Bit Mesh Distance Fields могут быть включены для сохранения вольюм текстуры Distance Fields в формате 8-битной фиксированной точки вместо 16-битной с плавающей запятой по умолчанию. Он будет использовать только половину ранее использованной памяти, но может ввести некоторые артефакты, когда у вас большая или тонкая меш.
  • Global Distance Field кэширует в основном статические примитивы с их подвижностью, установленной на статическую или стационарную (Static или Stationary). Полное Global Distance Field наследует, главным образом, статический кеш, поэтому, когда модифицируется подвижный примитив, только другие подвижные примитивы в окрестности должны быть перекомпонованы в Global Distance Field.

Ограничения

Ограничения метода Distance Fields:

  • Поддержка только для платформ уровня 5 (DX-11 и выше)
  • Только отбрасывает тени из жестких мешей. Для скелетных мешей вы можете использовать Capsule Shadows для косвенно освещенных областей с Distance Field Ambient Occlusion (DFAO) и мягким прямым затенением.
  • Материалы, которые деформируют меш через смещение или World Position Offset, могут вызывать артефакты самозатенения, поскольку представление Distance Field генерируется в автономном режиме и не знает об этих деформациях.

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

  • Неравномерное масштабирование нельзя обрабатывать правильно (хотя отзеркаливание в порядке). Масштабирование меши в два раза или менее обычно не заметно.
  • Поддерживает только Static Mesh, экземпляры Static Mesh, Foliage и Landscape (Heightfield). Листва должна быть активирована с помощью Affect Distance Field Lighting из настроек Foliage Tool.

Ограничения оборудования:

  • Все функции Mesh Distance Field были отключены на картах Intel, поскольку HD 4000 зависает в вызове RHICreateTexture3D для выделения большого формата.

Рекомендации

  • Quilez, Inigo. «Raymarching Distance Fields». N.p, 2008

Основы

Руководство к Distance Fields

Мягкие тени Raytraced Distance Field

Distance Field Ambient Occlusion

Руководство по настройкам Mesh Distance Fields