Создание локации под особенности виртуального продакшена
Данный проект является учебной работой студента Школы дизайна или исследовательской работой преподавателя Школы дизайна. Данный проект не является коммерческим и служит образовательным целям

Создание виртуальной локации осуществляется в игровом движке Unreal Engine 5.4.4.

Создание проекта: plugins, post process

Проект создается через Film, так как здесь уже автоматически включены некоторые нужные плагины. Далее надо проверить и подключить остальные: live link (система передачи данных из внешних устройств на площадке в Unreal Engine), nDisplay (система синхронизированного вывода изображения на все части экрана), camera calibration (калибровка между реальной и виртуальной камерой), ICVFX (набор инструментов для интеграции виртуального фона на площадке), Multi-User Editing (для корректного редактирования контента на съемочной площадке), DMX (если используется), OpenColorIO (корректная цветопередача между физической камерой, LED-экраном и локацией в Unreal Engine).

Исходный размер 2200x1500

Unreal Engine: Plugins

Исходный размер 2200x1000

Unreal Engine: Plugins

В сцену добавляется Post Process Volume, в Details с правой стороны необходимо прожать галочку infinite Extent Unbound (чтобы настройки пост процесса распространялись на всю сцену). Экспозиция в сцене будет настраиваться вручную: для этого нужно отключить галочку «Physical Camera», чтобы контент не имитировал экспозицию, как на стандартной виртуальной камере. Сама экспозиция устанавливается на 0, что даёт нейтральную точку отсчёта.

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

Исходный размер 2000x600

Unreal Engine: Details Post Process Volume

В разделе Color Grading необходимо сбросить первые три параметра в категории Misc на 0. Tone Curve Amount, Blue Correction, Expand Gamut, они управляют гамма-кривыми, которые обычно используются для художественной тональной коррекции внутри движка. Для виртуального продакшена это важно, так как контент, предназначенный для LED-экранов, должен выводиться в линейной гамме. Использование встроенных гамма-кривых в дополнение к гамме, присущей самой камере, приведёт к двойной гамма-коррекции, что исказит освещение и цветопередачу.

Исходный размер 1800x600

Unreal Engine: Details Post Process Volume

Система LUT для цветокоррекции также не используется, так как может привести к браку. Если наложить этот цветовой фильтр внутри Unreal Engine, а затем наложить еще один LUT на финальный съёмочный материал, это приведёт к искажению цветового пространства, неправильному контрасту и гамме.

Screen Space Effect (экранные эффекты), такие как Bloom, Grain, Vignette, Chromatic Aberration, Depth of Field, Motion Blur, Ambient Occlusion не включают.

Причины, по которым отключают экранные эффекты:

Создание стыков между нодами. В системе nDisplay каждая нода рендерит свою часть изображения. Экранные эффекты (screen space effects) могут создавать видимые стыки на LED-экране между этими частями. Расчёты эффекта не выходят за пределы каждой ноды, поэтому на стыках могут возникать визуальные швы, полосы или несовпадение освещения.

Некорректная имитация оптики. Эффекты вроде Bloom имитируют реальные оптические явления, но в виртуальной среде они создают некорректное освещение. В виртуальном продакшене такой способ не будет воссоздан правильно и не перекроет актера с декорациями, что приведет к браку.

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

В Project Settings также стоит установить следующие галочки:

  1. В Working Color Space выбирается линейное цветовое пространство (ACEScg) или другое, подходящее под LED-экран.
  2. В разделе Rendering, Anti-Aliasing сейчас часто используют либо Temporal Super Resolution, либо Deep Learning Super Sampling от NVIDIA.
Исходный размер 1900x200

Unreal Engine: Project Settings

Temporal Super Resolution — метод сглаживания и масштабирования изображения, который использует данные из нескольких последних кадров для создания высококачественного финального изображения с разрешением, значительно превышающим фактическое разрешение, в котором изначально был отрендерен кадр. В виртуальном продакшене при быстром движении объектов перед контрастным фоном эти методы могут вызывать эффект «двоения».

Еще один метод, который используют чаще — Deep Learning Super Sampling. Это технология нейронного рендеринга от NVIDIA, которая работает на видеокарте NVIDIA RTX. Как правило, обеспечивает лучшее качество изображения, особенно при прорисовке тонких линий, листвы и мелких деталей на расстоянии и обеспечивает большую производительность. Для ее включения требуется установка с официального сайта и включение плагина в настройках Unreal Engine.

