ИгрыХабрахабр

[Перевод] Симулируем реалистичную реку в Houdini и Unreal Engine 4

Тогда разница была очень заметной, особенно если сравнивать игры прошлых поколений и тот же Crysis. Когда только начался переход с DX9 на DX10 стало появляться много игр с круто смоделированной водой с правильными эффектами. Поэтому когда наткнулся на гайд, как сделать простую, но реалистичную симуляцию реки через плагин Houdini для UE4, то даже не стал задумываться и быстро перевел.

Пролог

  • Скачайте ассеты Unreal и Houdini. Видео по установке — тут.
  • Большую часть проекта я следовал туториалам Бена Шрайвера и Андреаса Глэда.
  • Не бойтесь нод и скриптов. Это не так сложно, как может показаться.
  • Для воды я использовал карту нормалей из Unreal Starter content.

Введение

Меня зовут Саймон. Я начал программировать на QBasic и Pascal еще в молодости (вот примеры), сразу осознал, что кодить сложно, и перешел в 3D-искусство. При этом я всегда сохранял интерес к технической стороне создания игр — вылилось в то, что я стал VFX-художником. Эта профессия хорошо сочетает в себе искусство и технологии.

Сейчас работаю над WiLD. Я работал 3D-художником над Sacred 2 и X:Rebirth, и VFX-художником над RiME, The Invisible Hours.

У меня также есть несколько личных проектов, связанных с разработкой игр: блог Game Art Trick, немецкий Game Dev Podcast и YouTube-каналы с туториалами по Unreal и Houdini.

Знакомство с Houdini

Я подружился с Houdini во время работы над The Invisible Hours. Тогда я сделал небольшой симулятор жидкости, который можно было приостановить, развернуть и воспроизвести задом наперед в реальном времени. Результат был таким:


Источник: Симуляция жидкости из The Invisible Hours

К счастью, удивительная технология под названием Vertex-Count-Agnostic Morph Target-Based Fluid Animation была реализована в Houdini, и поэтому я смог добавить свою симуляцию жидкости в игру. Я понятия не имел, как добавить жидкое моделирование в Unreal. Технология первоначально была разработана Норманом Шааром.


Источник: Vertex-Count-Agnostic Morph targets в UE4 Нормана Шаара

Если вы хотите узнать больше о реализации, то посмотрите этот раздел моего доклада Cool Stuff with Textures:

Эффект реки: начало проекта

Я хотел узнать, как сделать процедурно-генерируемую реку для Realtime VFX River Challenge, но понятия не имел, с чего начать. Случайно я наткнулся на шикарный туториал от Бена Шрайвера, где он рассказывает о реках в Horizon Zero Dawn. Меня зацепило и я решил попробовать!

Кстати, есть еще один очень крутой туториал по рекам Houdini от Андреаса Глада:

Эти видео очень помогли мне в начале и стали фундаментом.

Очень сложный способ построения ландшафтов

Рельеф был очень сложным. Проиллюстрирую процесс создания, чтобы все поняли:


Источник: Создание местности в Houdini

Это слишком просто. Шучу.

Эффект реки

Первые шаги на 100% скопированы из туториала Бена, и они крутые. Сначала вы создаете сплайн и даете ему «упасть» на местности. Это делается путем считывания высоты рельефа в точках сплайна, а затем перемещения точек на эту высоту:

Затем вы позволяете сплайн-точкам «скатиться» вниз по склону, чтобы лучше интегрировать реку в рельеф:

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

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

Небольшой скрипт на Python гарантирует, что точка сплайна в 3D-пространстве никогда не будет выше, чем предыдущая:

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

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

Наиболее важным моментом является то, что только внешние края реки снова выравниваются с рельефом (как мы это делали со сплайном в первую очередь): Давайте быстрее перейдем к созданию геометрии реки, так как все это прекрасно объяснено в видео Бена.

Деформирование ландшафта согласно потоку

Опять же, это 100% рабочий процесс Бена, начинающийся с перемещения рельефа ниже геометрии реки, чтобы они никоим образом не пересекались:

Если они попадают в геометрию реки, то эти точки переместятся вверх в место попадания: Затем для каждой точки местности вы проводите лучи вверх.

Каждая точка, которая никуда не попала, получит первоначальную высоту.

На этой гифке видно, что происходит при изменении сплайна:

Теперь она готова для использования в Unreal: Затем область высоты ландшафта преобразуется в полигоны и повторно перемешивается.

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

Геометрия реки

Геометрия реки, которую вы видели раньше, была использована только для вырезания местности. Настоящая река немного тоньше, имеет UV и была разделена (обратите внимание, что мои цвета склонов все еще там):

Генерация UV

Поскольку сплайн всегда варьируется по длине, UV должен адаптироваться к этому. К счастью, это очень легко в Houdini. Сначала вы создаете UV в 0-1-UV-Space, а затем измеряете длину сплайна. Это значение можно использовать для масштабирования UV. Здесь вы видите, как я меняю сплайн, а в нижней части — как UV автоматически адаптируется. Поверьте мне, если вы однажды попробовали это, то больше никогда не захотите создавать UV вручную.

Русло

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

А вот пример с использованием маски в материале для присвоения различных значений расплывчатости и шероховатости:

Карта течения

Создать карту течения реки с Houdini очень легко. Вы просто говорите специальному ноду «это моя геометрия реки, а это сплайн, который указывает направление реки» и бум, геометрия внезапно получает цвета вершин, представляющие поток реки:

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

Нет необходимости переключаться между Unreal и Houdini. И самое крутое: вы можете вызвать запекание карты потока в Unreal! Здесь вы видите, как я меняю препятствия, а затем визуализирую новую карту потока (учтите, что запекание занимает больше времени, чем на гифке): Просто выставьте кнопку Render в Houdini в качестве параметра.

Маска пены

Чтобы сделать пену на воде вокруг препятствий, я использую так называемый нод isoOffset. В основном он хранит расстояние до объекта в цвет вершины реки. Затем я добавил немного шума и маска готова:

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

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

Системы частиц

Я отметил, где находятся верхняя и нижняя части моего каскада, поэтому могу фильтровать эти элементы (линии использовались для создания геометрии реки), создать точку в их центре и скопировать в нее dummy-box. Позже заменим ее на систему частиц в Unreal:

Эти ребра пересечения имеют точки. Для частиц вокруг препятствий я использую нод под названием Intersection Analysis, чтобы получить пересечение препятствий и реки. К их случайному числу я снова копирую dummy-box (который позже обменивается с системой частиц в Unreal):

Так это выглядит, когда я заменю dummy-boxes в Unreal:

Экспорт проекта в Unreal

Так называемый движок Houdini представляет собой плагин для Unity, Unreal, 3ds Max, Maya и Cinema 4D и выполняет сети нод, которые вы создаете в Houdini непосредственно в указанных программах. Мне нужно сделать так, чтобы появилась местность и река для сохранения Houdini-файла как цифрового ассета. Его можно импортировать и использовать, как любой другой ресурс в Unreal:

Теперь я могу изменить параметры (которые я выставил в Houdini) или изменить сплайн, чтобы река текла другим путем:

Материалы по-прежнему создаются и назначаются в Unreal, но вы можете назначить их предварительно (ниже мой туториал об этом).

Должны ли мы одинаково изучать рабочие процессы Houdini?

В Houdini предстоит многому научиться. Кроме того, эти геймдев-инструменты являются новыми, а в документации все еще встречаются неточности.

Мы часто работаем с передовыми технологиями, которые нужно сначала приручить. Но это обычная ситуация для разработчиков игр, не так ли? Thinking Procedural Discord полон крутых ребят, которые которые помогут и научат. Самое главное: вы не одиноки. В этих чатах вы даже можете найти разработчиков SideFX!

Ссылки

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть