Дневник разработки: август
В этой нашей единственной игре есть тысячи функций, которые хотелось бы добавить
Всем привет.
После выпуска последнего обновления я получил кучу отзывов и множество запросов новых фич и контента к игре. Мне нужно было отобрать наиболее ценные, но и не безумно трудоемкие для проекта запросы, так как я продолжаю работать над игрой в одиночку и должен выпускать обновления в разумные сроки.
Но прежде чем приступить к отбору и запустить следующий цикл разработки, мне нужно было перейти на следующую стабильную версию Юнити. Я был вынужден использовать одну и ту же версию движка почти два года, потому что за пару месяцев до релиза игры, я начал использовать новые, экспериментальные (на тот момент) возможности редактора, что позволило сделать игру производительной, а также позволило генерировать планеты в реальном масштабе. Ценой этого была невозможность обновляться до тех пор, пока Unity Technologies не перенесет эти экспериментальные фичи в последнюю стабильную версию и не начнет их официально поддерживать. Это случилось в июне и я мог, наконец, проапгрейдиться.
Но зачем тратить ценное время на обновление движка, если это не принесет в игру ничего нового? Потому что инструменты движка улучшаются, становятся доступными новые технологии в графике и скриптинге, иногда даже все начинает работать чуточку быстрее. Однако подобная миграция – это не прогулка в парке. Обычно, игра начинает разваливаться на куски, возникает тонна багов и ошибок, некоторые библиотеки отваливаются, а часть критичного кода просто перестает работать. Тебе нужно исправить баги, всё протестировать, и еще раз решить каждую возникшую проблему, найденную при контроле качества. И даже после этого игроки будут находить ошибки в течение нескольких месяцев после релиза. Но если вы хотите поддерживать свою игру в течение многих лет и постоянно работать над ней, придется оставаться на острие прогресса, иначе можно остаться позади и проиграть конкурентную борьбу с другими проектами.
Типичная картина сразу после миграции на новую версию движка
Опять же, благодаря успешному переходу на новую версию, я смог полностью переделать эффект бликов линз и размер Солнца. Теперь их сила и размер зависят от расстояния до него. Например, если посмотреть на наше светило с орбиты Плутона – оно практически не будет отличаться от обычной звезды. Следующим большим нововведением стала поддержка масштабированного рендеринга с поддержкой NVIDIA DLSS и AMD Fidelity FX. Это позволит играть в Rocket Science в разрешениях 1440p и 4k. Или просто улучшить производительность, если игра упирается в скорость видеокарты.
Обновление движка прошло относительно успешно, однако я неожиданно повредил спину и не мог лежать или сидеть без боли. Я провел весь июль в больницах и, к сожалению, все это время не мог работать. Но, к счастью, к середине августа лечение подействовало, боль прошла, и я вернулся к разработке.
Я вернулся к разбору отзывов. Первой, наиболее часто запрашиваемой фичей были топливные баки большего размера. Чтобы полететь куда-либо дальше Луны, нужно много ΔV. В игре можно построить такие ракеты, и на Ютубе можно даже найти несколько видео с посадкой на Марс или столкновением с поверхностью Венеры. Но такие космические корабли состоят из сотен деталей, сложны в сборке и игра их обрабатывает, мягко говоря, не очень, особенно во время начальных этапов полета. Итак, отличный кандидат для работы был найден, к тому же игра все равно нуждается в большом количестве разных топливных баков, чтобы ракеты было проще собирать и они лучше выглядели.
Но большие топливные баки нуждаются в аттачментах с бóльшим количеством слотов. А игра поддерживала максимум 16 слотов в тот момент. Чтобы увеличить это число, мне нужно было переписать внутренний формат данных, который хранит в себе присоединенные к аттачменту слоты, что немедленно сломало бы все сейвы. Но, проведя немного времени в исследовании этой проблемы, я изобрел совместимый формат данных, который поддерживает вплоть до 64 слотов в одном аттачменте.
Форма аттачмента, содержащего эти слоты, была отдельным вызовом. Она должна соответствовать другим соединениям, что уже есть в игре, быть совместима со всеми существующими формами аттачментов, а также поддерживать симметрию и вращение. Добавление каждой подобной формы смахивает на геометрическую прогрессию, ибо требует все больше и больше работы. Но я справился и с этим, и аттачмент для бóльшего радиуса топливных баков должен выглядеть следующим образом:
Я размышляю над аттачментом для еще большего радиуса топливных баков, но они появятся в игре позже
Когда я закончил с формой, я начал экспериментировать, прикрепляя к соединению комбинации из разных двигателей, и обнаружил, что некоторые комбинации, вроде трех двигателей “Заря”, туда не поместятся, из-за несовместимых размеров. Поэтому мне пришлось подправить их и другие детали, а вы можете ожидать много небольших изменений в размерах и форме некоторых частей ракеты.
Осталась одна небольшая проблема. Если оставить большую часть подобного соединения пустой, эта деталь ракеты начинает выглядеть словно швейцарский сыр. Да и ракеты, собранные таким образом, не выглядят хоть сколько-нибудь реалистичными. Если бы подобный способ соединения деталей существовал бы на нашей планете, никто бы не оставил слоты открытыми на растерзание космосу. К тому же, большое количество незаполненных слотов создаёт визуальный шум, и, удивительным образом, достаточно сильно снижает производительность отрисовки.
Я принял решение спрятать все коннекторы и слоты на космических кораблях, кроме случая, когда ракета находится в режиме редактирования в сборочном цехе. Реализация этого изменения потребовала бы гигантского количества времени, но я нашел способ частично автоматизировать этот процесс. К этому моменту я практически закончил, а само это решение расширит возможности визуального дизайна ракет и их деталей в будущем.
Вид, к которому вы привыкли и который останется в режиме редактирования ракет
Как космические корабли будут выглядеть во всех остальных местах
Следующая проблема, на которую я получил много жалоб, заключалась в космическом мусоре. Когда обломки ступеней ракеты входят в атмосферу, скорость симуляции нельзя установить больше, чем 10x, даже если основной космический корабль уже находится на орбите. У игроков остается два варианта в этом случае: ждать, когда этот мусор рухнет на поверхность планеты, что может занять несколько минут. Или же вернуться в космический центр и удалить всё ненужное вручную. Обе опции плохи, но я не хотел просто исключать весь космический мусор из физической симуляции. Слишком много пограничных случаев пришлось бы решать, да и я планировал добавить несколько игровых механик для решения этой проблемы в будущем. В реальности, большинство остатков космических аппаратов сгорает при входе в атмосферу. Но в игре сейчас нет термодинамики, и ее достаточно трудно просто взять и добавить.
Поэтому я ввел два режима работы для всех декаплеров: “разделитель” и “отделитель”. В первом режиме деталь работает точно так же, как и до этого. Вот втором, декаплер остается присоединенным к одной из отделяемых деталей, обозначенной стрелкой на нем. Одно это изменение должно снизить количество мусора в 2 раза. А в качестве “временного” решения, я добавил “самоуничтожитель”, который уничтожит себя и все присоединенные к нему детали через заданное количество времени после отделения от ракеты. Он практически ничего не весит и занимает всего лишь один слот, так что если космический мусор достал вас до ручки, у вас есть возможность с ним поквитаться.
И я сразу же наткнулся на баг, который заключается в том, что эффект взрыва остается зафиксированным в одной точке, вместо того, чтобы продолжать двигаться по орбите со скоростью родительского тела. Нужно будет его фиксить.
Третьей вещью, о которой попросили меня много раз, было расширение обучения. Но эта задача уже была в моем списке и я просто повысил ее приоритет. Кроме того, я запланировал гораздо больше изменений для следующего обновления. Новые инструменты для сборочного цеха, улучшение управления тягой двигателей, множество новых деталей ракет, новая планета, а также пачку миссий в дополнение к расширенному туториалу. О чем и расскажу в следующей статье о прогрессе разработки. Очевидно, что следующий апдейт не будет готов в сентябре, как ранее планировалось, потому что я потерял полтора месяца, пока не мог работать. Но я надеюсь, что он выйдет где-нибудь в ноябре, и я буду держать вас в курсе.
Спасибо большое за вашу поддержку и скоро увидимся.