ÜberFlight - постмортем

Что такое UberFlight

UberFlight — это интенсивная "леталка" где очки зарабатываются за полёт в опасной близости от препятствий, с процедурной генерацией мира.

UberFlight — Gameplay Trailer

Проект, как я люблю шутить, real true indie — почти всё сделал сам (кроме музыки и модельки персонажа). И на своём движке, что обычно добавляет забавных тем для обсуждений.

Зачем я это делал

UberFlight — это такое упражнение в "заканчивании" проекта. Затея возникла после выпуска эпичного долгостроя Dragons Never Cry. Проект был в разработке чуть ли не 10 лет, несколько раз забрасывался и возвращался к жизни. Каждый раз, когда приходила в голову очередная идея игры, дракон иронично интересовался: "что, ещё один долгострой?.."

Что, ещё один долгострой?..
Что, ещё один долгострой?..

Поэтому изначальный план был такой : разработка за 5-7 недель и релиз в Steam (ибо самая простая для этого платформа). Забегая вперёд, времени всё заняло конечно же больше — от начала до релиза прошло почти 3 месяца, но задержка была осмысленным решением (сделать/выпустить проект получше), а не просто "ну не успели, как всегда".

Идеи, примеры и конкуренты

Идеи, какую именно игру делать, конечно же были. Идеи вообще ничего не стоят и есть у всех, во множестве.

Больше всего на решение "что делать" повлияли две игры : Race the Sun и Superflight. И, на самом деле, Burnout:Takedown — безумные гоночки с распихиванием по сторонам других машинок.

А Race the Sun и Superflight, по моему субъективному мнению, были "идея прикольная, реализация так себе". Реализация в плане игропроцесса, конечно же — мне вот прямо сразу были очевидны косяки в управлении, камере и в общем "game feel". Думалось, что я легко сделаю "то же самое, только гораздо лучше".

То же самое, разумеется, в кавычках — UberFlight примерно такой же клон Superflight, как Burnout клон Need for Speed.

Первый прототип

Фантазии фантазиями, а пока не попробуешь — не узнаешь. Proof-of-concept сделал достаточно быстро, буквально за пару дней.

Не с полного нуля, конечно (прототипы с нуля и не делают) — механизм генерации уровня был с прошлогоднего Ludum Dare и scroll-shooter'а (Danger Forever), моделька кораблика оттуда же.

UberFlight build#7

Выглядело всё неказисто, но "10 seconds of fun" были. Даже больше чем 10 секунд — можно было 10-15 минут сидеть с геймпадом перед телевизором и медитировать на бесконечные кубики. Тот самый "flow", который не передать никакими картинками / видео / описаниями.

Плейтесты и доработки

Плейтестил традиционным (для себя) образом — FeedbackFriday на reddit. В несколько итераций поправил все самые занудные проблемы, которые мне были не очень очевидны, а других людей сильно удручали.

Тут стоит отметить, что reddit / TIG forums гораздо более полезны (в плане плейтестов/фидбека) чем тот же gamedev.ru, просто потому что отношение людей ко всему несколько другое и манеры общения заметно отличаются в лучшую сторону.

ÜberFlight - постмортем

Попутно довёл до ума систему подсчёта и показа очков — она несколько более "навороченная", чем в том же Superflight.

По итогу решил, что прототип достоин доделывания до полноценной игры.

GameSynth

Лирическое отступление про звук.

Игре, конечно же, нужны были звуки. И тут очень вовремя подвернулся GameSynth — нодальный генератор/редактор звука, если очень упрощённо. Подвернулся почти случайно. Раньше я баловался AnimeDSP, зашёл на сайт Tsugi посмотреть новую версию, там и обнаружил что вот-вот выйдет GameSyth. Штука выглядела интересно, и обещала несколько упростить мне жизнь. Так и вышло.

GameSynth — procedural audio middleware
GameSynth — procedural audio middleware

Одно (очевидное) применение — генерация. Всякие pickup'ы и пиликанье UI я делал именно так. Второе (не очень очевидное) применение — не-деструктивное редактирование. Т.е. вот всякая рутина, которую можно вроде бы и в Sound Forge / Audacity сделать, но которая очень занудна если операций больше одной (нормализация, fade-in/fade-out, эффекты всякие); проще соорудить граф из операций и "крутить ручки" параметров пока не получится ровно то что нужно. И нагенерить вариаций звуков, ибо у всех параметров операций можно задать диапазоны вариаций значений.

Штука на самом деле гораздо более интересная/полезная, например есть runtime который может генерить звуки прямо на лету (но оно ещё в бете и мне доступа не дали). Но даже то немногое, что я использовал, было очень полезно.

Мучения с environment'ом

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

Окружение UberFlight
Окружение UberFlight

Т.е. больше сотни сцен (в текущей версии игры). Окружение, конечно, модульное и всё-всё-всё активно реюзается. Но всё равно нужно довольно много контента, чтобы не было ощущения будто мы летим сквозь одни и те же три ёлки (типовая сессия игры — до 3 минут, а это порядка 20км).

Сначала я пытался моделить всё в Modo. Инструментом (modo) я на самом деле владею довольно хорошо, "двигать вертексы" могу быстро и эффективно. Но получалось некрасиво и долго. После двух недель возни и трёх сделанных и выброшенных локаций стало очевидно, что нужно что-то менять.

Для сравнения :

Слева — это чистый моделинг. Справа — первые эксперименты с альтернативным подходом.
Слева — это чистый моделинг. Справа — первые эксперименты с альтернативным подходом.

Альтернативный подход это скульптинг. Давно руки чесались попробовать ZBrush и/или 3D Coat.

Потратил целый день (буквально, с утра до вечера) глядя очень хороший tutorial по ZBrush, и тыркая на соседнем мониторе этот самый ZBrush. Ощущение было, будто пытаюсь разобраться в какой-то инопланетной технологии. Сделано инопланетями для инопланетян. Примерно как софты Apple — всё по другому. Не лучше/удобнее, а просто по другому — think different и вот весь этот бред. Навигация сделана так странно, что я всё время ощущал себя инвалидом, причём и с мышкой и с планшетом.
И ещё это чудо частенько крешиться, просто молча сворачивается и привет. Понятно стало, почему в туторе так подробно рассказывали про backup'ы...

На следующий день попробовал посмотреть 3D Coat. Часа через полтора пришло понимание, как делать что-то полезное для проекта. Интерфейс/навигация были явно сделаны людьми для людей. Все базовые вещи делаются быстро и удобно. И есть работа с настоящим объёмом (voxel sculpting). И можно быстро экспортить геометрию в LWO / COLLADA (с оптимизацией полигонажа, ага).

В итоге ZBrush был забыт как страшный сон, и большая часть окружения была сделана в 3DCoat с небольшой последующей зачисткой в Modo.
Что забавно, пример справа (на картинке сравнения) занял раз в 5 меньше времени, а выглядит гораздо лучше.

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

"Релиз"

К концу 5й недели (изначально выбранный срок разработки) игра была технически готова — игропроцесс хорошо работал, UI и все Steam-финтифлюшки (лидерборды и ачивки) присутсвовали. Я даже засубмитил игру на ревью в Valve и они это одобрили к релизу (что само по себе иллюстрация текущего состояния Steam). Не хочется даже вспоминать скриншоты и видео игры тех времён.

Нехитрые расчёты показывали — если потратить ещё 5-6 недель, получится продукт, за который будет гораздо менее стыдно. Процесс производства окружения был отлажен (а это самая ресурсоёмкая часть), можно было выписывать довольно точные планы.

Сделал более-менее приличный трейлер "coming on Steam July 2018" и поставил игру в "coming soon".
Кстати голос для трейлера, как оказалось, стоит вполне разумных денег — порядка 50уе, из которых 35 это "full broadcast rights"

В продакшн!

Планированием и прочими "процессами" особо не заморачивался. Для критических задач, конечно, были выписаны спринты в Hansoft (баги трекались там же), но каких-то больших детальных планов не было. Множество вещей было быстрее/проще сразу сделать, чем записывать куда-то.
Анекдотичный случай на тему : во время одного twitch-стрима, где играли альфу UberFlight, игра закрешилась. Я глянул call-stack на экране, открыл исходники и тут же всё починил.

Основную часть времени / сил отнимал environment. "Процесс" был нехитрым : я выбирал подходящий концепт (просто картинка из интернетов -- Pinterest / DeviantArt / Pixiv), прикидывал на какие пропсы такое окружение раскладывается, придумывал динамические элементы игропроцесса (которые вписывались бы в такое окружение), делал один тайл, подбирал цвет и свет. Дальше около недели чистой рутины (ну или почти рутины) — лепить пропсы, дизайнить тайлы, плейтестить тайлы.