Локация 1. Ландшафт, растительность

Так как для подготовки сцен в виртуальном продакшене часто сжатые сроки, нередко берутся готовые ассеты и перерабатываются под референсы художника-постановщика и технических требований виртуального продакшена. Основные ресурсы: «Fab», «Sketchfab», «Turbosquid», «CGTrager».

Сначала идет создание Landscape (ландшафта) и настраивается Foliage (растительность), отталкиваясь от референсов. Из ресурса Quixel Bridge в Unreal Engine и из Fab скачиваются нужные материалы для ландшафта и ассеты деревьев. Для данной локации использовался готовый пак «Forest — Environment Set» из «Fab».

Создается Landscape. В Details Landscape в качестве Material указывается MI_Terrain_Shader, он включает в себя логику, позволяющую рисовать всеми материалами земли, которые включены в пак. Около каждого материала нажимается +, создается Layer Info. Пятым слоем, а именно материалом с листьями на земле, с помощью кисти Paint красится весь лендскейп.

Исходный размер 2000x1080

Unreal Engine: Landscape

Исходный размер 2000x1080

Unreal Engine: Landscape

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

Для оптимизации растительности в Unreal Engine почти всегда применяется функция Nanite, которая эффективно управляет уровнем детализации.

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

Тем не менее, для обычных статических ассетов Nanite — это стандартный и рекомендуемый подход: меши работают корректно, обеспечивая высокую детализацию при сохранении приятной производительности.

Nanite

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

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

Исходный размер 692x388

«Nanite: Everything You Should Know Unreal Engine 5» за авторством «William Faucher»

В локацию также как в техвизе добавляется камера с нужными настройками. Создается Sequencer, в него перетаскивается камера и на нее ставится ключ. Создается блокинг: добавляется куб относительно кадра для будущего дома вдали. Для данной локации также нужна дорога, drag and drop’ом из Content Browser перетаскивается в сцену.

Исходный размер 2000x1080

Unreal Engine: Blocking

Чтобы просмотреть детальные настройки меша, необходимо дважды кликнуть по нему в Content Browser.

Исходный размер 2300x1200

Unreal Engine: Nanite

Этот статический меш уже включает в себя поддержку системы Nanite. Чтобы ее активировать, надо прожать галочку «Enable Nanite Support». Настройка «Preserve Area» включается только для объектов с альфа-маской, например, для листвы, иначе они могут некорректно отображаться на большом расстоянии. У дороги простая плоская поверхность, эта галочка не нужна. Опция «Keep Triangle Present» работает аналогично инструменту «Decimate» (упрощение геометрии), позволяя уменьшить количество треугольников в модели. Иногда она дает хороший результат, но может и повредить геометрию меша, поэтому ее используют с осторожностью.

Nanite не работает со следующим:

  1. Прозрачные материалы (Translucent Blend Mode): Nanite не поддерживает материалы с режимом наложения «Translucent».

  2. Двусторонние меши (Two-sided faces) / Двусторонние материалы: Хотя Nanite может работать с двусторонней геометрией, он изначально не поддерживает свойство материала «Two Sided» напрямую так же эффективно, как сплошные меши.

  3. Скелетные меши (Skeletal Meshes): Изначально Nanite не поддерживал скелетные меши, но в последних версиях (UE 5.5+) была добавлена экспериментальная поддержка для них, данная функция все еще развивается.

  4. Активная деформация через WPO (World Position Offset): Деформация геометрии в реальном времени с помощью смещения мировых вершин (WPO) имеет ограниченную поддержку.

  5. Агрегатная геометрия: сложные структуры типа меха или волос, как правило, требуют специализированных методов рендеринга, которые несовместимы с текущей реализацией Nanite.

В виртуальном продакшене система уровней детализации (LOD) не используется, так как может приводить к видимому браку съемочного материала. LOD — это набор версий одной 3D-модели с разным количеством полигонов: от LOD 0 (максимальная детализация для вида вблизи) до LOD 1, 2, 3 и далее (уменьшенное количество полигонов для дальних планов). Использование этой системы в процессе съемки приводит к тому, что при перемещении камеры высокополигональный объект может резко смениться низкополигональным прямо в кадре. Такая оптимизация подходит для игр, но не для задач виртуального продакшена, требующих стабильного и высокого качества изображения.

