Метаинститут: ретроспектива проекта

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

  • Как мы придумывали этот проект
  • Как его делали, и с какими трудностями столкнулись
  • Как связан метаинститут и gravity falls
  • Что не успели сделать
  • А так же какие у нас планы на будущее

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

  • Программисты — нужно иметь нормальный ПК, чтобы тянул наш проект, уметь работать в Unity и знать C#
  • 2d художники — для создания концептов, внутриигровых текстур, газет, плакатов
  • UI специалисты — кто умеет делать крутой интерфейс, и желательно даже анимированный
  • Текстовики — для наполнения лора проекта
  • Композиторы и звуковики
  • Переводчики на другие языки — что бы наш проект смог охватить как можно большую аудиторию

Если вы кто-то из списка, и желаете помочь, то пишите мне: вк, телеграм, почта

Небольшая предыстория. В феврале прошлого года я ушел с работы, чтобы фрилансить и реализовывать свои проекты. У меня была навязчивая идея взять for Mari, который мы сделали для Gaminator 19 и довести до полноценного проекта. Я завел Youtube канал и начал разработку в одиночку, на свой ДР в конце сентября я выкатил первый тизер проекта the Therapy, который получил много хорошего фидбека, а так же помог мне собрать команду энтузиастов.

Изначально я хотел делать просто симулятор ходьбы, но появление команды, фидбек и общение с потенциальными инвесторами навело меня на мысль, что нужно делать не просто адвенчуру, а полноценный survival horror, с боевкой и интересными игровыми механиками. По началу все было хорошо, но из-за возросших амбиций и отсутствия финансирования мы потихоньку начали буксовать в разработке. Нужна была встряска. С графикой то было все хорошо, а вот с геймплейной точки зрения проект дальше чем «ходить и собирать предметы» так и не сдвинулся. От этого я немного приуныл, но продолжал потихоньку делать графику, как тут на горизонте замаячил гаминатор, и я сразу понял: «ВОТ ОНО, ЧТО НАМ НУЖНО». Идея была проста, на время заморозить разработку the Therapy, и сделать новый проект в схожем жанре, чтобы запрототипировать как можно больше механик, которые нужны для терапии и взбодрить команду. План удался? Более чем!

Предпродакшен

Перед гаминатором я зарекся о двух вещах: сделать что-то ну очень маленькое и не кранчить в последний день. Получилось ли это? Узнаете дочитав статью. В то время я уже во второй раз перечитывал книгу о бихевиористике «Не рычите на собаку» и у меня в голове поселилась мысль, даже скорее мысленный эксперимент: а что если бы человека похитили инопланетяне, но не привычные людям по поп-культуре, а более странные. Допустим существа живущие в N-мерном пространстве. Представим, что они хотели бы наладить с человеком контакт, то как бы это было? Планировать проект я начинал именно с этой идеей. Сперва я думал сделать что-то типа Sentient. Вот обзор на эту игру на моем канале.

Антагонистом же был бы не голос из колонок, и не горилла, а четырехмерное фрактальное существо, которое рисовалось бы с помощью ray marching’a.

Получившийся у нас фрактал. Исходный код нашли на гитхабе

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

Во время нашего прошлого гаминатора, работая еще вдвоем, мы очень сильно обожглись с желанием сделать хорошую графику и большую локацию за столь короткий срок. В результате чего ни графики хорошей не получилось, ни большого количества моделей, чтобы задекорировать нормально локацию. Мы учимся на своих ошибках, поэтому было принято решение добиваться приятной картинки, не полигональными модельками и крутыми текстурами, а хорошим освещением, дизайном и стилем 3d игр из 90-ых. Что в теории позволило нам бы сделать большое количество ассетов, и добиться приятной картинки.

Помните первый quake?

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

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

Продакшен

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

Графика и тизер

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

Сейчас доска выглядит так

Для документации я использую облачное хранилище google drive, и соответственно все документы пишу там же. ГДД в моем исполнении, это текстовый документ с приятным форматированием, а так же с оглавлением и обилием гиперссылок, чтобы можно было быстро скакать по всему документу натыкаясь на тот или иной термин. Конечно еще хорошо бы зашли блок-схемы, но рисовать их особого времени не было.

Одной из первых задач для команды было собрать референс-борд. Для его построения мы используем Figma, что крайне удобно. Там можно не просто накидывать любые картинки, но и все что нужно подписывать, и структурировать. Рекомендую.

Один из референсбордов

Хоть изначально мы и отталкивались от графики 90ых, мы все же сразу хотели сделать как там, но с примесью новых технологий. Поэтому остановились на High Definition Render Pipeline. Что дало нам не только качественное освещение и крутые шейдеры, но так же волуметрики, красивое стекло и Screen space reflections. Тут вдохновением от части послужил Вальхельм, в котором так же пиксельная лоу-поли графика соседствует с красивым окружением и технологическими плюшками.

Одна из первых болванок

Я уже писал пост про создание персонажей, поэтому буду краток. По началу мы долго не могли определиться как будут выглядеть наши персонажи. Ведь как вы помните, на заре 3d графики персонажи состояли из отдельных частей, которые двигались друг относительно друга. Мы перебрали несколько вариантов, но в итоге остановились все же на слитых низкополигональных персонажах насажанных на скелет, как в первом half-life. На скетчфабе нашли основу, немного перемоделили и взяли за болванку.

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

q2AeAt3

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

Если гифка работать не будет, то снизу будет ссылка на скачку

Часть моделей сделал сам, остальное мои ребята. Самое сложное, так это было определиться с песней, которая играет на фоне. Сперва мы хотели взять что-то из народного достояния, но когда мы полезли изучать эту тему, оказалось, что в РФ всем как-то все равно на него. Учет произведений народного достояния ведется лишь на западных англоязычных сайтах, и там советских произведений практически нет. Что очень грустно, пока авторское право действует, оно рьяно охраняется, а как выходит срок давности всем становится все равно. Думаю мы очень много из-за этого теряем. В итоге было решено взять песню, на которую у нас разумеется нет прав, но использовать ее только в ролике на ютубе, пожертвовав возможностью монетизации. Возможно в будущем мы все же раздобудем права, и такие песни будут играть прям в игре. В итоге тизер зашел на ура, хоть он и был сделан дня за два, и там есть косячки, на исправление которых не хватило времени.

тот самый тизер

Создавая модели мы сразу договорились, что они, разумеется, должны быть максимально лоу-поли, а во вторых, что крайне важно, у них должен быть правильный texel density. Что это за фрукт такой? Грубо говоря это плотность пикселей в текстуре. Сколько пикселей текстуры помещается на метровом кубе. Было определено так:

  • Для окружения td должен быть равен 64 пикселя на метр
  • Для подбираемых предметов 128 пикселя на метр
  • Для персонажей 256 пикселей на метр, и для записок тоже, если не больше, чтобы хоть как-то можно было разобрать текст не открывая расшифровку

Так же у нас было несколько наборов текстур и материалов.

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

С последними мы работали и в прошлый раз, однако здесь у нас было всего 3 атласа на проект, учитывая что ассетов было больше 200. Разумеется тут очень сильно помог тот факт, что texel density для окружения 64 px/m. Соответственно все мелкие объекты занимали крайне мало места на текстуре размером 2048 на 2048.

Один из таких атласов

Создание МПС

Раз уж с фракталами и реймарчингом не сложилось, так может попробовать сделать фрактал в 3d? Эта идея оказалась тоже не столь тривиальной, как хотелось бы. На помощь мне пришел аддон для блендера animation nodes, с помощью которого я собрал воксельное множество мандельброта. Получилось что-то такое.

Воксельное множество мандельброта

