Инди
Андрей Торчинский

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'а.

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

Сложности

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

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

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

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

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

И вот тут то и начинаются пляски с бубном. Иногда получается отделаться малой кровью и встроенными нодами Houdini, если грамотно сегментировать текстурное пространство. Но зачастую приходится включать "режим программиста" и внутри самой Houdini писать скрипт, который будет обходить либо все, либо определённую группу вертексов и по заданному алгоритму размещать их на 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.

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

{ "author_name": "Андрей Торчинский", "author_type": "self", "tags": ["\u043e\u043f\u044b\u0442","\u0433\u0440\u0430\u0444\u0438\u043a\u0430","unity","houdini"], "comments": 24, "likes": 232, "favorites": 112, "is_advertisement": false, "subsite_label": "indie", "id": 663103, "is_wide": false, "is_ugc": true, "date": "Mon, 08 Mar 2021 09:03:14 +0300", "is_special": false }
0
24 комментария
Популярные
По порядку
Написать комментарий...
9

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

Ответить
24

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

Ответить
4

Да я прекрасно понимаю :-)

Ответить
2

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

Ответить
12

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

Вот щас обидно было.

 основной нарратив

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

 все основные механики

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

 блокауты всех уровней

В процессе. 

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

Абсолютно согласен. Поэтому план есть.

Ответить
0

Значит я был не прав и твои дела лучше, чем я думал.

Ответить
5

Ябзахавал

Ответить
1

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

Ответить
9

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

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

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

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

Ответить
1

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

Ответить
3

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

Ответить
0

Так в чем его преимущество перед обычным моделированием ?
Те же тросы и т.п. они потом без физики - застывшие навсегда ?
Разломать можно в процессе ?

Ответить
4

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

Преимущество в том, что можно очень быстро делать много вариаций схожих объектов прямо внутри unity, минуя этап импорта/экспорта из условного blender'a. Например мне нужно несколько подвесных мостов, с расстоянием между платформами 5, 10, 15 и 20 метров и с перепадом высот 2, 4, 6 и 8 метров. Вместо того чтобы экспортить 16 моделей из Blender'a я просто двигаю контрольные точки процедурного ассета и нажимаю кнопку Bake. Чем больше вариаций надо сделать, тем больше выигрыш по времени.

А всякие сплайновые цепи и лианы позволяют "моделировать" их прямо в контексте геометрии уровня. Сильно облегчает подгонку под окружение.

Ответить
0

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

Ответить
1

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

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

Ответить
0

Сам юзаю Гудини на работе, но в основном для симуляций, никак мне не даётся vex, хотя понимаю, что только с ним можно делать крутые штуки.

Ответить
0

Vex во многих случаях можно заменить Vop’ом, но да, есть ситуации когда без vex’а никак (либо очень долго, неудобно и на костылях).

Ответить
6

Игры - это всегда костыли, где-то больше, где-то меньше)

Ответить
0

и где-то раньше, где-то позже ))

Ответить
0

Респект за гудини

Ответить
0

Прям тоже захотелось попробовать, но

Ответить
0

Попробовать можно Apprentice версию, которая идёт бесплатно. Единственное, не будет доступа к Houdini Engine, но саму Houdini вполне можно поковырять и понять, стоит в неё инвестировать время и деньги или нет.

Ответить
0

Узнал полезную информацию по процедурной генерации и Houdini. Благодарю за статью и удачи с игрой!

Ответить

Комментарии

null