Исходный размер 2000x1080

Unreal Engine: LOD Settings

В данном случае нужно поставить следующие настройки: В графе Lod Picker = LOD 0. В графе LOD Settings LOD Groupe = None, LOD Import = LOD 0, это первая самая детализированная версия и она не должна меняться. Галочка на Auto Complute LOD Distance выключена, она отвечает за то, чтобы движок сам решал, на каком расстоянии переключать уровни. Number of LODS = 1. После внесенных изменений кнопка Apply Changes станет активной, необходимо ее прожать и сохранить настройки ассета.

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

Исходный размер 2000x1080

Unreal Engine: LOD Settings

В настройках Lit — Landscape — LOD можно отметить фиксированный уровень детализации, в данном случае LOD — Fixed at 0. В details Landscape также сделать ограничение LOD-ов: Max LOD Level = 0.

С помощью Visualizers проверяется, действительно ли выключена система LOD-ов: если ландшафт при нажатии целиком превращается в серый, значит, все правильно.

Исходный размер 2000x1080

Unreal Engine: LOD Settings

После перехода из Selection Mode обратно в Landscape Mode в режиме Sculpt делается скульптинг земли под нужную форму: вдалеке от камеры дорога снижается, вокруг нее надо сделать небольшие реалистичные горки листьев, чтобы ее немного «утопить».

Основные инструменты для создания ландшафта: Brush Size — размер кисти, сила воздействия — Tool strength, форма кисти — Brush Falloff, Smooth (сглаживание), Flatten (выравнивание). Если на ландшафте возникают острые углы, то стоит на таких местах уменьшить размер кисти и с помощью Blush Falloff и Smooth надавливать на угол и смягчать.

Исходный размер 2000x1080

Unreal Engine: Landscape sculpting

Добавляются ассеты забора, камня, бревен с точно такой же логикой оптимизации, как с дорогой. У ассетов бревен и камней добавляется галочка Preserve Area в системе Nanite, так как это не плоская геометрия.

Исходный размер 2000x1080

Unreal Engine: Nanite Settings

Землю с листьями нужно сделать ярче и светлее под референс. Landscape — Material instance — layer 5 (используемый материал), двойной клик. В Material Instance прожать 2 параметра тинта, отрегулировать цвета на оттенок желтого и красного на свой вкус.

Исходный размер 2000x1080

Unreal Engine: Landscape Material

Для растительности у деревьев в Details Static Mesh предварительно надо убрать систему LOD и добавить Nanite. Для производительности деревья, что ближе к камере лучше ставить как Static Mesh, 2-3 штуки двух видов, чтобы можно было менять их местоположение для кадра, а для фона оставить Folliage из деревьев двух других видов. В Details каждого дерева в Nanite надо прожать галочку Preserve Area, чтобы на большом расстоянии они работали корректно и также Keep Triangle Present для деревьев на фоне, которые добавятся через Folliage, так как это улучшит производительность.

Исходный размер 1600x1300

Unreal Engine: Foliage

Добавляются несколько Static Mesh деревьев на передний план. Далее для размещения растительности в режиме Foliage Mode необходимо добавить нужные Static Mesh деревьев с помощью «+ Folliage». После добавления напротив нужных мешей нужно установить галочку, чтобы кисть использовала только их для рассадки.

Brush Size определяет область, в которой будет размещаться растительность. Density контролирует количество объектов, которые размещаются в данной области кисти. Scale X рандомизирует размер рассаживаемых объектов. Рядом с режимом Paint также есть множество других режимов, например, Fill, с помощью которого можно заполнить сразу весь ландшафт или Erase, стирающий объекты с определенной области.

Исходный размер 1584x792

Unreal Engine: High Resolution Screenshot

Далее упрощается процесс регулировки материалов деревьев для работы на площадке. У каждого дерева есть свой Material instance, с помощью которого можно регулировать его настройки. Но если это система деревьев из одного пака, то вероятнее всего настройки Material Instance у них не отличаются, поэтому можно вложить один и тот же Material Instance в два вида деревьев в режиме Folliage.

