- PVSM.RU - https://www.pvsm.ru -

Эйвинд Фиксдаль [1] (Øyvind Fiksdal) поделился подробностями процедурного процесса создания дома и ландшафта в Houdini [2] и рассказал о преимуществах такого подхода.
Меня зовут Эйвинд Фиксдаль [1], я норвежский художник, раньше работавший в основном с традиционным исскуством. Ближе к тридцати годам я решил полностью сосредоточиться на 3D и поступил на двухлетние курсы 3D и анимации. Спустя какое-то время я устроился на работу в одно из крупнейших рекламных агентств в Норвегии.
Работа в рекламной отрасли открывала все двери, но работа на одну компанию не дала мне возможностей реализации, поэтому я стал фрилансером. Через два года фриланса мы с бывшим коллегой решили объединиться и создать компанию под названием Trollskog.
Меня всегда интриговала процедурная природа Houdini [2], но на художественном уровне, а не просто стандартное использование программы. Просмотрев огромное количество туториалов и презентаций, я приступил к освоению мощи, спрятанной внутри программы.
При работе с полностью процедурными ресурсами в Houdini или любом другом ПО есть очень мало возможностей внесения художественных штрихов — можно только менять seed и надеяться, что получится что-то интересное. Когда работаешь под руководством арт-директора, вполне можно отдать на откуп рандомизации фоновые ассеты, но создание ассетов героев или создаваемой вручную деревни может оказаться для большинства из нас невыносимой задачей.



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



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


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


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


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

После завершения ландшафта мы можем измерить всевозможные топологические свойства: occlusion, кривизну, угол наклона и так далее. Они определяют расположение травы, её высоту и места размещения цветов или деревьев.
Ради вариативности материалы создаются комбинированием изображений и данных цвета.
Сами растения и трава являются экземплярами, которые создаются процедурно с помощью комбинирования нодов и VEX. Затем они превращаются в proxy Redshift, экземпляры которых создаются в зависимости от атрибутов ландшафта.
Такая система одновременно и применима, и неприменима для производства игр. Чтобы она была применимой, её нужно подвергнуть ещё одному набору операций, но это будет довольно простой и прямолинейной задачей. Модели слишком высокополигональные для использования в играх, но если преобразовать высокополигональную модель в объект VDB, чтобы обеспечить её герметичность, а затем использовать инструменты для снижения количества полигонов, то всё остальное можно будет просто запечь в текстуры.



Думаю, что сегодня в играх довольно часто используется процедурно генерируемая архитектура, но я ещё не видел случаев, когда бы брали созданные вручную простые модели, а затем генерировали все детали на их основе. Возможно, в будущем такое будет встречаться чаще.
К узким местам проекта я бы причислил собственное ограниченное знание Houdini. Этот проект я начинал, чтобы изучить программу, и понятия не имел, к чему хочу прийти. В ретроспективе могу сказать, что с теперь имеющимися у меня знаниями я бы многое по-другому в этом и в других проектах. Ещё одним узким местом является ОЗУ — для работы в Houdini, а особенно при обработке VDB нужно много оперативки.
Øyvind Fiksdal [1], 3D-художник
Интервью взято Кириллом Токаревым [6]
Автор: PatientZero
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/3d-modelirovanie/298829
Ссылки в тексте:
[1] Эйвинд Фиксдаль: http://www.fxdal.com/
[2] Houdini: https://www.sidefx.com/
[3] VEX: http://www.sidefx.com/docs/houdini/vex/functions/index.html
[4] COP: http://www.sidefx.com/docs/houdini/nodes/cop2/index.html
[5] VDB: http://www.sidefx.com/docs/houdini/nodes/sop/vdb.html
[6] Кириллом Токаревым: https://www.linkedin.com/in/kikatok/
[7] Источник: https://habr.com/post/424203/?utm_campaign=424203
Нажмите здесь для печати.