Приличную часть времени отожрал персонаж (который девочка с крыльями), про это чуть позже.

Нужно отметить, что никаких кранчей в процессе не было. Я специально трекал время, которое трачу на всякие вещи (Klok2, маленькая бесплатная програмулька) и работа над UberFlight типично занимала 4-8 часов в день, почти всегда 0 часов на выходных. Конечно же я думал над всяким штуками из игры пока ходил гулять и всякое такое, но сидеть за компутером 12 часов в сутки — не-не-не.

Персонаж

Проблема с персонажем была, я думаю, типичной : все эти механические крылья миленько выглядят на концепте, но превращаются в настоящий кошмар когда начинаешь их моделить и анимировать.
Правки/переделки крыльев заняли столько времени и сил, что я даже зарёкся в будущем рисовать такие вещи на концептах. Проще сразу делать грубый 3д-набросок в Modo или 3D Coat.

Текстуру делал в Substance Designer.
Немного странно в 2018м году рассказывать про Substance, но мне до сих пор встречаются люди, которые не то что не умеют пользоваться но и вовсе не знают про Substance Designer / Painter.

Substance Designer наше всё
Substance Designer наше всё

Стиль в игре не-реалистичный, текстура этого конкретного персонажа — это, по сути, набор масок для градиентов. Всё это можно сделать не выходя из Substance Designer. Встроенный векторный редактор там кхм минималистичный, но с неожиданно прикольными / полезными фичами. Этот встроенный редактор вполне позволяет делать всё что нужно. Ну и видеть результат работы сразу на модельке — здорово упрощает и ускоряет дело.

Такой процесс создания текстуры больше похож на визуальное программирование, чем на рисование. Оно и к лучшему, ибо я скорее technical artist, чем художник. Причём заметно более "technical", чем "artist" :)

Справедливости ради, не все текстуры персонажа сделаны в Substance Designer — для лица девочки таки пришлось открыть Photoshop.

Анимации делал сам (3D Max, CAT-rig). Анимации персонажа сильно завязаны на логику, там всё немного сложнее чем просто "нажали кнопочку, запустили красивую анимацию". Поэтому отдавать анимации кому-то на заказ не рискнул, стоит оно недёшево и не факт что подойдёт с первого (или скорее 21го) раза.

Релиз

Игру зарелизил, как и обещал, в июле. 31 июля :)

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

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

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

It's not over yet

Я лично воспринимаю релиз скорее как "early access" — ещё до выхода было чёткое понимание, что в игру стоит добавить кое-какие штуки. Приличное количество разных штук.

Возможно, стоило повесить шильдик "early access" — к игре было бы несколько более снисходительное отношение. Возможно, я как раз поэтому и не стал заморачиваться с early access — у проекта всё равно ровно один релиз / launch. Ни к чему весь этот цирк "не судите строго, мы потом всё исправим".

Добавить всё запланированное (несколько новых игровых режимов и пяток карт) займёт ещё 1.5-2 месяца. После этого останется только починка багов (если найдуться новые) и мелкие косметические обновления.

И конечно же есть другие платформы, где можно выпустить улучшенную / расширенную версию. Но это уже совсем другая история.

2121
50 комментариев

Честно говоря, я тоже не понимаю за что платить $10. По идее за эти деньги должно быть порядка 20-30 уровней, головоломок и смысла играть.

3
Ответить

Смысла играть примерно как в тетрисе.
Рассуждения про количество "уровней" примерно так же в тему.

Ответить

А ещё мне интересно, зачем было оставлять героине дырку в штанах как раз напротив ануса?
https://i.gyazo.com/9aeb6e5f364c78d816b843a565a3a6df.png

6
Ответить

Чтобы собрать стату, кто смотрит куда летит, а кто — в другое место.
На деле просто неудадачно нормали на меше были.

1
Ответить

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

1
Ответить

Возможно, я как раз поэтому и не стал заморачиваться с early access — у проекта всё равно ровно один релиз / launch. Ни к чему весь этот цирк "не судите строго, мы потом всё исправим".

Здесь ошибка.

Ответить

Здесь нет ошибки.

1
Ответить