Как стать автором
Обновить

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

Время на прочтение 5 мин
Количество просмотров 25K
Автор оригинала: Kirill Tokarev
image

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


Введение


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

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

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


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

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




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

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

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





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


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


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

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


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



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


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

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



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


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

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



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

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


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


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

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


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

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


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




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

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

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

Интервью взято Кириллом Токаревым
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+49
Комментарии 24
Комментарии Комментарии 24

Публикации

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн