Отражающая Среда в Unreal Engine 4

0
34
Отражающая Среда в Unreal Engine 4

Функция Reflection Environment обеспечивает эффективные глянцевые отражения в каждой области уровня. Многие важные материалы, такие как металлы, полагаются на отражения во всех направлениях, которые предоставляет среда отражения. Он ориентирован на консоль и компьютер среднего класса, поэтому он должен работать очень быстро. Поддержка отражений динамических объектов или резких отражений обеспечивается, но для этого потребуются дополнительные потери памяти.функция reflection environment UE4

Быстрая настройка среды отражения 

Чтобы быстро получить среду отражения, работающую на уровнях вашего проекта, вам нужно будет сделать следующее:

  1. Добавьте немного света на свой уровень и постройте освещение один раз, так как должно быть немного косвенного диффузного освещения для среды отражения, чтобы вообще отображаться.
  2. На панели Modes в разделе Visual Effects выберите и перетащите элемент Sphere Reflection Capture на уровень.

Если вы не видите отражения на своем уровне или отражение не так сильно, как вам требуется, вы можете попробовать следующее:

  • Убедитесь, что ваши материалы имеют заметную Зеркальность и низкую Резкость, чтобы лучше показать отражения.
  • Используйте режим просмотра Reflection Override, чтобы визуализировать то, что было захвачено, чтобы лучше понять, какие значения в ваших Материалах необходимо отрегулировать.

Настройка уровня для использования среды отражения

Первым шагом к созданию хороших отражений является создание диффузного освещения, в том числе косвенное освещение с использованием карт света. На странице Lightmass содержится дополнительная информация о том, как это сделать, если вы не знакомы с ее использованием. Общие ошибки, препятствующие работе подсветки Lightmass после сборки, включают, но не ограничиваются следующими:

  • skybox отбрасывает тень
  • Отсутствие LightmassImportanceVolume.
  • Отсутствие или неправильная настройка UVs
  • значение Force No Precomputed Lighting установлено на True в World Properties.

Поскольку диффузный цвет уровня – это то, что отразится в среде Reflection Environment, вам нужно будет сделать следующее для достижения наилучших результатов:

  • Обеспечьте значительный контраст между непосредственно освещенными и затененными областями.
  • Помните, что яркие рассеянно освещенные области – это то, что ясно проявится в отражениях.
  • Более затененные области, где отражения будут наиболее заметными.
  • Используйте режим просмотра Lit, когда опция Show Specular отключена, чтобы увидеть уровень, который показывает отражение.

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

  • Плоская зеркальная поверхность выявит неточности объединения кубмапов, проецируемых на простые фигуры.
  • Сплошная геометрия или грубые поверхности могут как скрывать эти артефакты, так и давать убедительные результаты.
  • Важно использовать детальные карты Нормали и указать некоторую степень резкости Материалов, которые будут использоваться в плоских областях, так как это поможет им лучше показать отражения.
Гладкая поверхность, но изогнутая геометрия UE4Гладкая поверхность, но изогнутая геометрия: Отражения хорошего качестваГрубая поверхность, но плоская геометрия UE4Грубая поверхность, но плоская геометрия: Отражения хорошего качестваГладкая поверхность и плоская геометрия UE4Гладкая поверхность и плоская геометрия: Очевидно, что отражения не совпадают

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

Глянцевое косвенное отзеркаливание

С технической точки зрения среда отражения обеспечивает косвенную зеркальность. Мы получаем прямое зеркальное отображение через аналитические источники света, но это дает только отражения в нескольких ярких направлениях. Мы также получаем зеркальное отражение с неба через Sky Light, но это не дает локальных отражений, так как Sky Light cubemap бесконечно далеко. Косвенная зеркальность позволяет всем частям уровня отражать все остальные части, что особенно важно для материалов, таких как металл, которые не имеют диффузного отклика.

Только Диффузия UE4

Только Диффузия

Только Отражение UE4Только Отражение

 

Полное освещение UE4

Полное освещение