Чтобы это реализовать, необходимо перейти в режим Foliage Mode и выбрать один из видов деревьев в списке мешей. В панели его свойств нужно найти раздел Nanite Override Materials и нажать кнопку с плюсиком (+) три раза, так как именно эти модели деревьев используют три слота материалов. Далее необходимо взять Material Instance (экземпляры материалов) из второго вида дерева, который также используется в Foliage Mode, и перетащить их из Content Browser в созданные слоты ([0], [1], [2]) первого дерева. В результате оба меша (оба вида деревьев) будут ссылаться на один и тот же набор ассетов материалов.

Исходный размер 2200x1300

Unreal Engine: Folliage

Теперь, если зайти в любой из этих общих Material Instance (открыв его двойным кликом в Content Browser или в панели Nanite Override Materials), можно отрегулировать любой параметр в панели Details, и он будет применен сразу к обоим видам деревьев, используемым в Foliage. Например, можно легко изменить базовый цвет (Base Color) листочков или скорость и интенсивность анимации ветра и изменения коснутся всей синхронизированной растительности на уровне.

Исходный размер 2300x1200

Unreal Engine: Folliage

Экстерьерное освещение, атмосфера

Далее идет работа с освещением и уже после дополнительная детализация. Удаляется свет который был до этого в сцене, для порядка создается папка Light. Справа сверху из Lights добавляется в сцену Directional Light, Sky Light, Exponental Fog, Sky Atmosphere.

Исходный размер 1950x1080

Unreal Engine: Light

Directional Light — солнечный / лунный свет. В Details интенсивность (intensity) дефолтно выставляется на 3.14 (число Пи). Это значение, основанное на физических принципах, которое помогает достичь предсказуемого и реалистичного результата в системе PBR, как точка отсчета, которую можно впоследствии корректировать. Обычно в сцене используют 1-2 Directional Light, не больше. Если первый является основным источником света, то второй может помогать имитировать нюансы естественного освещения, реального мира.

Также в виртуальном продакшене рекомендуется использовать Lumen вместо Path Tracing в качестве системы динамического освещения. Lumen предлагает высокую производительность и отличное качество в реальном времени, в то время как PathTracing имеет меньшую дальность прорисовки и требует высокую производительность. В Project Settings устанавливаются следующие настройки: Dynamic Global Illumination = Lumen, Reflection Metod = Lumen, Path Tracing выключен.

Но галочки напротив Support Hard Ray Tracing и Use Hardware Ray Tracing должны стоять, это позволит Lumen задействовать аппаратное ускорение для более качественных отражений и глобального освещения. В то же время Ray Traced Shadows должно быть отключено, так как эта настройка требует высокой производительности.

Исходный размер 1900x900

Unreal Engine: Project Settings

Для достижения качественного и физически корректного освещения в виртуальном продакшене обычно используют сочетание Lumen и Virtual Shadow Maps (VSMs). VSMs обеспечивают высококачественные тени с хорошей производительностью, также подключается Enable Virtual Textures, это обеспечивает базовую инфраструктуру, которая позволяет как Nanite, так и VSMs эффективно работать с высокодетализированными данными в виртуальном продакшене.

Исходный размер 1900x200

Unreal Engine: Project Settings

С помощью сочетаний клавиш Ctrl + L движением мыши меняется угол освещения от солнца. Осенью солнце находится значительно ниже над горизонтом, чем летом. Из-за низкого угла освещения тени становятся очень длинными и вытянутыми, это создает драматичный, графичный эффект в ландшафте. C помощью rotation детальнее можно отрегулировать направление теней.

Исходный размер 1950x1080

Unreal Engine: Directional Light

Light Color у Directional Light стоит сделать желтоватого или оранжевого отенка, также можно добавить температуру цвета чтобы оттенок был теплее. Параметр Source Angle задает общую мягкость тени, а Soft Source Angle регулирует, насколько сильно тени будут размываться на больших расстояниях. Так как в сцене облачная, туманная погода тени должны быть мягкими.

Исходный размер 1950x1080

Unreal Engine: Directional Light

Далее добавляются облака (Visual effects — Volumetric Cloud) для усиления реалистичности и легкого оранжевого света от солнца. Для правильного внедрения этого эффекта в Directional Light надо проверить галочку напротив Atmosphere Sun Light, и добавить Cast Cloud Shadow, чтобы облака отбрасывали тени на среду и отрегулировать их интенсивность примерно на половину, что подчеркивает поддержание читаемости и глубины сцены.

