Реалистичное освещение дымом с помощью 6-полосного освещения в VFX Graph

Моделирование и визуализация дыма и взрывов в реальном времени всегда было сложной задачей из-за сложного характера взаимодействия освещения и динамики.
Все больше технологий реального времени внедряют объемное моделирование жидкости и рендеринг, но это все еще слишком дорого для широкого использования в играх. Поэтому, как и в случае со многими другими проблемами рендеринга, нужно постараться максимально приблизить внешний вид при минимальных затратах.
Tech Stream 2022.2 представляет полный комплексный рабочий процесс (от DCC до Unity), который позволяет реалистично отрисовывать дым из запеченных симуляторов. Этот рабочий процесс масштабируется на всех платформах, при любых условиях освещения. Это решение также включает библиотеку готовых к использованию запеченных карт, которые позволяют легко вывести эффекты дыма на новый уровень визуальной достоверности.
Рендеринг дыма в играх чаще всего осуществляется с помощью текстурированных спрайтов, поскольку вычисление полностью объемного освещения слишком дорого для бюджета реального времени. Один из самых распространенных вопросов, когда речь заходит о спрайтах, - это: Как можно осветить дым, основываясь на плоской 2D-геометрии?
Существует несколько подходов, например, использование нормального отображения или использование полностью запеченной карты цвета. Однако этим подходам не хватает либо реалистичности, либо расширяемости, либо и того, и другого.
Введите 6-стороннее освещение - альтернативный подход к решению этой проблемы, который использует набор лайтмапов, содержащих реакцию дыма на свет, падающий с шести разных направлений. Эти лайтмапы запекаются в набор из двух текстур, а также альфа-канала и дополнительной маски излучения.

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

В вашем распоряжении несколько элементов управления, таких как цвет, поглощение, излучающий градиент и ремаппинг лайтмапа, для создания различных эффектов на основе одного и того же набора текстур. Это позволит вам повторно использовать ваши активы в различных сценариях.
Эта техника, известная под разными названиями (6-стороннее освещение, 6-точечное освещение, 6D lightmaps, 6-точечные lightmaps, smoke lighting и так далее), используется во многих AAA-играх - посмотрите этот отличный обзор техники, написанный бывшим техническим директором VFX игры.
Основные преимущества использования этой техники включают:
- Возможность рендеринга сложных световых взаимодействий, которые иначе невозможны в реальном времени, например, рассеивание с несколькими отскоками, поскольку они могут быть напрямую запечены из симуляции в лайтмапы.
- Улучшение визуального качества благодаря эффектам дыма, более интегрированным в мир благодаря улучшенному освещению - например, при добавлении в сцену дым будет реагировать на любое количество и все типы динамического освещения (например, направление, точка, область), а также на косвенное (например, зонды) и окружающее освещение. Поэтому один и тот же актив можно разместить в разных местах, но каждый экземпляр будет чувствовать себя принадлежащим к своему близкому окружению.
- Низкие накладные расходы, несмотря на высокое качество визуального ряда. Эффекты дыма на самом деле довольно экономичны в рендеринге, сравнимы с традиционным освещенным спрайтом.
- Экономия дисковой и текстурной памяти. Хотя текстуры для флипбуков всегда требуют много памяти, использование 6-полосного освещения позволяет повторно использовать одну и ту же текстуру в разных местах. Внешний вид дыма может сильно отличаться в зависимости от применяемых к нему вариаций (цвет, поглощение и т.д.), а также от условий освещения, в которых он находится. Чтобы сэкономить больше памяти, вы можете использовать запеченные векторы движения, чтобы уменьшить количество необходимых кадров (полезный инструмент для этого - TFlow от Tuatara в Unity Asset Store).

Один минус, о котором следует помнить, - это плоскость этого трюка. Если эта техника и создает впечатление объема благодаря реалистичному освещению, это все равно текстурный лист, а не объемный 3D-эффект. По этой причине он лучше всего подходит для фоновых эффектов, декоративных эффектов, таких как пар или взрывы. Чтобы придать большую глубину, необходимо использовать этот эффект с большим количеством частиц или сочетать его с объемными эффектами (например, локальным объемным туманом или объемными материалами в конвейере рендеринга высокого разрешения).
Вот типичные примеры использования:
- День: Имитация солнечного и небесного освещения, распространяющегося сквозь дым
- Ночь: Статические или движущиеся точечные светильники и прожекторы могут освещать дым
- Дым высокой достоверности
- Пыль
- Пар
- Объемные облака: 6-позиционное освещение для облаков-героев
- Продвинутые эффекты, такие как порталы, песчаные бури или торнадо
Мы предлагаем несколько инструментов, которые помогут в процессе создания лайтмапа. В репозитории VFXToolbox вы найдете экспортеры для Houdini и Blender, а также другие инструменты, такие как Image Sequencer, которые можно использовать для перепаковки 6-полосных лайтмапов или для настройки интенсивности цвета.
Все инструкции по установке инструмента можно найти в файле Readme.txt. Обратите внимание, что существует два варианта этого инструмента. Первый можно найти в Контексте объекта. Он основан на узле рендеринга OpenGL и работает очень быстро.
Второй вариант можно найти в контексте Stage и построен вокруг рендерера Karma. Они оба предлагают возможность рендеринга лайтмапов, эмиссии и экспорта во Flipbook.