Reflection Environment работает, захватывая статический уровень во многих точках и перепрограммируя его на простые фигуры, такие как сферы в отражениях. Художники выбирают точки захвата, размещая актеров ReflectionCapture. Обновление отражений происходит в режиме реального времени во время редактирования, чтобы помочь в размещении, но статично во время выполнения. Проецирование захваченного уровня на простые фигуры дает приблизительный параллакс для отражения. Каждый пиксель смешивается между несколькими кубмапами, чтобы получить окончательный результат. Меньшие Актеры ReflectionCapture переопределяют более крупных, поэтому вы можете уточнить точность параллакса отражения в областях по мере необходимости. Например, вы можете разместить захват в центре комнаты, а затем усовершенствовать отражение, разместив меньшие захваты в углах комнаты.

Материалы с различным блеском поддерживаются созданием размытых mipmaps из захваченных кубмапов.Материалы с различным блеском UE4

Однако использование отражений cubemap на очень грубой поверхности приводит к чрезмерно яркому отражению, которое имеет значительные утечки из-за отсутствия локальной окклюзии. Это решается путем повторного использования данных lightmap, генерируемых Lightmass. Отражение cubemap смешивается вместе с косвенным зеркальным светом, основанным на грубом материале. Очень грубый материал (полностью рассеянный) будет сходиться по результату световой карты. Это смешивание, по существу, сочетает деталь высокой детализации одного набора данных освещения (cubemaps) с низкочастотной частью другого набора данных освещения (lightmaps). Тем не менее, для правильной работы в световой карте может быть только косвенное освещение. Это означает, что только косвенное освещение от стационарного света может улучшить качество отражений на грубых поверхностях. Статические типы света не должны использоваться вместе со средой отражения, поскольку они будут помещать прямое освещение в световую карту. Обратите внимание, что это смешение с lightmap также означает, что карта должна иметь выразительное косвенное диффузное освещение и что освещение должно быть построено для просмотра результатов.

Отражения на грубую поверхность без затенения UE4Отражения на грубую поверхность без затененияГрубая поверхность с затенением UE4Грубая поверхность с затенением

Смешивание световой карты отражения

Когда вы используете актеров Reflection Capture, UE4 смешивает косвенный Specular от Reflection Capture с косвенным Diffuse освещением от световых карт. Это помогает уменьшить утечку, так как отражение cubemap было зафиксировано только в одной точке пространства, но карты света были вычислены на всех поверхностях приемника и содержат локальную информацию о теневом изображении.

Уменьшение смешивания Lightmap на гладких поверхностях отключено UE4Уменьшение смешивания Lightmap на гладких поверхностях отключеноУменьшение смешивания Lightmap на гладких поверхностях включено UE4Уменьшение смешивания Lightmap на гладких поверхностях включено

В то время как смешивание lightmap хорошо работает для грубых поверхностей, этот метод рушится на гладких поверхностях, поскольку отражения от Actures Reflection Capture больше не соответствуют отражениям от других методов, таких как Screen Space Reflections или Planar Reflections. Из-за этого смешивание lightmap больше не применяется к очень гладким поверхностям. Поверхность со значением резкости 0,3 получит полное смешение световой карты, затухание без смешивания световой карты с помощью резкости 0,1 и ниже.  Это также позволяет Reflection Captures и Screen Space Reflections лучше сочетаться и затруднять обнаружение переходов между ними.

Смешивание Lightmap и Существующий контент

По умолчанию будет включено смешивание lightmap, что означает, что оно повлияет на существующий контент. В тех случаях, когда у вас были отражения, падающие на гладкие поверхности, это утечка будет более очевидной. Чтобы решить эту проблему, вы можете разместить дополнительные актеры отражения в пределах уровня, чтобы уменьшить утечку. Или вы можете вернуться к старому смешиванию световых карт, перейдя в меню Edit > Project Settings > Rendering > Reflections, а затем снимите флажок Reduce lightmap mixing on smooth surfaces.флажок Reduce lightmap mixing on smooth surfaces UE4

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

  • r.ReflectionEnvironmentBeginMixingRoughness (по умолчанию = 0.1)
  • r.ReflectionEnvironmentEndMixingRoughness (по умолчанию = 0.3)
  • r.ReflectionEnvironmentLightmapMixBasedOnRoughness (по умолчанию = 1)
  • r.ReflectionEnvironmentLightmapMixLargestWeight (по умолчанию = 1000)

