Модель Затенения SubSurface Profile в Unreal Engine 4

0
6
Модель Затенения SubSurface Profile в Unreal Engine 4

Unreal Engine 4 (UE4) теперь предлагает специальный метод затенения для рендеринга реалистичных поверхностей кожи или воска, который называется затенением Subsurface Profile. Метод затенения Subsurface Profile аналогичен методу Subsurface, но имеет принципиальное отличие в том, как именно он визуализирует: Subsurface Profile основан на пространстве экрана. Это связано с тем, что рендеринг экранного пространства более эффективен для отображения тонких подповерхностных эффектов, наблюдаемых на коже человека, где обратное рассеяние является вторичным эффектом, которое наблюдается только в нескольких случаях, например, в ушах. В следующем документе рассказывается, что такое Subsurface Profile и как вы можете использовать его в своей работе.

 

Метод затенения Subsurface Profile UE4Используя Subsurface Profile

 

без метода затенения Subsurface Profile UE4Не используя Subsurface Profile

 

Особая благодарность Ли Перри-Смиту и его компании [Infinite Realities] (http://ir-ltd.net) за помощь в этой документации, а также за предоставление 3D-скана головы модели.

Что такое Subsurface Profile

Данные Subsurface Scattering Profile являются активом, который можно создать, совместно использовать и сохранить в контент браузере. Данные должны быть созданы художниками и должны контролировать расстояние, на которое должен рассеиваться свет в Подповерхностном слое, цвет подповерхностного слоя и цвет падающего света после его выхода из объекта. Эти данные затем могут быть применены к Subsurface Material. Данные Subsurface Profile также могут быть изменены в интерактивном режиме, что означает, что вам не нужно повторно компилировать материал, чтобы увидеть результаты редактирования.

Включение, создание и использование Subsurface Profile

Существует много разных способов использования профилей Sub Surface в UE4. В следующем разделе мы рассмотрим каждый из этих способов.

Создание Subsurface Profile

Чтобы создать Subsurface Profile, сначала щелкните правой кнопкой мышки внутри контент браузера. Затем выберите параметр Materials & Textures, а затем выберите параметр Subsurface Profile.параметр Materials & Textures UE4

Если не указан SubsurfaceProfile, он использует значение по умолчанию, которое является смуглой кожей человека.

Вы можете редактировать Subsurface Profiles, дважды щелкнув по ним левой кнопкой мышки в контент браузере, чтобы открыть его. После открытия вы можете настроить индивидуальные свойства Subsurface Scattering Profile путем ввода номера с помощью клавиатуры или с помощью Левой кнопки мышки, щелкнув по цветовой полосе, чтобы открыть панель выбора цвета.

Включение Subsurface Profile

Чтобы использовать Subsurface Profile в материале, вы должны сначала включить его, установив модель затенения материалов как Subsurface Profile на панели Details Материала. После включения вы можете переопределить Subsurface Profile по умолчанию, который используется при вводе нового в инпута Subsurface Profile.

Настройки по умолчанию для Subsurface Profile близки к типу смуглой кожи. Обратите внимание, что это всего лишь один компонент для получения реалистичного вида кожи. Всегда следите за тем, чтобы базовый цвет вашей текстуры соответствовал вашему Subsurface scattering profile.

Subsurface scattering profile UE4Subsurface Profile также может быть переопределен в экземпляре материала. Для этого перейдите в панель Details экземпляра материала и включите Override Subsurface ProfileПосле включения примените Subsurface Profile, который вы хотите использовать во входе Subsurface Profile.Override Subsurface Profile UE4

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

Каналы ввода материала

Профиль затенения Подповерхностного слоя Пространства Экрана не отличается от режима затенения Lit, при этом основное отличие состоит в том, что вход Metallic был перепрограммирован и недоступен для использования.

Base Color Input: инпут базового цвета используется, как обычно, для диффузного освещения. Нет дополнительного цвета Subsurface Scattering, так как Subsurface Scatter пространства экрана не должен изменять цвет или яркость, он просто перераспределяет освещение до ближайших пикселей. Итак, если материал должен рассеяться по определенному цвету, его нужно выразить как часть Базового Цвета. Базовый Цвет должен быть окончательного цвета, как если бы материал просматривался с большого расстояния, где рассеяние нельзя отличить от диффузного освещения.

Кожа человека – это тонкий слой, который блокирует определенное количество и цвет света, и он покрывает живую, красноватую плоть ниже ее поверхности. Видимое расстояние рассеяния для светлой кожи человека составляет около 1,2 см.

Metallic Input: входной канал Metallic недоступен при использовании Subsurface Profile, потому что пространство GBuffer для входа Metallic было перенастроено для размещения данных Subsurface Profile.

Opacity Input: входной канал непрозрачности используется для маскировки вклада Subsurface scattering. Он работает с использованием значения в диапазоне от 0 до 1, чтобы обеспечить плавные переходы между различными областями интенсивности подповерхностного рассеяния, где при значении 0 нет рассеяния, а при 1 – полное рассеяние.

Чтобы лучше контролировать то, где Subsurface scattering сильнее или слабее, лучше всего использовать текстуру маски.
Области в маске Текстура, имеющая значения близкие к 1 или белые, будет иметь самый сильный эффект рассеяния подповерхностного слоя, тогда как области, которые ближе к 0 или черные, будут иметь меньший эффект. Регулировка Subsurface Color поможет компенсировать, если области становятся слишком темными. Помните, что использование более ярких цветов приводит к большему Subsurface scattering.

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

Затенение кожи с полным разрешением

UE4 поддерживает затенение кожи с полным разрешением для модели затенения Subsurface Profile. Это обеспечивает высокоточное освещение для деталей поверхности, таких как поры и морщины.

 

Шахматный порядок слоя воспроизведенной кожи UE4Шахматный порядок слоя воспроизведенной кожи

 

 

Кожа полного разрешения UE4Кожа полного разрешения

 

Раньше освещение на коже представлялось с использованием шахматного порядка, где половина пикселей использовала только диффузное освещение, а другая половина использовала зеркальное освещение. Освещение было рекомбинировано во время окончательного прохода в полноэкранном режиме Subsurface profile. Этот подход дал хорошие результаты для подповерхностного освещения (которое является низкочастотным по своей природе), но это может привести к более низкому освещению деталей поверхности. С новым подходом каждый пиксель содержит информацию об диффузии и зеркальном освещении, упакованную в кодировку RGBA. Это позволяет нам восстанавливать полноразмерное освещение во время окончательного прохода в полноэкранном режиме Subsurface profile, давая лучшие результаты для деталей поверхности и более стабильного поведения с временным сглаживанием.

Совместимость

Для полного затенения кожи требуется, по крайней мере, 64-битный формат цвета сцены с полным альфа-каналом. Формат FloatRGBA Scene Color по умолчанию работает отлично, но 32-битные представления, такие как FloatRGB, не поддерживаются. Если цветовой формат сцены несовместим с кожей с полным разрешением, мы возвращаемся к освещению шахматного порядка.

Это поведение можно переопределить с помощью переменной консоли r.SSS.Checkerboard. Возможные значения для этого:

 
Имя свойстваЗначениеОписание
r.SSS.Checkerboard0Checkerboard отключен
r.SSS.Checkerboard1Checkerboard включен (старое поведение)
r.SSS.Checkerboard2Автоматический (по умолчанию) – будет использоваться полноэкранное освещение, если формат цветного изображения сцены поддерживает его.

Ограничения

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

  • Metallic Materials
  • Emissive Materials

Эти функции будут работать, но вы можете заметить различия в производительности по сравнению с методом Checkerboard (шахматный порядок) из-за разбросанного / зеркального кодирования RGBA. При создании материалов можно обойти некоторые проблемы, установив Opacity на 0 в областях, где не требуется затенение кожи. Пиксели с нулевой непрозрачностью считаются освещенными по умолчанию для затенения.

Маскирование непрозрачных пикселей таким же образом имеет смысл по соображениям производительности, так как эти пиксели обходят с помощью Subsurface Postprocess (пост-процесса подповерхностного слоя).

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

Если ваш заголовок имеет 64-битный формат цвета сцены, подсветка полного разрешения подповерхностного слоя, как правило, будет быстрее, чем в шахматном порядке из-за уменьшения количества наборов текстур. Однако, если ваш заголовок имеет 32-разрядный цвет сцены, увеличение производительности от уменьшенной полосы пропускания текстуры, скорее всего, будет перевешивать преимущества (хотя это зависит от оборудования).

Технические подробности

В настоящее время модель затенения профиля Subsurface scattering не сильно отличается от Lit (Lambert diffuse, GGX для зеркального, без металлик). Большая часть эффекта происходит в процессе после того, как все подсчеты уже выполнены.

Subsurface scattering profile основан на работе Jorge Jimenez. Не забудьте проверить его веб-страницу для получения полезных советов о том, как сделать ваши 3D-изображения более реалистичными.

Мы выделяем незеркальные (не зависящие от просмотра) освещающие вклады для поддержки зеркального отображения поверх  Subsurface Material и нижнего образца для повышения производительности. Подобно гауссовскому размытию, мы фильтруем изображение с помощью двухпроходного (при условии отделимого ядра) пост-процесса. Ядро фильтра зависит от Subsurface scattering profile, который хранится в GBuffer (максимум 255 активных профилей на сцену). Ядро имеет цветные веса и конкретные позиции образца, которые можно масштабировать в профиле (в юнитах/ см). На последнем этапе мы рекомбинируем вклад рассеянного света с полным разрешением. Чтобы отделить зависящее и не зависящее от просмотра освещение, мы сохраняем весовое значение в альфа-канале сцены. Для этого приближения требуется 64-битная цель рендеринга (см. r.SceneColorFormat), это приближение работает в большинстве случаев.

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

Здесь у нас есть пример, где Specular был удален до того, как было применено размытие. Обратите внимание, насколько зеркальное отражение четкое и гладкое в конечном изображении (изображение справа). Это именно тот эффект, который мы хотели достичь.

гладкое отражение subsurface profile UE4Здесь мы приводим пример, когда Specular не удалялся до того, как было применено размытие. Обратите внимание, как зеркальное отражение является вялым и выглядит немного растянутым в конечном изображении (изображение справа). Это не правильный способ добиться такого эффекта.плохое отражение subsurface profile UE4

Команды масштабирования и консоли

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

r.SSS.Scale: Может использоваться для масштабирования эффекта для быстрых экспериментов. Установка этого параметра на 0 приведет к отключению эффекта. Установка чисел выше 0 приведет к увеличению эффекта, который можно увидеть в последовательности изображений ниже.параметр масштабирования r.SSS.Scale UE4

r.SSS.SampleSet: Устанавливает количество использованных образцов. Уменьшение этого приведет к тому, что эффект будет работать быстрее. Однако это будет означать, что эффект будет иметь более низкое качество, и могут появиться артефакты.

параметр R Sample Set выключен UE4r.SSS.SampleSet = 0параметр R Sample Set включен UE4r.SSS.SampleSet = 1

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

Модель Затенения SubSurface Profile в Unreal Engine 4В то время как модель затенения Subsurface scattering profile является шагом вперед, когда дело доходит до рендеринга кожи, все же есть некоторые ограничения в том, что она может сделать. Обратите внимание, что по мере того, как эта система становится все более и более отполированной, этот список может измениться.

  • Функция не работает в режиме без отложенного (мобильного) рендеринга.
  • Установка большого экрана для рассеивания радиуса будет показывать связанные артефакты в экстремальных условиях освещения.
  • В настоящее время нет обратного рассеяния света.
  • В настоящее время появляется серый контур, когда материалы, не относящиеся к SSS, перекрывают SSS-материалы.

Справочная информация свойства Subsurface Profileсвойство Subsurface Profile UE4

Имя свойстваОписание
Scatter Radius/ Радиус рассеянияРасстояние в мировых космических единицах для выполнения рассеяния.
Subsurface Color/ Цвет подповерхностного слояЭтот цвет можно использовать в качестве веса для эффекта подповерхностного слоя. Черный означает, что подповерхностного рассеяния нет. Белый означает, что все освещение входит в материал и рассеивается. Значение, отличное от оттенков серого, дает больший контроль над тем, какие цветные вклады попадают на поверхность, что приводит к более сложному затенению.
Falloff Color/ Цвет спадаОн определяет цвет рассеяния материала, когда свет вошел в материал. Вы должны избегать использования яркого цвета здесь, если вы хотите получить более сложную вариацию затенения над областью, где вы видите рассеяние.

Особая благодарность

Особая благодарность Ли Перри-Смиту и его компании Infinite Realities за предоставленную модель головы и помощь. Также мы благодарны Jorge Jimenez (Хорхе Хименесу) за его реализацию, поскольку эта функция основана на его работе.