Чтобы установить дополнение, следуйте стандартной процедуре в Blender. В меню "Параметры" установите файл unity_6way.py и включите дополнение. После этого на 3D-виде вы найдете панель в категории Unity.
Дополнение позволяет рендерить лайтмапы, рендерить излучающие каналы, выполнять базовый композитинг и создавать флипбуки из последовательности лайтмапов. Эти задачи могут выполняться как все сразу, так и по отдельности, причем каждый этап имеет индивидуальные настройки для контроля конечного результата.

Другие инструменты

Некоторые инструменты могут уже предоставлять официальные или созданные пользователями опции и плагины для экспорта 6-полосных лайтмапов.
Например, в EmberGen вы можете использовать опцию под названием "Six point" в узле Render. Обратите внимание, что этот рабочий процесс официально не поддерживается, поскольку мы не можем контролировать интенсивность света на этих картах. Тем не менее, вы можете найти его полезным, если будете настраивать его вручную.
Вы также можете создавать 6-полосные карты освещения с помощью собственных инструментов. Для этого вы можете выполнить описанные ниже действия и отформатировать упаковку.
Чтобы запечь лайтмапы, нам нужно отрендерить объекты шесть раз с разными настройками освещения.
Мы используем направленный белый свет с разным направлением для каждого рендера: сверху, снизу, слева, справа, спереди и сзади, все относительно камеры.
Излучаемая информация, например огонь, не является частью лайтмапов и может быть отображена позже на отдельной текстуре или помещена в дополнительный канал лайтмапов.
Данные для 6-полосных карт освещения упакованы в две RGBA-текстуры. Каждое из шести направлений световых карт хранится в цветовом канале (красном, зеленом или синем) двух текстур.
Кроме того, альфа-канал первой текстуры содержит прозрачность. Таким образом, альфа-канал второй текстуры остается доступным в качестве дополнительного канала. Текущий рабочий процесс дает вам возможность упаковать излучающий компонент в этот дополнительный канал.


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

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

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

На частицу также влияет непрямое освещение, в частности, световые зонды, адаптивные зондовые объемы (APV), амбиентные зонды и световые зондовые прокси-объемы (LPPV), в зависимости от того, какие типы активны в сцене. Для достижения наилучшей производительности можно использовать режим "Только окружающая среда", чтобы полностью пропустить цикл освещения и обеспечить очень дешевые вычисления освещения.

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


6-полосный вывод рендеринга освещения в VFX Graph предлагает различные элементы управления для настройки внешнего вида эффекта и создания различных эффектов с использованием одних и тех же лайтмапов.



Всего за несколько минут вы сможете добавить в свой проект красивый 6-полосный дым. Вы должны работать в Unity 2022.2 или выше и использовать VFX Graph и HDRP.
Чтобы вы могли быстро освоиться, мы создали библиотеку готовых к использованию карт. Мы предоставляем как высокоточные активы, которые вы можете обрабатывать и упаковывать по своему усмотрению - например, с помощью VFX Toolbox, - так и более компактные версии, легкие и готовые для вашей игры.

Чтобы создать эффект с помощью этих карт и 6-полосного освещения, выполните следующие действия:
- Перетащите карты в папку Asset в Unity.
- Создайте и откройте новый актив VFX Graph.
- Создайте новый Particle Lit Output и выберите его.
- В Инспекторе выберите Six Way Smoke Lit в выпадающем списке Material Type.

- Установите карты освещения положительных и отрицательных осей в контексте Output (Вывод) на карты, которые вы импортировали.
- Тестируйте при различных условиях освещения.
Чтобы узнать больше о VFX Graph в целом, посетите наш сайт и прочитайте нашу электронную книгу Окончательное руководство по созданию продвинутых визуальных эффектов в Unity.
В следующих итерациях 6-полосного освещения мы сосредоточимся на интеграции Shader Graph и поддержке Universal Render Pipeline (URP). У нас также есть идеи по устранению некоторых присущих этой технике ограничений (плоскостность, проявляющаяся при получении теней, лайтмапы, локальные для частицы и не учитывающие окклюзирующих соседей, и многое другое).
Мы также работаем над добавлением вывода Volumetric Fog в VFX Graph, что позволит визуальным эффектам генерировать объемный туман. Это позволяет еще больше усилить эффект дыма, сочетая эту функцию с 6-полосным освещением. Он уже доступен в альфе в версии 2023.1.a25.
И, конечно, мы стремимся к реальному объемному моделированию жидкости, воспроизведению и рендерингу. Все это даст вам полную палитру техник для создания красивых и реалистичных эффектов дыма в зависимости от ваших целевых платформ и бюджета.
Поделитесь с нами своими отзывами или задайте вопросы в нашей специальной теме на форуме Unity. Чтобы предложить новые возможности и проголосовать за рассматриваемые функции, ознакомьтесь с нашей публичной дорожной картой рендеринга.