Отражения высокого качества

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

High Precision Static Mesh Vertex Normal and Tangent Encoding – Высокоточная кодировка вершинной нормали и касательной статик меши

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

Чтобы включить High Precision Static Mesh Vertex Normal and Tangent:

  1. В контент браузере дважды щелкните по статик меши, чтобы открыть ее в Редакторе статик мешей.
  2. В Редакторе статик меши перейдите на панель Details и разверните параметр LOD0.параметр LOD0 UE4

3. В нижней части LOD0 находится раздел Build SettingsНажмите на маленький треугольник рядом с настройками сборки, чтобы развернуть параметры настройки сборки.раздел Build Settings UE4

4. Включите опцию Use High Precision Tangent Basis, установив флажок рядом с ее именем, а затем нажмите кнопку Apply Changes, чтобы применить новые настройки.опция Use High Precision Tangent Basis UE4

Окно просмотра автоматически обновится, чтобы отразить изменения.

Качество рассматриваемого отражения напрямую связано с тем, насколько плотно тесселируется статик меш. Статик меши, которые имеют меньшую тесселяцию, будут иметь больше растягивающих артефактов в отражении, чем статик меши, которые имеют больше тесселяции.
High Precision Vertex Normal выключен UE4High Precision Vertex Normal выключенHigh Precision Vertex Normal включен UE4High Precision Vertex Normal включен

Высокоточная кодировка нормали GBuffer UE4High Precision GBuffer Normal – Высокоточная кодировка нормали GBuffer

Включение опции High Precision Normal Buffer для кодирования GBuffer позволит GBuffer использовать более высокую точность обычного кодирования. Эта более высокая точность Стандартная кодировка GBuffer кодирует нормальный вектор в три канала с каждым каналом, имеющим 16 бит на. Использование этой более высокой точности кодирования позволяет использовать такие методы, как Screen Space Reflections (SSR), чтобы полагаться на высокоточные нормали.

Чтобы включить High Precision GBuffer Normal:

  1. На главной панели инструментов выберите Edit > Project Settings, чтобы открыть Project Settings.change the settings UE4

2. В разделе параметры проекта в разделе Engine нажмите кнопку Rendering, а в разделе Optimizations измените значение Gbuffer Format с Default на High Precision Normals.High Precision Normals UE4

Имейте в виду, что для этой кодировки требуется увеличенная память ЦП, и это может повлиять на производительность вашего проекта.

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

GBuffer Format по умолчанию UE4

GBuffer Format по умолчанию

GBuffer Format высокой точности UE4

GBuffer Format высокой точности

Формы захвата отражения

В настоящее время существуют две формы захвата отражения: сфера и коробка. Форма очень важна, потому что она контролирует, какая часть уровня захвачена в cubemap, какая форма уровня перепроектирована в отражениях, и какая часть уровня может получать отражения от этой cubemap (область влияния).

Форма сфера

В настоящее время наиболее важна форма сферы. Он никогда не совпадает с формой отраженной геометрии, но не имеет разрывов или углов, поэтому ошибка является однородной.Форма сфера UE4

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

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

Форма коробки

Польза Формы коробки очень ограничена и обычно работает только в коридорах или в прямоугольных комнатах. Причина в том, что только пиксели внутри коробки могут видеть отражение, и в то же время вся геометрия внутри коробки проецируется на форму ящика, создавая значительные артефакты во многих случаях.Форма коробки UE4

При выборе флажок имеет оранжевый предварительный просмотр формы проекции. Он только фиксирует уровень в пределах Box Transition Distance вне этого поля. Влияние этого захвата исчезает и на расстоянии перехода, внутри коробки.

Редактирование Reflection Probes

При внесении изменений в Reflection Probes (Зонды Отражения) существует множество разных вещей, которые вы должны помнить, чтобы обеспечить получение результатов, которые вы хотите достичь после. В следующем разделе мы расскажем о том, что это такое и как вы можете убедиться, что получаете отражения лучшего качества в своих проектах.

Обновление Reflection Probes

Важно отметить, что Reflection Probes не обновляются автоматически. Только следующие действия автоматически обновят место зондов отражения на уровне:

  • Загрузка карты.
  • Непосредственное редактирование свойств актера отражения.
  • Построение уровней освещения.

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

Применение пользовательской HDR Cubemap в Reflection Probes

У Reflection Probe есть возможность не только указать, какую кубмапу они должны использовать для данных отражения, но также и о том, какой размер должна иметь кубмапа. Ранее UE4 с жестким кодированием разрешало использование разрешенных зондов для кубмап. Теперь разработчики могут выбрать решение, которое наилучшим образом соответствует их потребностям, исходя из производительности, памяти и качественных компромиссов. Ниже приведено сравнительное изображение, которое показывает разницу между использованием параметра Captured Scene и опцией Specified Cubemap.

захваченная сцена UE4

Захваченная сцена

кубмапа определена UE4Определенная кубмапа

Чтобы указать пользовательскую HDR Cubmap для использования Reflection Probes вашего проекта, вам нужно будет сделать следующее:

  1. Во-первых, убедитесь, что у вас есть HDRI Cubemap Texture, доступная для использования. Если у вас нет HDRI Cubemap Texture в вашем проекте, в комплект входит контент для начинающих HDRI_Epic_Courtyard_Daylight.HDRI_Epic_Courtyard_Daylight UE4
Вы можете переместить активы из одного проекта в другой с помощью функции Миграция.
  1.  Выберите актера Reflection Probe, который был установлен на уровне, а на панели Details в разделе Reflection Capture измените тип источника отражения Reflection Source Type от Captured Scene до Specified Cubemap.свойство Specified Cubemap UE4

2. Когда Reflection Probe все еще выбран на уровне, перейдите в Content Browser и выберите HDRI Texture, которую вы хотите использовать. Затем в Актере Reflection Capture в разделе Reflection Capture перетащите текстуру HDRI из контент браузера на вкладку Cubemap.перетащить текстуру HDRI UE4

3. Нажмите кнопку Update Capture, чтобы обновить Актера Capture Reflection, чтобы использовать только что указанную новую кубпам текстуру HDRI Cubemap Texture.использовать текстуру HDRI Cubemap Texture UE4

Регулировка разрешения Reflection Probe

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

  1. Откройте настройки своего проекта, перейдя на главную панель инструментов, а затем выберите Edit > Project Settings.change the settings UE4

2. В меню Настройки проекта перейдите в раздел Engine > Rendering, а затем найдите параметр Textures.параметр Textures UE4

3. При настройке параметра Reflection Capture Resolution вы можете увеличить или уменьшить размер текстуры HDR Cubemap, который был указан.параметр Reflection Capture Resolution UE4

Будьте предельно осторожны при использовании текстуры с очень высоким разрешением, так как это может существенно повлиять на производительность из-за требований к памяти ЦП.

Регулировка разрешения отражения в Skylight

Как и с помощью зондов отражения Reflection Probes, в Skylights также есть возможность определять и корректировать разрешение HDRI cubemap, которое они используют для отражений. Чтобы использовать эту функциональность в своем проекте UE4, вам нужно будет сделать следующее:

  1. На панели Mode в разделе Lights выберите и перетащите Skylight на свой уровень.Отражающая Среда в Unreal Engine 4

2. Выберите Skylight и на панели Details в разделе Light измените тип источника с SLS Captured Scene на указанную SLS Specified Cubemap.SLS Specified Cubemap UE4

3. Нажмите на раскрывающийся список в разделе Cubemap и выберите cubemap HDRI из списка.раскрывающийся список в разделе Cubemap UE4

4. После того, как выбрана папка cubemap, вы можете отрегулировать ее разрешение, изменив значение в разрешении Cubemap Resolution.разрешение Cubemap Resolution UE4

Обратите внимание, что Cubemap Resolution будет работать только с номерами, которые имеют две одинаковые характеристики: 16, 64, 128, 25, 512 и 1024.

Смешивание данных множественного отражения

Вы можете смешивать несколько различных отражений cubemap, предоставляя актерам Reflection Capture с помощью различных HDRI cubemaps. Чтобы выполнить это в вашем проекте UE4, вам нужно следующее:

  1. Во-первых, убедитесь, что у вас есть хотя бы один Reflection Probe, добавленный к вашему уровню, и что вы изменили тип источника отражения Reflection Source Type на Specified Cubemap и ввели текстуру HDRI во вкладку Cubemap.Смешивание данных множественного отражения UE4

2. Дублируйте или добавьте новый Reflection Probe на уровень и расположите / отрегулируйте его радиус воздействия Influence Radius так, чтобы часть его желтого радиуса воздействия пересекалась с первым Reflection Probe.1 Смешивание данных множественного отражения UE4

3. Выберите вновь дублированный / созданный Reflection Probe Actor, а на панели Details в разделе Cubemap измените формат HDRI cubemap на другой.2 Смешивание данных множественного отражения UE4

4. Если Reflection Probe, который был добавлен / дублирован, все еще выбран, перейдите на панель Details в разделе Reflection Capture и нажмите кнопку Update Captures, чтобы обновить отражение, чтобы использовать то, что было введено на вкладке Cubemap.3 Смешивание данных множественного отражения UE4

5. Если вы выберете и переместите Reflection Probe вокруг уровня, вы сможете получить лучшее представление о том, как два HDRI-кубмапа будут смешаться вместе.

Визуализация

Добавлен режим просмотра Reflection Override, чтобы было легче увидеть, насколько хорошо настроены отражения. Этот режим просмотра переопределяет все нормали как гладкую нормаль вершины и делает все поверхности полностью зеркальными и полностью гладкими (зеркальными). Ограничения и артефакты среды отражения также хорошо видны в этом режиме, поэтому важно периодически переключаться на режим Lit, чтобы увидеть, как выглядят отражения в нормальных условиях (неровные нормали, различная блеск, тусклый зеркальный).режим просмотра Reflection Override UE4

Добавлены новые флажки, которые полезны для выделения компонентов освещения:

ФлажокОписание
Lighting Components > DiffuseОтключение диффузии скроет диффузный вклад от всех методов освещения.
Lighting Components > SpecularОтключение зеркальности скроет скрытый вклад от всех методов отражения.
Lighting Features > ReflectionEnvironmentЭто отключит функцию Reflection Environment, но другие функции отражения будут по-прежнему активны (SSR, аналитическая зеркальность).

Рекомендации по производительности

Стоимость Reflection Environment зависит только от того, сколько захватов влияет на пиксели на экране. В этом смысле он очень похож на отложенное освещение. Отражающие захваты ограничены их радиусом воздействия, и поэтому они очень эффективно отбираются. “Глянцевость” реализуется через mipmaps cubemap, поэтому разница между резкими или грубыми отражениями незначительна.

Ограничения

  • Отражения в этом методе являются приблизительными. В частности, отражение объекта будет редко соответствовать реальному объекту на уровне из-за проекции на простые фигуры. Это имеет тенденцию создавать несколько версий данного объекта в отражениях, так как многие кубмапы смешиваются вместе. Плоские гладкие поверхности, которые вызывают зеркальные отражения, покажут ошибку очень четко. Используйте детальные карты нормали и резкость, чтобы помочь разбить отражение и эти артефакты.
  • Захват уровня в cubemaps – медленный процесс, который должен выполняться вне игрового сеанса. Это означает, что динамические объекты не могут быть отражены, хотя они могут получать отражения от статического уровня.
  • Для уменьшения ошибки регистрируется только диффузия уровня.Чистые зеркальные поверхности (металлы) будут иметь свое зеркальное отражение, как если бы оно было рассеянным во время захвата.
  • При наличии различных условий освещения на обеих сторонах стены может быть значительная утечка. Одна сторона может быть настроена так, чтобы иметь правильные отражения, но она всегда будет течь в другую сторону.
  • Из-за аппаратных ограничений DX11, куб, которые используются для захвата уровня, все 128 с каждой стороны, и в мире может быть задействовано не более 341 отражений.