Как Hologryph построил SAND: Рейдеры Софи за устойчивую живую каденцию

Для голографа, развивающегося ПЕСКА: Рейдеры Софи означали превращение пустыни 1910 года в игру на добычу, которая могла бы расти еще долго после запуска. Игроки команда и пилот Трамплеры – гигантские ходячие машины, которые служат базой, хранилищем грабежей и оружием одновременно – затем ездят на них по процедурно созданному открытому миру в поисках спасения, и друг друга.
Передача этого опыта требовала строгого авторитетного разделения серверов и клиентов, процедурной генерации мира, которая одинаково работает с обеих сторон, синхронизации сотен Entities, составляющих единый Trampler, и мирового стриминга, достаточно гладкого, чтобы продать ощущение езды на нем. Группе также потребовался контент-конвейер достаточно быстро, чтобы отправлять новые отсеки, оружие, эффекты и сезонные условия на обычной каденции без дестабилизации производительности.
Мы поговорили с Сергеем Гринцом, CTO и гейм-директором в Hologryph, об архитектуре игры на долгосрочную перспективу, поддержании контент-конвейера в движении, и о том, что нужно, чтобы запустить live ops на столь технически амбициозной игре.
Как выглядит ваша модель живой операции и что входит в типичное обновление?
Сергей Гринец: Наша модель живой операции для SAND нацелена на то, чтобы игра развивалась вместе с нашим страстным сообществом. Наша приоритетная задача — поддерживать регулярную каденцию обновлений, сочетающих в себе новый контент, улучшения игрового процесса, балансировку, исправления ошибок и изменения качества жизни. Наша конечная цель – построить устойчивую модель live ops, которая поддерживает титул в долгосрочной перспективе.
Каковы ваши основные технические цели и как они сформировали ваш подход к построению игры, рассчитанной на долгосрочную жизнь и эволюцию?
У нас было три большие цели:
- Строгое разделение между авторитетным сервером и клиентом, с процедурной генерацией мира, которая работает одинаково с обеих сторон.
- Синхронизация огромного количества Entities – один Trampler состоит из сотен из них.
- Гладкий мировой стриминг – мир действительно большой, и чтобы продать ощущение езды на Трамплере, нужно где-то кататься.

Трамплеры играют центральную роль в определении личности игры. Как вы построили систему настройки, чтобы вы могли отгружать новые детали, косметику и варианты как постоянный контент для живой операции?
Вся система построена вокруг отсеков. Отделение – это секция Трамплера – палуба, каюта, опорная рама, помещение для оборудования, и каждое отделение сконструировано таким образом, чтобы оно соответствовало другим.
Игроки собирают своего Трамплера из этих блоков: Они выбирают планировку, складывают палубы, размещают оборудование и в итоге получают машину, которая действительно принадлежит им – их базу, хранилище и оружие одновременно.
Для нас как для разработчиков это тоже контент-конвейер. Чтобы добавить новое отделение, моделируем его и настраиваем без кода. Он подключается к строительной системе, как и любой другой блок, и игроки могут сразу использовать его в своих разработках. Программист вмешивается только тогда, когда деталь нуждается в новом механике, и даже в этом случае это небольшая изолированная часть работы.
Именно это делает отделения идеальным контентом для живой операции: Каждая новая конструкция многократно увеличивает количество возможных сборок Trampler, и они недороги для нас.
Как выглядит архитектура под системой купе и как она позволяет быстро прообразить новую механику?
Мы используем модульный подход, который позволяет нам быстро итерировать прототипы. Под капотом у нас есть пользовательская инверсия контрольного контейнера для подключения нового функционала, и он очень хорошо подходит к нашей Системе Компонентов Образования (ECS). Кроме того, наш пользовательский сетевой движок означает, что нам почти никогда не нужно думать о сетевом взаимодействии при создании новой механики. Репликация обрабатывается слоем ниже кода игрового процесса.

Каким образом система заданий C# и компилятор Burst Unity дали вам головной офис для продолжения добавления контента для живой ops без регрессов?
Наш симулятор работает на собственной модифицированной версии Entitas, ECS-фреймворке с открытым исходным кодом, а не Unity Entities, но компилятор C# Job System и Burst критически важны для наших горячих путей. Генерация процедурной местности, включая задания на выборку карты высоты и биома, математику движения Трамплера и наш обычный отлов окклюзии, все они работают как цепочки заданий, скомпилированные Burst. Эта работа не выходит за рамки, так что более плотный мир не стоит нам кадров.
Какую роль сыграла VFX Graph, позволившая вашей команде быстро итерировать эффекты для живых событий, сезонных моментов или вех достижений?
Все наши эффекты – песчаная пыль, дым, щиты, эффекты оружия – построены на VFX Graph, но ключевой момент в том, как мы его используем. Сверху мы строим настраиваемые системы эффектов, такие как дульная вспышка или удар пули, которые существуют в виде одного гибкого графика с большим набором открытых параметров, включая размер, цвет, время, мусор и дым.
Поэтому, когда появляется новое оружие, художник просто настраивает эти параметры и получает уникальный эффект – не задействован технический художник или новый график построен с нуля. Время техников уходит на то, чтобы сделать эти системы богаче, вместо того, чтобы вручную создавать каждый эффект для этого оружия.
Это то, что поддерживает производство достаточно быстро для устойчивого контента каденции. Новое оружие и события получают качественные эффекты ценой конфигурации, а не разработки.

