King, Witch and Dragon. DevLog #13

В этом девлоге я расскажу о своих экспериментах с Houdini и чего удалось достичь.

В предыдущем девлоге я уже упоминал, что начал изучать Houdini и в частности Houdini Engine, чтобы создавать процедурные ассеты непосредственно в Unity.

Мой первый процедурный ассет из прошлого поста

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

Напомню, что сеттинги в игре планируются следующие:

  • Парящие острова
  • Подземные руины
  • Долина механизмов
  • Царство грибов

Итак, на данный готовы следующие ассеты...

Генератор цепей

Цепи достаточно часто используются в качестве декоративных элементов в играх. Я планирую активно использовать их в сеттингах подземных руин и в долине механизмов.

По факту, я сделал 2 ассета.

Первый это spline-driven цепь. Дизайнер создаёт и настраивает форму сплайна и цепь повторяет его форму. Удобно, когда цепь нужно на что-то намотать или "красиво" разложить на полу.

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

Также, вы могли заметить, что сами звенья цепи тоже кастомизируются. В каждом генераторе можно задавать:

  • Размер звеньев.
  • Радиус сечения.
  • Сглаживание. Можно сделать звенья гладкими и округлыми, а можно угловатыми с жёсткими гранями.
  • Относительный поворот звена относительно предыдущего со случайным разбросом.
  • Общий поворот звеньев относительно направляющей оси.

Генератор шестерёнок

Продолжаем тему "механических" ассетов.

Шестерёнки являются ключевым элементом в долине механизмов, так что я не мог обойти их стороной.

Хоть в универе я и занимался рассчётом и проектированием зубчатого соединения на "теории машин и механизмов" (эвольвента, я тебя ненавижу), все эти знания давно выветрились и забылись как страшный сон (ну, кроме эвольвенты). Да и казалось бы, мы же тут не реальную шестерёнку проектируем, а делаем стилизованый ассет, так ведь?

На практике оказалось, что качественное процедурное параметрическое зубчатое колесо требует приличное количество формул и взаимосвязанных параметров. Тем не менее, немного поскрипев мозгом, я добился результата, который меня удовлетворил.

В будущем они будут вращаться. Обещаю.

Для каждой шестеренки можно задавать:

  • Радиус, толщину обода, высоту.
  • Количество и размер зубьев.
  • Тип, количество и толщину спиц или спейсеров.
  • Наличие и радиус оси, на которой закреплено колесо.

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

Генератор лиан

Этот ассет работает по тому же принципу, что и spline-driven цепи. Дизайнер также задаёт форму сплайна, а лиана его повторяет. Только сама геометрия сложнее и количество параметров немного больше, чем у цепи.

Можно задавать:

  • Количество жил.
  • Толщину и цвет жил.
  • Амплитуду отклонения от направляющей оси.
  • Random seed для волновой функции шума.
  • Количество, размер и цвет листьев.

На практике это выглядит примерно так:

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

Генератор подвесного моста

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

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

Так как это объект функциональный и персонаж должен иметь возможность по нему бегать, то при запекании ассета ему автоматически назначается нужный Layer, чтобы Character Controller мог распознавать его как поверхность, по которой можно ходить. Также, генерируется упрощенная геметрия, которая назначается в качестве mesh collider'а.

King, Witch and Dragon. DevLog #13

Всё это происходит автоматически, руками ничего делать после запекания не нужно.

Сложности

Хочу поделиться неожиданным для себя откровением.

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

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

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

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

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

Примерно так может выглядеть кусок кода для генерации UV-развёртки.
Примерно так может выглядеть кусок кода для генерации UV-развёртки.

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

Тем не менее, сейчас процесс идёт гораздо быстрее по сравнению с первым ассетом (грибами), на который у меня ушло около 5 вечеров.

Новый формат общения

До этого момента у проекта в русскоязычном сегменте было всего 2 основных площадки продвижения - DTF и VK.

Я знаю, что многие здесь скептически относятся к VK или вообще не имеют в нём аккаунтов (например, как я, до того как пришлось создать там группу для проекта).

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

Поэтому с недавнего времени в Telegram существует группа, посвящённая King, Witch and Dragon. Я специально сделал группу, а не канал, чтобы писать мог не только я, но и любые участники могли свободно задавать вопросы и общаться между собой.

Основной фокус, это, конечно, мой проект, но мы также свободно общаемся на любые окологеймдевные и околоигровые темы.

Так что если вам хочется позадавать вопросы про проект, про разработку (в частности, соло-разработка), про используемые инструменты или просто как я докатился до жизни такой, добро пожаловать в нашу группу:

Что дальше?

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

Чтобы поддержать разработку игры, добавляйте King, Witch and Dragon в вишлист на Steam, это важно не только для моей мотивации, но и для алгоритмов Steam. Чтобы принять участие в обсуждении, вступайте в telegram-группу и группу ВК, а также подписывайтесь на меня в Twitter и Instagram.

Спасибо за внимание!

240240
24 комментария

Мне кажется, Вам больше нравится возиться с генерацией, чем с экшеном игры :)

9
Ответить

Конкретно сейчас - да :) Вот наиграюсь и буду дальше делать экшон. Мальчику новую игрушку дали, как вы не понимаете, ну.

25
Ответить

Эта игра часто и давно здесь мелькает, но автор вообще не занимается разработкой игры, судя по выкладываемым материалам. Есть блокауты всех уровней, все основные механики, основной нарратив?
Пока я с прошлого года вижу только посты типо «я сделал настраиваемый цвет левого глаза мухи». Это хорошо, но без последовательности и плана эта игра никогда никуда не выйдет.

4
Ответить

 автор вообще не занимается разработкой игрыВот щас обидно было.

 основной нарративЕсть. Но его нет смысла выкладывать. Завязка истории известна уже давно, остальное спойлеры.

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

 блокауты всех уровнейВ процессе. 

 без последовательности и плана эта игра никогда никуда не выйдетАбсолютно согласен. Поэтому план есть.

13
Ответить

Комментарий недоступен

5
Ответить

Итого, сколько времени понадобилось на освоение гудини до текущего уровня? Был ли опыт моделинга, если да, то в чем? Мешает ли он или помогает? 
Давно думаю потрогать эту софтину, но пока что руки не доходят, по отзывам, нужно очень серьезно подходить к освоению и приложить усилия.

1
Ответить

Первый раз запустил Houdini где-то в середине января. Грубо говоря 2 месяца неторопливого просмотра туториалов и ковыряния редактора.

До этого был опыт создания ассетов в Blender’e (модельинг, UV-развёртка, риггинг, скиннинг, анимация). Он безусловно помогает. В первую очередь нужно понимание топологии, как работают эдж-лупы и т.д. Если нет понимания как сделать вручную, то создать грамотную топологию и развертку процедурно будет ещё сложнее.

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

Ну и знание программирования на С-подобном языке тоже сыграло свою роль. Я теперь могу спокойно переключаться между редактированием нод и написанием вспомогательных скриптов (как в посте выше для развёртки).

9
Ответить