Хабрахабр

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

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-художник

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

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

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

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

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

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