Как уместить Египет в телефоне?

Или опыт оптимизации компьютерной игры для мобильных устройств на примере Egypt: Old Kingdom.

Скриншот мобильной версии Egypt: Old Kingdom. Результат, которого мы достигли спустя более 30 билдов.
Скриншот мобильной версии Egypt: Old Kingdom. Результат, которого мы достигли спустя более 30 билдов.

Всем привет! С вами Clarus Victoria. Мы - российская инди-студия, которая занимается созданием исторически достоверных игр. Все наши игры выходили как на ПК, так и на мобильных устройствах, и мы рады поделиться своим опытом и рассказать о проблемах, с которыми мы столкнулись.

Релиз Egypt: Old Kingdom на ПК состоялся 24 мая 2018 года. В минимальных системных требованиях значилось: 2GB памяти на жёстком диске и 4GB оперативки. Почти сразу после релиза мы занялись портированием игры на мобильные устройства. Результатом адаптацииигры мы оказались довольны только спустя более 30 билдов.

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

Была поставлена задача - добиться такого уровня оптимизации, чтобы игра занимала максимально 2GB, а в идеале 1GB оперативной памяти. Мы очень хотели сделать мобильную версию Egypt: Old Kingdom доступной для максимального количества мобильных устройств.

Ответ на вопрос "Что ужимать?" зависит от особенностей каждой конкретной игры. Оперативная память в играх расходуется на обработку графики, запоминание текущих состояний, поддержку интерфейса и др. Графика обычно первый кандидат "под нож", но если ПК-версия игры имеет большой и сложный мир, то его поддержка и обработка занимает больше памяти. Тогда разработчикам придётся задуматься о сокращении игрового контента. Так, например, пришлось поступить разработчикам Майнкрафт - уменьшить миры и урезать количество видов блоков. В таких ситуациях может пострадать логика игры и игровые механики, если они связаны с теми объектами, которые приходится урезать.

Так сложилось, что вEgypt: Old Kingdom действие происходит на небольшой территории Египта, и этот мир оказался не настолько большим, чтобы пришлось сокращать контент. Поэтому нам удалось полностью сохранить игровой процесс, включая все режимы DLC Master of History.

В случае с нашей игрой больше всего оперативной памяти занимала обработка 3D графики - более 2GB оперативной памяти. Сказалось и то, что это был наш первый опыт работы с 3D. Неоптимизированная версия игры при первом запуске на мобильных устройствах выдавала всего один кадр в 3 секунды на среднем планшете, и как выяснилось, всё это из-за наличия нескольких источников динамического освещения и отрисовки теней.

Карты Egypt: Old Kingdom создавались на более ранней версии Unity 5.5.6f1. Если описывать процесс создания карты упрощённо, то он будет выглядеть так: Unity имеет инструмент terrain (англ. - местность, ландшафт), который создаёт абстрактную ограниченную модель территории. Выглядит это, как простой прямоугольник. Затем в Unity можно загрузить карту высот требуемой местности - в нашем случае, карту высот Мемфиса. Результат всё ещё не похож на карту, ведь там нет никаких текстур. Полученная территория раскрашивается текстурами, настраивается освещение, дорабатываются разные мелочи, чтобы всё выглядело красиво, и после многих других манипуляций получается готовая карта. Чем больше на карте текстур и объектов и сложнее освещение, тем больший объём памяти занимает её рендеринг.

Инструмент Terrain и карта Мемфиса в Unity. Общий вид.
Инструмент Terrain и карта Мемфиса в Unity. Общий вид.

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

Что касается большой карты Египта, то там изменений террейна не было вовсе, а значит, нечего было рендерить. В результате мы заменили карту Египта на2D изображение, что облегчило жизнь вычислительным мощностям.

Белые точки на карте - это камеры, с позиции которых происходит рендеринг
Белые точки на карте - это камеры, с позиции которых происходит рендеринг

Несмотря на принятые меры, в нужное количество памяти ужаться так и не получалось. Проблемы возникали при продолжительной игре, когда построек на карте становилось много, и они занимали всё больше памяти. Тогда мы решили - раз уж дома всё равно по сути плоские (при этом некоторые регионы занимали в районе 2Мб), то надо написать скрипт, который будет рендерить дома района, вырезать из рендера по маске фон и сохранять его. В результате самый большой регион стал занимать в районе 100Кб, а учитывая то, что всего у нас более 100 вариаций районов и построек, суммарно получился вполне ощутимый результат. И это позволило нам, наконец, втиснуться в память устройств.

Отрендеренный район города без подложки
Отрендеренный район города без подложки

В итоге мы достигли того, что игра стала занимать где-то 1.5GB, и сочли это достаточно хорошим результатом, пригодным для большинства мобильных устройств. В системных требованиях к Egypt: Old Kingdom мы указали 2GB, так как у устройства есть операционка и фоновые процессы, которые тоже где-то живут и занимают память.

Кроме графики был также оптимизирован интерфейс: мы увеличили отдельные элементы, чтобы на них было удобно нажимать даже на маленьких экранах телефонов. Кроме того, в мобильную версию добавлена возможность делиться результатами игры в соц.сетях - многие считают Egypt: Old Kingdom сложной игрой, так что мы подумали, что людям захочется похвалиться хорошим счётом.

Мы многому научились в процессе работы над этой оптимизацией и позже на основе полученного опыта сделали обновление и оптимизацию ПК-версии. Были оптимизированы части кода, загрузки данных в параллельных потоках, сборщики мусора и др.

Мобильная версия Egypt: Old Kingdom уже доступна в AppStore и Google Play, и мы сделали всё, что в наших силах, чтобы вам приятно было в неё играть!

2020
11 комментариев
Комментарий удалён модератором
Комментарий удалён модератором

Зачем. Столько. Болда.

Хочется читать весь текст — читаешь бессвязные куски. В админке же куча опций для хайлайтов, ну

2
Ответить

Все повествование сводится к тому, что вы написали скрипт, который все сделал и все отлично. Куча воды и никакой конкретики, что и для чего. Тем более, зачем оставили несколько источников света с тенями, да ещё и на мобильных устройствах, не проще ли запечь все это дело?
А если у вас карта генерируется, то снова но слова об этом. Короче, куча воды с весьма пресным выводом.

Ответить

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

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

2
Ответить

Чем она собственно отличается от предыдущей Predynastic Egypt? Разница существенная ?

Ответить

Более глубокий геймплей, другой контент, другое период времени. В новой игре речь про Древнее царство, когда как в прогшлой было про Додинастчиеский переоди.

Ответить