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

image


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


Введение


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

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

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


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

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

88aac4ab91a35a2d6bb96f0988126efe.jpg


13d54410cfcf991fb0e8ca373e0eb2c7.jpg


56dae0dd1952d728496e99e7586d22d2.jpg


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

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

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

d07a8637d49eb00bfe6513371e1ca9c2.jpg


1bde6d233dcfe97c51d12e964a1120e2.jpg


7fb1e9c3513446340534dab86262a171.jpg

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


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


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

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


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

f7b44345d303e069e104ef8e80c52170.jpg


18bf2b8753fc547bc663ab3ee23b24e0.jpg


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


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

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

1ec76d9bad1e2a03a8c18444e9a90f61.jpg


a9b9dbf5b481aea953269c02c4a75def.jpg


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


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

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

759804b7ee50d0ec3a3ea8e53756a212.jpg


5e938bd0cf970cda189d97853eca1f21.jpg


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

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


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

369f834d20c266b83f3b4e7b8190894b.jpg


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

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


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

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


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

c34654ee717c97a7da4de21e2877de44.jpg


a89a4a682bd23b57e00625125a5de0a5.jpg


853ddc83ba6df95b5ee010d4bf9d1c48.jpg


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

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

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

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

© Habrahabr.ru