Процедурное создание зданий

в 7:37, , рубрики: 3d-моделирование, Houdini, redshift, Дизайн игр, Моделирование зданий, процедурная генерация, Работа с 3D-графикой
image

Эйвинд Фиксдаль (Øyvind Fiksdal) поделился подробностями процедурного процесса создания дома и ландшафта в Houdini и рассказал о преимуществах такого подхода.

Введение

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

Работа в рекламной отрасли открывала все двери, но работа на одну компанию не дала мне возможностей реализации, поэтому я стал фрилансером. Через два года фриланса мы с бывшим коллегой решили объединиться и создать компанию под названием Trollskog.

Процедурный подход к проекту

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

При работе с полностью процедурными ресурсами в Houdini или любом другом ПО есть очень мало возможностей внесения художественных штрихов — можно только менять seed и надеяться, что получится что-то интересное. Когда работаешь под руководством арт-директора, вполне можно отдать на откуп рандомизации фоновые ассеты, но создание ассетов героев или создаваемой вручную деревни может оказаться для большинства из нас невыносимой задачей.

Процедурное создание зданий - 2

Процедурное создание зданий - 3

Процедурное создание зданий - 4

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

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

Стоит также заметить, что этот проект я делал примерно год назад, чтобы расширить свои познания в Houdini, поработать с VEX и понять, возможно ли использовать Houdini в конвейере продакшена.

Процедурное создание зданий - 5

Процедурное создание зданий - 6

Процедурное создание зданий - 7

Строительство дома: процедурный конвейер

Процедура, генерирующая готовый дом из низкополигональной основы, собрана из серии модулей. Когда говорят о модулях Houdini, часто имеют в виду цепочку нодов, выполняющих определённую задачу. Например, первый модуль считывает низкополигональную геометрию и распознаёт крыши, стены, двери и окна. Из него ответвляются несколько модулей, выполняющих вторичные операции. Например, крыша затем отправляется в следующий модуль, находящий конёк крыши и проверяющий, сможет ли он обнаружить шпиль. Далее данные отправляются в новый модуль, создающий черепицу, потом в ещё один для создания мха, потом для создания травы, и так далее.

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

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

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

Процедурное создание зданий - 8

Процедурное создание зданий - 9

Процедурный подход в сочетании с ручной работой

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

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

Процедурное создание зданий - 10

Процедурное создание зданий - 11

Изготовление материалов

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

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

Процедурное создание зданий - 12

Процедурное создание зданий - 13

Для финальной модели UV-развёртка в основном выполняется процедурно с помощью инструментов разработки игр, а другие части, например, балки и дверные проёмы развёртываются с помощью растягивания по кривым, имеющим UV-координаты.

Создание ландшафта

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

Процедурное создание зданий - 14

После завершения ландшафта мы можем измерить всевозможные топологические свойства: occlusion, кривизну, угол наклона и так далее. Они определяют расположение травы, её высоту и места размещения цветов или деревьев.

Ради вариативности материалы создаются комбинированием изображений и данных цвета.

Сами растения и трава являются экземплярами, которые создаются процедурно с помощью комбинирования нодов и VEX. Затем они превращаются в proxy Redshift, экземпляры которых создаются в зависимости от атрибутов ландшафта.

Готов ли проект и использованию в игре?

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

Процедурное создание зданий - 15

Процедурное создание зданий - 16

Процедурное создание зданий - 17

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

К узким местам проекта я бы причислил собственное ограниченное знание Houdini. Этот проект я начинал, чтобы изучить программу, и понятия не имел, к чему хочу прийти. В ретроспективе могу сказать, что с теперь имеющимися у меня знаниями я бы многое по-другому в этом и в других проектах. Ещё одним узким местом является ОЗУ — для работы в Houdini, а особенно при обработке VDB нужно много оперативки.

Øyvind Fiksdal, 3D-художник

Интервью взято Кириллом Токаревым

Автор: PatientZero

Источник

Поделиться

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js