Рендер Нормализированной Карты Глубины в Unreal Engine 4

0
6
Рендер Нормализированной Карты Глубины в Unreal Engine 4

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

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

Эта функция была использована в Cherry Tree в демо – версии Apple Metal API Zen.

Этот метод представляет несколько уникальных преимуществ, но также и некоторые недостатки.

Преимущества:

  1. Для сложных деревьев развернутые UVs будут иметь низкое разрешение из-за количества «вертикального перекрытия». Текстура Shadow Depth (глубины тени) не теряет разрешения из-за разворачивания, тем самым дает гораздо большее разрешение в этом случае.
  2. Вы можете легко запечь правильное освещение для таких вещей, как камера, направленная на спрайты с вершинными шейдерами, а в противном случае невозможно получить хорошие тени через lightmass (свет). На самом деле это основная причина, по которой эта функция вообще существует.
  3. Полученная текстура глубины позволяет тонкую настройку смещения глубины и передачу светового расстояния для некоторых реалистичных эффектов.
  4. Получившаяся текстура также может быть помещена в Статик Меш скрытой игры без столкновений, которая действует как вычислитель тени для дерева в другую геометрию, включая землю и игроков. Это обеспечивает значительное увеличение производительности затенения.
  5. По какой-то причине для массивных лесных сцен, где вы хотите использовать очень много высоких деревьев, а восстановление lightmass (света) проблематично, а каскадные теневые карты не могут обеспечить требуемое качество, это предлагает хорошую альтернативу. Вы можете заполнить массивную сцену, и деревья будут выглядеть одинаково хорошо на расстоянии, как только вы их разместите.
  6. Основные вычисления выполняются в вершинном шейдере, и неосвещенный материал, который хорошо смотрится, еще и достаточно дешевый для работы на мобильных устройствах, о чем свидетельствует использование демо – версии Zen.

Недостатки:

  1. В некоторой степени это высокая стоимость создания контента, а не просто использование света, чтобы запечь освещение для простых случаев, но иногда вышеуказанные причины оправдывают дополнительную работу.
  2. Трудно контролировать размывание полученных теней, поскольку они имеют тенденцию казаться резкими, если они не размыты вручную или не используются LODbias.
  3. Это работает только для статических сцен, невозможно, чтобы тень фактически меняла углы, так как она запечена из одной картины света. Есть некоторые параметры для «подделки» при необходимости поворачивать свет, но получающееся качество будет намного ниже, и это приближение работает только для деревьев очень сферических форм, так как в этом случае поворот из центра не сильно изменится.
  4. Вы теряете свет на энергии освещения с неосвещенным материалом и в конечном итоге настраиваете его обратно.

Запекание Карты ГлубиныЗапекание Карты Глубины UE4

Light Vector (Вектор света): вы можете указать вектор света, чтобы захватить представление, или вы можете связать его с directional light Actor (Актером направленного света), который вы разместите на уровне.

Для представления вектора полуденного света вы должны ввести 0,0, -1.