Исходный размер 1700x400

Unreal Engine: Directional Light

В Cloud Scattered Luminance Scale можно добавить желтый оттенок для облаков, имитируя закат. Start Distance регулирует его обильность в зависимости от дистанции от камеры.

Исходный размер 1920x1080

Unreal Engine: Directional Light

Туман

В виртуальном продакшене Volumetric Fog обычно не используется, предпочтение отдается Exponential Height Fog. Волюметрический туман плохо синхронизируется между несколькими рендер-нодами, что приводит к артефактам сшивки и «гостингу» на экране. При быстрых движениях камеры или объектов Volumetric Fog не успевает корректно пересчитываться, оставляя за предметом чёрные полосы. Эта проблема частично решается с помощью добавления фруструма (то есть используются границы видимости камеры для расчета сложного визуального эффекта), однако в виртуальном продакшене у многих, даже крупных студий фруструм не используется. При этом, теоретически, Volumetric Fog использовать возможно, но при тщательном контроле и понимании его ограничений.

Исходный размер 1920x1080

Unreal Engine: Exponental Height Fog

Для регулировки силы тумана у Exponential Height Fog крутится Fog Density по собственным ощущениям. Fog Height Falloff устанавливается для того, чтобы у тумана был виден переход, ближе к земле — плотнее, выше — более рассеянный. И Fog Inscattering Color также стоит поменять на голубо-серо-зеленый для придания красивого контраста с облаками и листьями.

Исходный размер 1166x583

Unreal Engine: High Resolution Screenshot

Easy Fog представляет собой хорошую альтернативу полноценному Volumetric Fog, особенно когда требуется баланс между качеством изображения и производительностью. Этот инструмент реализован как Blueprint Actor, позволяющий наложить одну из восьми встроенных текстур облаков или тумана. Несмотря на то, что это по сути 2D-эффект, он грамотно использует данные о глубине сцены для создания убедительной иллюзии трехмерного тумана. Хоть он и не обеспечивает стопроцентной физической корректности, свойственной настоящему волюметрическому рендерингу, но гарантирует отличное визуальное качество на заднем плане.

Исходный размер 2300x1200

Unreal Engine: Easy Fog

Чтобы добиться реалистичного эффекта настройки Easy Fog позволяют точно регулировать плотность и цвет тумана, а также интегрировать его в общее окружение через правильные параметры в Details. Для качественного «вписывания» тумана в пространство рекомендуется использовать пипетку в Base Color Tint, чтобы взять оттенок уже существующего Exponent Height Fog из сцены. Управление густотой тумана осуществляется параметром Fog Density. Имитацию глубины и объема можно создать с помощью Geometry Fading Distance. В данном случае он хорошо обогатит цветовую палитру облаков с оранжевым и желтым тоном, придавая им визуальный объем.

Исходный размер 1920x1080

Unreal Engine: Easy Fog

Саму форму тумана можно менять drug-and-drop’ом из контента, добавляя в Blueprint, не забывая также кроме Opacity Map перетащить Normal Map.

Для детализации сцены используются камни, бревна, которые размещаются по той же логике, что и деревья: объекты на переднем плане представлены как Static Mesh, а на заднем плане — как Folliage с наибольшей производительностью, для них также рекомендуется применять Nanite Override Material для интеграции единого Material Instance. Например, один общий Material Instance для всех камней и другой — для всех бревен.

Исходный размер 1724x862

Unreal Engine: High Resolution Screenshot

Niagara

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

Для общей картины можно добавить эффект дождя и падающих листьев. Для начала надо открыть двумя кликами Niagara System, которая находится в папке с эффектом в Content Browser. В System Overview находятся ноды системы, у каждой из них справа в Details есть параметр Determinism.

Исходный размер 2200x1300

Unreal Engine: Niagara Settings

Галочку нужно прожать на каждой ноде, нажимая на нее и переходя в Details. Вместе с этим каждый раз задается определенное фиксированное число (random seed) допустим, 1. Нажимается Compile для обновления настроек. Можно интегрировать эффект в сцену, перетащив Blueprint во Viewport.

Исходный размер 2200x1300

Unreal Engine: Niagara Settings

Под Determinism есть еще одна важная настройка: Slim Target. Она должна стоять на GPU, а не на CPU, так как в виртуальном продакшене все синхронизируется через видеокарты. И чтобы не было стыков между нодами, настройка переключается на GPU.

Однако, есть системы, у которых в логике включена работа CPU. Такие Niagara стараются не использовать.

Исходный размер 2300x1200

Unreal Engine: Niagara Settings

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

Ассеты, моделинг

Для финального штриха в сцене нужен ассет собора. Высокий polycount (количество полигонов в 3D-моделях), и просто большое количество отдельных моделей в сцене являются основными факторами, напрямую влияющими на скорость рендера и, как следствие, на частоту кадров (FPS).

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

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

Исходный размер 2300x1200

Assets, Modelng: Maya

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

Поэтому, если использовать данный ассет его надо почистить от многих деталей: скульптуры, решетки на окнах, знаков и тд, так как этого все равно не будет видно в кадре. После удаления ненужных элементов и чистки сетки от N-гонов и неправильных нормалей сетка вышла на 9000 треугольников и 4000 фейсов.

Исходный размер 2300x1200

Assets, Modelng: Maya

Всю развертку ассета обычно стараются поместить в один UDIM (то есть в стандартное пространство 0-1), поскольку использование нескольких UDIM-ов может потреблять слишком много ресурсов для real-time рендера в Unreal Engine. Если же детализации одного UDIM-а не хватает и текстуры получаются слишком маленькими, то модель делят на части, назначают им разные материалы и загружают в Unreal Engine через несколько слотов материалов, чтобы обеспечить нужную плотность текселей.

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

Текстуры, управление материалами

0

Cathedral: 3d model. Texturing: Substance Painter

В данном случае все UV уложились в один UDIM, но модель была поделена на 3 слота материалов: камень, крыша и метал на ней, чтобы было проще их красить в Substance Painter. C использованием комплексного подхода применялись Smart Masks, Generator’ы, различные текстуры, материалы и Smart Materials, что позволило добиться желаемых темных реалистичных оттенков. Для корректного переноса текстур из Substance Painter в Unreal Engine 5 при экспорте необходимо выбрать пресет настроек Unreal Engine 4 (Packed) и убрать каналы, которые не использовались, например, Emissive.

При импорте ассета надо прожать галочку Build Nanite и Create New Materials: так ассет импортируется с необходимым количеством слотов материалов. Импортировать текстуры можно также как и ассет: нажав на ПКМ по пустому пространству в Content Browser и выбрав import to из выпадающего меню.

Исходный размер 2200x700

Unreal Engine: import settings

Чтобы подключить текстуры в материалы нужно перетащить Base Color, Normal Map и ORM каждый в свой слот, предварительно его открыв. Но перед этим, нажав на текстуру ORM, отключить у нее галочку sRGB в Details: в этой текстуре данные цвета не нужны, они неправильно влияют на получившийся материал. Далее канал каждой текстуры подключается в главный узел материала должным образом, после чего текстуры переводятся в Parameter.

К примеру, в данном случае ассет имеет три слота материала: крыша, метал и камень. По названию определяется, какая текстура принадлежит какому материалу и drug-and-drop’ом перекидывается в пространство Material Graph.

Исходный размер 1500x1080

Unreal Engine: Materials

Исходный размер 2200x1300

Unreal Engine: правильное присоединение каналов текстур к узлу материала

Исходный размер 1700x1080

Unreal Engine: отключение sRGB у текстуры ORM

Перевести текстуры в параметры можно нажав на них ПКМ и на Convert to Parameter в выпадающем окне. Текстуры нужно переназвать должным образом: основной цвет — Base Color, карта нормалей — Normal, карта с каналами отвечающими за рафнесс, амбиент оклюжон и металлик — ORM.

Исходный размер 1700x1080

Unreal Engine: перевод текстуры в Parameter

Теперь, если нажать на каждый слот материала правой кнопкой мыши в Content Browser и сделать от него Material Instance, далее открыть Material Instance и прожать галочки напротив каждой текстуры, то можно переложить слоты Material Instance в Materials собора: это даст возможность управлять материалом. Для детального управления материалом на съемке прописывается специальная логика в каждом материале, которой можно потом управлять с помощью Material Instance.

Исходный размер 1700x1080

Unreal Engine: Create Material Instance

Исходный размер 1500x1080

Unreal Engine: Material Instance

В материалы в виртуальном продакшене добавляют обычно базовые текстуры: Base color, Normal, ORM. Иногда добавляется еще одна RGB-текстура с масками в каналах для блендинга материалов или добавления эффектов. Например, красный канал может контролировать появление грязи, зеленый — царапин, синий — мокрых следов. Основные параметры, которые редактируются в Material Instance на площадке: Color Correction, Metallic, Roughness, Saturation.

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

Material Instance Video-Tutorial

Loading...

Есть еще один хороший способ увеличить производительность: симулировать пространство в окне с помощью эффекта параллакса, а не добавлять реальные 3D-ассеты внутрь помещения. В качестве помещения используется плоскость со специальной куб-картой (Cubemap), которая имитирует пространство в зависимости от угла обзора камеры.

CubeMap: Fake Interior Video-Tutorial

Loading...

Кроме функции Material Instance управлять материалами на площадке можно еще с помощью Material Parameter Correction. MPC чаще всего используется для управления глобальными эффектами и параметрами окружающей среды, которые должны быть синхронизированы по всей сцене, например, время суток, количество снега, воды. В том числе эта функция связывает множество объектов, (например, несколько блюпринтов или статик мэшей), так как на площадке часто есть нужда управлять одним параметром, но так, чтобы он влиял на множество нужных ассетов: на их отражаемость, цвет и яркость.

Демонстрация MPC показана на примере изменения настроек интенсивности и цвета свечения нескольких ламп.

Material Parameter Collection Video-Tutorial

Loading...

Локация 2. Ассеты

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

Балкон: 10000 фейсов, 20000 треугольников. Дверь: 1500 фейсов, 3000 треугольников Стена: 2900 фейсов, 5900 треугольников. Лестница: 6500 фейсов, 13000 треугольников Стул: 440 фейсов, 480 треугольников Скатерть: 3000 фейсов, 6000 треугольников Стол: 2918 треугольников

0

Maya: Asset wireframe

Были сделаны также и текстуры c нуля. Хендпеинт в виртуальном продакшене почти используется, так как проекты в большинстве случаев создаются под фотореализм: в основном это сборка процедурных текстур в Substance Painter, различная комбинация масок, шумов, генераторов и так далее.

0

Substance Painter: textures

0

Substance Painter: textures

0

Substance Painter: textures

Также в виртуальном продакшене часто пользуются нейросетями, например Tripo3D, Luma Ai и другими. Кроме моделей с помощью нейросетей создают также и оптимизированные текстуры (Gemini Nano Banana, DeepSeek, Midjorny). Например, по фотографии здания она может сформировать две отдельные текстуры — одну с информацией о цвете и внешнем виде поверхности (слой цвета), а вторую с маской и альфа-каналом, который определяет прозрачность (например, где дощечка окна, а где его стекло). Такой способ нужен, если, например, в локации требуется определенное здание, существующее в реальном мире. В итоге получается набор текстур, готовых для использования в 3D-движке, где один слой задает цвет, а второй — прозрачность и форму маски.

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

Исходный размер 1501x757

Unreal Engine: High Resolution Screenshot

В сцену перетаскивается Plane, создается материал для окна c таким подключением текстур: в Details Blend Mode — Translucent, текстура с Base Color подключается в Base Color, у текстуры с маской канал R в подключается Opacity. Далее этот материал перемещается в Material Slot окна.

Исходный размер 2200x1300

Unreal Engine: Material

Еще одна причина, почему стоит создавать ассеты с мелкими деталями таким способом, это то, что обычная геометрия может «алясить» (мерцать и иметь ступенчатые края), из-за того что мелкие объекты находятся близко друг к другу. А данный способ помогает и убрать баг, и оптимизировать сцену.

Некоторые готовые модели из библиотек, которые также использовались для создания бара:

Колонна: 1200 треугольников Софа: 880 треугольников Картина: 92 треугольника Комод: 2700 треугольников Вешалка: 1900 треугольников Книга: 400 треугольников Виниловые диски: 1300 треугольников Свечи на стол: 2800 треугольников Тарелка: 1700 треугольников Бутылка: 500 треугольников

0

Некоторые готовые модели для локации

Материал стекла с динамическим освещением Lumen. Видео-туториал

Loading...
Исходный размер 1900x933

High Resolution Screenshot

Интерьерное освещение

Для настройки света внутри здания есть 3 источника: Spot Light, Point Light и Rect Light.

Point Light используется для точечного, локального освещения и излучает свет во всех направлениях подобно лампочке или свечи. Самый главный источник освещения в баре — свеча, поэтому в первую очередь надо использовать его. Все источники света надо переводить в movable: источник света должен иметь возможность менять параметры во время работы камеры для имитации натурального физического освещения.

Для начала надо активировать огонь на свечах: можно его добавить с помощью динамической ниагары, но если свечей слишком много, то это может повлиять на производительность. Поэтому второй вариант — наложить огонь с помощью маски Base Color и Opacity на Plane, подобранный под размер огня свечи, (так же, как делалось с окном, только дополнительно канал от Base Color подключается к Emissive для того, чтобы огонь был подсвечен).

Исходный размер 2300x1200

Unreal Engine: Material

Исходный размер 2200x1300

Unreal Engine: Point Light

Далее в сцену добавляется Spot Light чтобы имитировать естественный свет, идущий из окна, но из-за того, что окно было реализовано не как полноценный геометрический объект, а в виде текстуры с маской прозрачности, прямой источник света будет проходить сквозь него без создания теней и просто подсветит текстуру. Можно данный источник света разместить справа, где оконный проем — геометрия. С помощью Attenuation Radius и Outer Cone Angle можно отрегулировать ширину пучка света и расстояние лучей. С помощью Light Color сделать источник света слегка желтым и отрегулировать интенсивность в Intensity. Так как погода облачная, немного добавляется Soft Source Angle для смягчения теней, источник света — Movable.

Исходный размер 2200x1300

Unreal Engine: Spot Light

Rect Light имитирует свет от прямоугольного источника, подходит для общего освещения комнат и поверхностей, таких как стена или пол. В сцене с помощью них можно создать естественное фейковое освещение, повысив яркость внутри помещения. Здесь они размещены на потолке и на полу, можно также пробовать разную интенсивность и цвет: добавлять холодный оттенок, чтобы контрастировал с теплым от свечей и ламп и соединялся с туманом на улице. C помощью Source Width и Height можно сделать им форму, чтобы не подсвечивали лишние ассеты в сцене.

Исходный размер 2300x1200

Unreal Engine: Rect Light

В конце можно добавить в темные углы легкий Point Light, чтобы чуть уменьшить тени и сделать картинку глубже, также Easy Fog и доработать локацию.

В Unreal Engine есть функция света, Light Function. Данная функция помогает создать реалистичных узоры теней от листвы деревьев или жалюзи, имитацию работы проекторов (проецирование логотипов или изображений), а также добавление динамики и атмосферы с помощью анимированных материалов. Данную функцию можно применить к источнику освещения, отвечающему за свечи и сделать его мигающим, более реалистичным.

Light Function Video-Tutorial

Loading...

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

Исходный размер 2560x1440

«Жора в огне» кадры со съемок

Вместо 3д персонажа можно добавить птиц. Для этого нужно перетащить Skeletal Mesh птицы в сцену, добавить ее из Outliner в Sequenser, нажать на «+» для добавления анимации. Далее с помощью ключей (клавиша S) зафиксировать ее начальное и конечное положение в Sequenser.

Исходный размер 2300x1200

Unreal Engine: animation in Sequenser

Исходный размер 2300x1200

Unreal Engine: animation in Sequenser

Исходный размер 1567x543

Unreal Engine: animation in Sequenser

Niagara Falling Leaves Video-Tutorial

Loading...

На финальном этапе создания локации в настройках Post Process Volume часто применяются Saturation, Contrast и Gamma для коррекции изображения.

Исходный размер 2200x1300

Unreal Engine: PostProcessVolume

Location: Render

Loading...
Исходный размер 1920x1080

Локация 1

Исходный размер 1920x1080

Локация 2

Создание локации под особенности виртуального продакшена
Проект создан 10.12.2025
Глава:
3
4
5
6
7
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше