King, Witch and Dragon. DevLog #12
Давно не было апдейтов и тому было несколько причин.
Во-первых Новый год. Я взял пару недель перерыва, чтобы отдохнуть, переключиться на что-то другое, а потом посмотреть на проект свежим взглядом. Это очень помогло.
Во-вторых, после завершения работы над логикой боя, я начал прорабатывать игровой мир - сеттинги, биомы, а также примерно прикидывать объём работы по созданию окружения. И работы оказалось много... ОЧЕНЬ много.
В-третьих, я изучал новый софт. Но обо всём по порядку.
Сеттинг игрового мира
В одном из предыдущих девлогов я уже касался вопроса структуры мира игры.
Весь мир можно разделить на 3 основных секции:
- Вступление. Тут игрок проходит туториал, учится основным игровым механикам и приобретает 4 специальных способности.
- Исследование мира. Эта секция состоит из хаба и 4 больших локаций-биомов, в конце каждой из которых игрока ждёт босс
- Заключительный этап в конце которого игрока ждёт финальный босс-файт с главным злодеем.
Я решил для начала сфокусироваться на фазе исследования и проработать 4 локации. Для каждой локации нужно было сделать следующее:
- Придумать визуальный сеттинг - то, как локация будет выглядеть, какое настроение передавать и с чем ассоциироваться.
- Собрать референсы и концепты для каждого сеттинга.
- Придумать уникальные геймплейные механики для каждого сеттинга. В идеале, каждый сеттинг должен предлагать какой-то новый подход к использованию каждой из способностей персонажа, чтобы даже если игрок придёт на локацию, не имея некоторых способностей, он все равно найдёт что-то новое и интересное для оставшихся способностей.
Также каждая локация подразумевает как минимум одного уникального врага, но этим я буду заниматься позже, сейчас разговор только об окружении.
Визуальный сеттинг и референсы
Выбирая сеттинги я полагался не только на фантазию и хотелки, но также думал как сделать так, чтобы они интересно сочетались или контрастировали друг с другом.
Я решил не тратить время на создание собственных концепт артов и сделать упор на поиск подходящих референсов, с последующей их адаптацией. Потратив пару вечеров в Pinterest я нашёл достаточное количество материала, чтобы начать работу.
После нескольких итераций брейншторма, проработки и отсева, я выбрал следующие локации.
Парящие острова
В локации парящих островов много открытого пространства, относительно небольшие платформы, много прыжков и много возможности упасть. Чтобы дойти до босса игрок должен постепенно подниматься всё выше и выше.
Подземные руины
В противоположность парящим островам, подземные руины создают ощущение замкнутого, тесного пространства. Игрок должен спускаться всё глубже и глубже, чтобы дойти до босса (опять же контраст в направлении движения, по сравнению с островами).
Царство грибов
Царство грибов представляет собой органическую локацию, в которой отсутствуют прямые линии, а в качестве опасности выступают шипы, плющи и кислота. Грибы, при этом, являются неотъемлемой частью топологии уровня, они могут быть размером с дерево и персонаж может прыгать по их огромным шляпкам.
Механическая долина
В противоположность царству грибов, механическая долина выглядит монолитом, построенным по четким чертежам, с прямыми линиями, четкими углами, где нет ни одной травинки, но есть много механизмов и шестерёнок - эдакая аллюзия на стимпанк, индустриализацию и архитектуру гномов.
Геймплейные механики
Тут я просто приведу табличку, которую составил для себя. Некоторые из механик не выглядят такими уж оригинальными, другие "позаимствованы" из других игр, но что поделать. Главное, подчеркнуть разннобразие локаций и сеттингов.
Пайплайн работы над ассетами
Собирать картинки из интернета это, конечно, здорово, но рано или поздно придётся и ассеты для игры делать.
Как я уже писал выше, по примерной оценке объём работы очень большой. Если садиться и просто руками моделить и текстурить всё подряд, то можно зависнуть на долгие месяцы. Надо было придумать как этот процесс оптимизировать и ускорить.
Конечно, ассеты можно покупать. Я лично не сторонник такого подхода, но боюсь, что полностью избежать этого не получится. Можно сэкономить немного времени на всякой общей мелочи, которая заполняет фон или разбросана по уровню и не бросается в глаза игроку. Например камни. Но даже их просто так вставлять нельзя, нужно подгонять шейдеры и материалы, чтобы они не выбивались стилистически. В любом случае, это не решение проблемы. Я стал думать дальше.
Небольшое лирическое отступление. Те, кто следит за моим блогом, знают, что я достаточно вниминя уделял шейдерам и всяким процедурным штукам. Например, я сделал процедурную анимацию для паучьих лап и хвоста змеи, а также полностью процедурное щупальце, которое генерируется на лету в рантайме. Более подробно об этом можно почитать в предыдущем девлоге. В целом, мне очень нравится эта тема.
Те, кто интересуется процедурной генерацией, скорее всего слышали про один широко известный в узких кругах софт, который специализируется именно на этом - Houdini. Также его часто упоминают в контексте симуляций, моушн дизайна и визуальных эффектов.
Моё знакомство с Houdini
Я сам давно на него поглядывал, но пощупать всё никак не доходили руки. Да и в интернетах многие пугают, что "Гудини не для всех", "Гудини странный" и т.д. Но я всё равно решил уделить немного времени и чуть более глубоко изучить предмет.
Для начала я просто решил посмотреть разные видео и туториалы, чтобы примерно понять, что Houdini может в контексте геймдева. Мне повезло, что я почти сразу наткнулся на канал "Houdini по-русски" на котором очень ёмко, чётко и по делу описывают разные кейсы и рассказывают как этого можно добиться самому. На канале куча полезного материала как для новичков, так и для более продвинутых пользователей. В общем, если вам интересен этот софт, то всячески рекомендую этот канал.
Процедурная геренация - это классно, а Houdini выводит этот процесс на совершенно иной уровень. Но мысль о том, что ассеты надо будет генерить в Houdini, а потом переносить их в Unity через условный FBX, не давала мне покоя. По сути получалось то же самое, что моделить в Blender'e, а потом экспортировать в движок. Но потом я узнал про Houdini Digital Assets и это перевернуло всё с ног на голову...
Houdini Digital Assets
Работая в гудини вы создаёту структуру нод, которая по заданному алгоритму создаёт геометрию. Houdini Digital Asset (или коротко HDA) является эдаким контейнером, который позволяет упаковать ваш алгоритм, перенести его в игровой движок, и создавать ассеты прямо в игровом движке. Для этого в движке необходимо установить плагин Houdini Engine.
Вот, например, видео с официального сайта SideFX (разработчики Houdini), в котором показано, как в HDA можно скормить простые примитивы Unity, а на выходе получить стилизованную полуразрушенную колонну. То есть, можно генерить готовые ассеты на основе примитивов, использующихся для блокинга уровня.
В общем, я понял, что не могу пройти мимо. Я скачал бесплатную версию Houdini Apprentice и начал изучение софта. Моя идея была в том, чтобы научиться создавать инструменты, на основе которых я смогу генерить большое количество вариаций различных ассетов и в долгосрочной перспективе это должно сэкономить время на создание контента.
Первые результаты
Потратив пару недель на чтение мануалов и просмотр туториалов, я начал чувствовать уверенность в своих силах и решил попробовать сделать что-нибудь не по туториалам, а что-то реально полезное для проекта. Свой первый настоящий HDA. Начал я с того, что проапгрейдил лицензию до Indie и установил Houdini Engine (он требует лицензии и идёт в комплекте с Houdini Indie).
Я начал думать с чего бы начать. Первыми на ум пришли снова камни. Но это скучно и неинтересно. Можно было бы начать с деревьев, но для ни и так уже есть миллион готовых инструментов. Я искал что-нибудь простое, но интересное. Что-то, что может иметь много разных вариаций. Я пробежался по списку сеттингов и нашёл ответ...
Что вы знаете о процедурных грибах? Далее я вам расскажу и покажу, что о них знаю я.
Грибы мне показались идеальным кандидатом на роль первого пробного HDA. Я посмотрел на референсы и составил список параметров, который позволил бы мне создать если не все, то хотя бы большинство из представленных на них грибов (с некоторыми допущениями, конечно же).
Спустя пару вечеров я закинул готовый HDA в Unity и на его основе за несколько минут создал вот такие ассеты:
Также я написал специальный шейдер и создал на его основе материал, который прописан внутри HDA и который автоматически назначается при создании нового объекта. Шейдер не содержит текстур, весь цвет задаётся с помощью Vertex color'a. Помимо этого можно гибко настраивать затенение, контурный свет (rim light) и свечение разных областей.
Помимо фентезийных грибов можно создавать и более реалистичные вариации:
А также грибы причудливой формы:
Сам процесс создания нового объекта выглядит так:
Буквально за 3-4 минуты создаётся новый ассет. Инструмент достаточно гибкий и позволяет настраивать следующие параметры:
- кривая, обозначающая форму ножки гриба
- толщина, сужение, скручивание и неоднородность ножки
- радиус, высота, толщина, кривизна и неоднородность шляпки
- декоративные элементы на ножке (тип, количество, размер, вариации, разброс)
- декоративные элементы на шляпке (количество, размер, вариации, разброс)
- цветовые градиенты для ножки и шляпки, цвета декоративных элементов.
Помимо этого можно гибко задавать плотность сетки, чтобы у больших и маленьких моделей была разная степень детализации и оптимальный поликаунт.
Что дальше?
Пока что я крайне доволен результатом. Я планирую более глубоко изучить возможности Houdini и конкретно возможности HDA. Параллельно я буду нарабатывать библиотеку инструментов для создания процедрных ассетов внутри Unity. По мере появления новых интересных инструментов буду делиться ими в девлоге.
Чтобы поддержать разработку игры, добавляйте King, Witch and Dragon в вишлист на Steam, это важно не только для моей мотивации, но и для алгоритмов Steam. Чтобы принять участие в обсуждении, вступайте в группу ВК, а также подписывайтесь на меня в Twitter и Instagram.
Спасибо за внимание!
Ку.
Полагаю, данные параметры можно крутить скриптом в рантайме, чтобы генерить кучу разных грибов на лету? Или гриб придется "запекать" в эдит тайме?
В рантайме, к сожалению, генерить нельзя. Можно запекать в gameobject или сразу в префаб. При этом меш кешируется и сохраняется в папке Assets.
Получилось очень красиво и фентезийно.
люблю грибы
как еду и как декор в играх)
Поражаюсь с вашей мотивации!
Комментарий недоступен
🍄 Ура, новая часть! 🍄
Редактор грибов — это даже немного забавно :-)