СвойствоОписание
Directional Light/ Направленный светЕсли вы выберете направленный свет с вашего уровня для использования, приведенный выше параметр светового вектора будет проигнорирован, и вместо него будет использоваться просто свет.
Depth Map Static Mesh/ Статик Меш карты глубиныЗдесь вы подключаете Статик Меш, которую хотите захватить.
Depth Material Mask Textures/ Текстуры маски материала глубиныВам не нужно создавать или указывать материал здесь, он автоматически создает один для каждого элемента в этом массиве. Если какой-либо элемент в массиве пуст, используется маска while. Если ваша Статик Меш имеет 3 раздела, просто добавьте в этот массив 3 пустых элемента, и они будут создавать материалы для вас. Кроме того, если какая-либо часть вашей меши имеет Mask Texture, вы можете указать это здесь. Укажите текстуру, которая будет находиться в элементе массива, соответствующем ID требуемого материала.
Mask Channel/ Канал маскиЭтот параметр позволяет указать, в каком канале находится маска. Это будет полезно, если ваша маска была частью текстуры, насыщенной каналом, и вам нужен конкретный канал.
Use Level Meshes for Depth/ Использовать меши канала для ГлубиныЭто отдельный и редко используемый случай, когда вместо указания единственной меши инструмент фиксирует глубину для меши или группы мешей, которые вручную помещаются поверх листа фона. Или вы действительно можете привести RenderToTexture_LevelBP в существующий уровень, чтобы захватить карту глубины для группы мешей. Есть несколько дополнительных параметров, которые должны использоваться в материале при использовании этой опции, поскольку границы должны быть полностью сделанными по определенному образцу.
Scale XY/ Масштаб XYЭтот инструмент использует границы сферы объекта, чтобы попытаться наилучшим образом подобрать объект в области захвата. В некоторых случаях это оставляет слишком много безжизненного пространства вокруг края объекта. Этот параметр позволяет вам точно настроить его, слегка уменьшив масштаб объекта. Рекомендуется оставить его в 1.0, так как вы должны убедиться, что параметры материала соответствуют вашему входному значению, если вы измените это здесь.
Scale Z/ Масштаб ZКак и выше, эта функция использует границы сферы объекта для определения диапазона Локальной глубины, который используется для генерации результатов нормализованной глубины. В большинстве случаев следует использовать значение по умолчанию 1, но если вы хотите немного«скопировать» диапазон, чтобы убедиться, что вы используете полный диапазон 0-1 для большей точности, вы можете уменьшить этот параметр, пока не увидите Красную индикацию (указывает, что пиксели находятся за пределами локального диапазона 0-1 и будут сглажены!). Если этот параметр здесь изменен, он полагается на значение соответствия, которое устанавливается позже в фактическом материале, поэтому предлагается оставить это как есть, если нет веских оснований для его изменения.
Fit Vector and Scale Info Onto Texture/ Корректировать информацию вектора и масштаба на текстуреЭтот параметр может быть полезен для того, чтобы вы помнили, какие настройки вы использовали при захвате. Если он включен, он начертит текст с указанными выше значениями на листе. Следующие две настройки позволяют масштабировать и перемещать текст.
Text Size/ Размер текстаУказывает размер информационного текста.
Text Locations/ Локации текстаЭто массив, поэтому вы можете перемещать каждый текстовый элемент в произвольное место, где есть свободное место. Есть две текстовые строки, поэтому вам нужно добавить два элемента для перемещения обоих.

При заданной меши и текстуре маски, указанной для идентификатора материала Leaves, вы должны увидеть что-то вроде следующего:идентификатор материала Leaves UE4

Чтобы сделать карту глубины, этапы создания немного отличаются от предыдущих.

Эта функция не заботится о выбранных буферах в “Capture Settings”, только о множителе разрешения.

Вы должны сыграть в игру в новом окне, а затем ввести «renderdepth» на консоли и нажать enter.

Для этого команда отличается, потому что Pawn Blueprint также должен установить «viewmode unlit».

Использование карты глубины как тени в материале

Чтобы использовать карту глубины, вы должны создать новый материал. Внутри этого материала вы должны разместить функцию материала «VolumeShadowMap»:

Volume Shadow Map UE4MaterialFunction’/Engine/ArtTools/RenderToTexture/MaterialFunctions/VolumeShadowMap.VolumeShadowMap’

Стоит отметить, что эта функция материала в настоящее время в основном создана для листвы. Компонент прямого освещения не подсчитан, а только тень. Таким образом, тени на твердой геометрии, которые отгибаются от света, выглядят не так хорошо, как могли бы. Вы можете исправить это, выполнив ручную функцию DotProduct с «Projection Vector» и вершиной нормали, и зажав ее в значении 0-1.

Вот пример тени, используемой для регулярной Статик Меши. Эта Статик Меш – это всего лишь несколько цилиндров, коробок и сфер друг на друге.

Статик Меши цилиндры коробки и сферы UE4Слева: сверху вниз. Справа: с нижней стороны вы можете видеть тени, а также точность собственных теней (или их отсутствие из-за отсутствия прямого компонента N точка L).

Пины вводаОписание
Position (V3)Используется только при запекании группы Статик Мешей, размещенных на уровне. Этот вариант несколько экспериментальный, поэтому предлагается оставить его отключенным.
Range (S)Это настройка для сокращения диапазона. Вы должны убедиться, что это значение соответствует значению, которое было задано как «Scale Z» во время рендеринга карты глубины.
Transform Position (B)Преобразование в пользовательский вектор света. По умолчанию используется значение False, что означает то, что локальная позиция по умолчанию для полудня будет использовать значение света 0,0, -1.
Projection Vector (V3)Это вектор света, с которого производится карта глубины. Если вы решили отображать отладочный текст с информацией о векторе света и масштабах на текстуре, вы должны иметь значение светового вектора для используемой текстуры. В противном случае используйте вектор света, указанный в процессе рендеринга, или просто оставьте его как есть, если вы не переопределяете направление света по умолчанию в полдень.
Use Custom UVs (B)По умолчанию указано значение FALSE. Если будет значение TRUE, функция будет вычислять внутренние UVs с помощью CustomUVs, которые являются компьютерными в вершинном шейдере. Это в основном важно для мобильных устройств, но может сохранять инструкции пиксельных шейдеров на любой платформе. Если указано значение True, вы должны подключить выходы X, Y и Z функции к соответствующим пользовательским UVs, а затем подключить правильные UV узлы к двум входам внизу.
Custom UV, XY (V2)Если вы укажете CustomUV, вы должны поместить узел координат текстуры, который имеет индекс, установленный в индекс, где вы подключили вывод «X, Y» к вашим вложениям материала CustomUV.
Custom UV, Z(S)Если вы укажете CustomUV, вы должны поместить узел координаты текстуры, который имеет индекс, установленный в индекс, где вы подключили вывод «Z» к вашим материалам входов CustomUV. Возможно, придется, чтобы маска компонента перешла к правильному компоненту.
Shadow Volume Texture (T2d)Здесь вы должны подключить текстуру Карты Глубины в качестве объекта текстуры или параметра объекта текстуры.
Self Shadow OffsetЭто должно быть установлено на небольшое отрицательное число, такое как -0.01. Что это делает – это уклонение от тени для предотвращения случайного появления объектов в тени.
Transmission Mip BiasВ настоящее время параметр отключен, но позже будет подключен. Позволяет MipBias использовать текстуру глубины, которая используется для передачи.
Opacity (S)Используется только для Внутренней передачи. Этот параметр влияет только на выход «Internal Transmission Mask», а не на выход Тени.
Shadow Accumulation Distance (S)Его можно использовать, чтобы настроить то, как быстро тень будет переходить в полную черноту с расстоянием. Если установлено значение 1.0, тень будет очень резкой. По мере уменьшения значения до 0 свет будет пропускаться через более тонкие объекты.
Blur using offset RGB texture (B)По умолчанию указано значение FALSE. Когда указано – TRUE, это позволяет вам компенсировать каждый из каналов R, G, B в текстуре карты глубины, подобной хроматическому (цветовому) отклонению. Затем функция будет смешивать результат каждого канала, который позволяет более широкое / более мягкое размытие, чем это обычно возможно с помощью этой технологии.
Пины выходаОписание
Internal Transmission MaskЭто результат внутренней передачи, через вход «непрозрачность». Хорошо иметь это как отдельный выход. Это позволяет вам умножать Transmission (Передачу) по пользовательскому цвету (я предложил VectorParameter для настройки), а затем Добавить этот результат к выходу «Shadow» ниже.
ShadowЭто основной теневой результат. Чтобы использовать его, просто умножьте этот вывод на желаемую текстуру и / или любые другие инструкции материала. Вы можете оттенять тень несколькими способами. Один из хороших способов – это использовать этот выход Тени для Lerp между цветом «Lit» и цветом «Shadow», который даст вам прямой контроль над каждым.
XYЭто нужно использовать, только если вы хотите использовать CustomUV для выполнения вычислений в вершинном шейдере. Если вы это сделаете, подключите этот пин к одному из доступных входов CustomUV на вашем материале.
ZЭто нужно использовать, только если вы хотите использовать CustomUV для выполнения вычислений в вершинном шейдере. Если вы это сделаете, подключите этот пин к одному из доступных входов CustomUV на вашем материале.

Пример настроек Внутренней Передачи:

настройки Внутренней Передачи UE4Left: Opacity = 1 ; Middle: Opacity = 0.2 ; Right: Opacity = 0.1

Пример передачи в материал листвы:

передача в материал листвы UE4