И все бы ничего выглядело даже в цело прикольно, но у меня так и не получилось сделать его полым, а в противном случае это очень много ненужных полигонов и вершин, и соответственно очень большой alembic файл на выходе, который бы увеличил билд раза в полтора. Как можно понять и этот вариант нам не подошел, нужно было искать что-то попроще. Тут я вспомнил, что один из недавних заказов, который я выполнял — анимированная закручивающаяся лента мёбиуса. Тогда я вспомнил про била сайфера из очень классного мультсериала gravity falls. Он тоже представлял собой хтоническое существо из другого мира, так почему бы им не вдохновится? Треугольник, светящийся глаз, щупальца образ готов. Впрочем, и он прошел пару итераций.

Первая итерация в виде ленты мёбиуса

Красный вариант, в финальной версии поменяли размер и цвета, так же шейдер тентаклей

Код и работа с движком

Я почти не занимался программированием, и так задач на мне было очень много. Лучше бы эту главу расписал Дима, но он пытался, и у него не особо вышло. Поэтому напишу более общими словами, что делал он, и немного более подробнее о системах с которыми, в том числе, занимался я.

Как уже было описано выше, у нас была какая-то ходьба, какое-то взаимодействие с предметами, и это нужно было серьезно доработать, а местами даже переписать. Помимо этого почти сразу начали работать над зомбями. Все продвигалось неплохо, пока вскоре не вылезла одна проблема, если подходишь вплотную и садишься, то он ничего не может тебе сделать. Бьет над твоей головой и все. Нужно было как-то научить зомби целиться. Но как? Animation rigging — настало твое время! Пришлось изучать, и в целом не прогадали. Это позволило как сделать голову, которая следила за игроком. Так же создали риг и для тела, которое, в свою очередь, наклонялось в сторону игрока. Все это без всяких костылей в виде дополнительных анимаций или проверок на то сидит игрок или нет.

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

  • Базовый — анимации передвижения, idle
  • Для пистолета — анимации перезарядки, выстрела, idle
  • Для хила — лечение, и чтобы можно было параллельно стрелять
  • Для приседа, чтобы игрок мог сесть и это никак не конфликтовало с другими слоями

С вращением тела думаю понятно, двигаем мышь влево вправо капсула игрока вращается. Вот с движением вверх-вниз уже проблемы. Цель состояла в том, чтобы оружие в руке находилось всегда плюс-минус в том же положении на экране, как в классических шутанах. Префаб персонажа описанный выше к этому не особо подходит, и в будущем я думаю мы его переделаем. Во время разработки же лишнего времени на это особо не было, поэтому пришлось пойти на некоторые хитрости. Ну, во-первых, в любом случае тут нужна инверсивная кинематика и animation rigging в помощь. Во-вторых, проблема неправильно собранного тела все равно присутствует и тут никуда так просто не денешься. В чем проблема?

Обычное положение персонажа, обратите внимание на камеру и куда она смотрит (иконка кинокамеры)
Если же смотреть вверх
Соответственно вид из глаз

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

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

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

В какой-то момент у нас сломались некоторые чуваки, и начали вытворять такое :D
И вот

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

Сюжет

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

Спойлерить сюжет особо не хочу, поэтому вкратце: изначально в планах было сделать хотя бы пару корпусов метаинститута, а не один. Хотели добавить NPC, с которыми можно было бы тоже взаимодействовать. В конце должен был быть очень прикольный твист, отсылающий к реальной истории. На это все объективно нужно было куда больше времени, поэтому ограничились лишь записками и описанием задач :)

Анимация стрельбы

Звуки и музыка

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

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

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

Альфа тестирование