Как Unity Profiler формировал ваш рабочий процесс оптимизации по мере увеличения объёма вашего контент-конвейера?
Мы регулярно измеряем производительность как на клиенте, так и на сервере, чтобы найти и оптимизировать слабые места. Разбивка по системам в Unity Profiler показывает, куда именно идет время, что делает нашу ECS очень удобной для профилирования.
Также у нас есть автоматизированные тесты, которые измеряют эффективность в фиксированных сценариях, поэтому мы видим тенденцию каждый день и можем сразу реагировать на изменения.
Как вы используете Addressables, чтобы толкнуть обновления, исправления и сезонные падения, не требуя полного обновления клиента?
Addressables - основа управления нашей памятью. Мир транслируется: Пока игроки катаются по пустыне, контент постоянно загружается и выгружается за ними. Все это проходит через Addressables, так что память остается плоской, как бы далеко игроки ни путешествовали.
Вторая, менее очевидная роль заключается в том, что у нас есть два отдельных проекта, основной клиентский проект и проект сервера, и мы построили индивидуальное решение, которое передает активы из одного в другой. Это обеспечивает согласованность обеих сред: Сервер видит те же данные, что и клиент, построенный по тому же конвейеру, поэтому ошибки контента «работает на клиенте, сломан на сервере» структурно невозможны вместо того, чтобы что-то тестировать.

Существовали ли какие-либо инструменты для хранилища активов, которые помогли вам быстрее построить или обслуживать ваш живой конвейер?
Из Unity Asset Store GPU Instancer Pro отображает весь наш разброс пустынь, необходимый для открытого мира, и Amplify Impostors обрабатывает удалённые объекты. Odin Inspector снабжает нашу оснастку, обращенную к дизайнеру, которая является ключом для конвейера контента, основанного на данных, и Rewired обрабатывает ввод данных на PC и консолях. Easy Save, DOTween и I2 Localization — все это позволило нам сэкономить реальное время.
Каким образом Cinemachine повлиял на захват общих, достойных внимания моментов – мех-битв, больших спектаклей, которые подпитывают вашу стратегию контента?
Наше использование Cinemachine намеренно простое. Он управляет нашими камерами и переключается между ними – игровая камера, ангар и зрительский обзор. Сверху мы не делаем никакой дополнительной постановки или сценарной операторской работы, и это осознанный выбор. ПЕСОК: Raiders of Sophie — это игра от первого лица, в которой высока конкуренция, и задача камеры — быть надежной, а не артистичной.
Кинематографическое качество исходит от самой игры. Когда две гигантские ходячие крепости торгуют пушечными снарядами, а вы стоите на палубе одной из них, перезаряжая пистолет, никакая сценарная операторская работа не может сравнить это. Эпичность симуляции - в кинематографии. Cinemachine делает все, чтобы камера никогда не мешала.

Вы создали двухканальный Vivox – чат экипажа плюс пространственный чат близости. Что было вложено в разработку и осуществление этого?
Каждый игрок находится сразу в двух каналах Vivox: обычном канале экипажа, который является «радио», где ваш экипаж всегда слышит вас, и позиционном канале через голос 3D близости, так что вы слышите находящихся рядом игроков из других экипажей мира.
Позиционный канал использует 3D свойства Vivox – диапазон, падение, модель угасания – настроенные в конфигурацию. Наша ECS толкает позиции динамиков и слушателей на Vivox с ограниченной скоростью, только около 20 раз в секунду и только тогда, когда игрок двигается. Authentication проходит через наш собственный сервис Backend Token.
Помимо голоса, как Vivox повлиял на вашу более широкую стратегию прямых операций и как он помог стимулировать социальную активность и удержание?
Голос близости - это функция геймплея для нас, а не только для общения. Экстракционные игры живут в появляющихся социальных моментах, где команды, собирающиеся в пустыне, могут говорить, договариваться, объединяться или предать друг друга, а услышав реальный голос незнакомца рядом, создает напряжение, которое не может никакая сценарная система. Радио экипажей координирует работу команд.

Каков ваш главный совет для разработчиков, которые хотят создать игру на операционной системе?
Разработка живой игры ops является сложным путешествием, так что убедитесь, что ваша команда имеет устойчивость, чтобы довести ее до конца и что у вас есть надежные партнеры и инструменты рядом с вами. Держитесь поближе к своему сообществу – слушайте своих игроков, учитесь на их отзывах, и пусть это поможет определить, как игра развивается с течением времени.
Подробнее о проектах Made with Unity можно прочитать на странице Ресурсы.