Если бы гаминатор не продлили на неделю, то мы бы не успели. К концу первого срока у нас была готова лишь «альфа-версия игры», в которой были более-менее реализованы все механики, обучение в первой его итерации, и несколько задач. Демка заканчивалась когда игрок получал третий уровень доступа и входил в комнату с граммофоном из тизера. Мы решили устроить тестирование, но отдали не только команде, но и друзьям и некоторым моим подписчикам, и начали ждать фидбек. Его конечно было достаточно. Следующие четыре дня мы фиксили все подряд на основе фидбека. Половину из выявленного мы бы и так поменяли, но вторая половина была скрыта от нас за замыленным взором, все же полезно проводить тестирование ради свежего взгляда. Что же было изменено?

  • Раньше команды которые отдавал мпс были просто странным набором звуков, записанных одним сэмплом, и некоторые сэмплы было сложно друг от друга отличить. В финальной версии же эта система была переделана на ноты, которые ясно читаются на слух. Даже если вам потоптался по ушам медведь, то у команд различается так же количество нот, а уж с простейшей математикой тут я думаю все «на ты». К тому же мы добавили цветовую индикацию, одна нота — один цвет.
  • Обучение было переработано, были переделаны описания и уменьшено количество текста, ибо его тупо скипали. До идеального обучения все же далеко, но времени у нас было мало.
  • Раньше можно было прыгать, и самому включать фонарик. Однако первое приводило к ряду проблем с застреванием персонажа, а фонарик в хорошо освещенной комнате перебивал своим светом весь интерфейс и иконки.
  • Так же мы поменяли постпроцессинг и поправили много визуальных багов.
  • К тому же исправили ряд фатальных багов, который руинил все прохождение.
Анимация тессеракта

Релиз и багодень

В субботу 1-ого мая часов 6 вечера я объявил команде, что почти все доделали, ждите часа через 2−3 билд на тест. Благо в этот день продлили конкурс до утра, ибо дальше пошла дичь. Все было хорошо и работало, но в редакторе. Когда мы сбилдили проект и начали тестировать, я поймал себя на мысли, что как-то уж слишком подозрительно легко. Оказалось, что урон по игроку вовсе не засчитывается. Уж точно больше часа мы ловили этот баг, потом еще вылезло пару багов, которые были только в билде, которые так же все портили. В итоге все время находились все новые и новые баги, которые мы с Димой сидели и правили до 7 утра по НСК. Было весело.

Затем утром нам начал прилетать фидбек от команды, ибо версия 1.0 так же была не то чтобы идеальна, например, при низких настройках в меню было видно лишь интерфейс и плакат на стене. Так же был забавный баг: если во время поднятия записки героя убивали, то при возрождении записка так и оставалась висеть в воздухе, а по нажатию ЛКМ открывался и закрывался ее текст, где бы игрок не находился.

Анимация перезарядки

Итоги

В целом мы довольны тем что у нас получилось, конечно далеко не все было реализовано, так как задумано: cценарий прохождения же свелся к паттерну: «найди дверь с допуском выше, найди личность под этот допуск, открой дверь, повторяй 7 раз» атмосферу ужастика мы упустили; обучение механики дрессировки вовсе не сделали, из-за чего бОльшинство из вас так и не разобрались с МПС и начали тупо его избегать; да и много чего еще. Тем не менее получилось хорошо, спасибо за всем кто сыграл, кто оставил свой фидбек. Для нас это важно.

Что дальше?

Мы решили, что это довольно перспективный проект, так что будем его доводить до ума, и оставим пока the Therapy на потом. Если вы тоже так считаете и хотите нам помочь, в начале статьи под спойлером есть список вакансий. Там же ссылки куда можно написать.

Для начала мы доведем до ума гаминаторскую версию:

  • Доделаем обучение
  • Изменим и дополним ряд механик
  • Поменяем поведение зомбей
  • Поправим баланс
  • Изменим саму локацию…
  • … а так же сценарий прохождения
  • Добавим больше сюжета. Как минимум начальную и конечную катсцену.
  • Исправим и дополним звук
  • Сделаем английскую локализацию

После чего попробуем пульнуть проект на большую аудиторию, соберем фидбек и с неё. Затем приступим к созданию полноценной игры, где будет намного больше локаций, вменяемый сюжет, больше оружия, включая холодное, а так же больше элементов иммерсив сима. Если вам интересен проект и вы хотите следить за его развитием, то вот пара ссылок: группа в вк, youtube канал. На гамине думаю так же будут выходить посты. Пожелайте нам удачи!)