Как стать автором
Обновить

Комментарии 19

Самое интересное не рассказали, выкатив батл-рояль смогли хотя бы часть аудитории удержать / вернуть? Насколько заметный / долгосрочный эффект от фичи был?

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

Почему в качестве движка выбрали Unity а не UE?

Разработка проекта началась в 2012 году, когда UE4 даже не вышел. Да что там Unreal, даже Unity тогда еще не был лидирующим движком в мобильных играх, и команда училась с ним работать на ходу.

Если бы выбирали сейчас, то все равно остановились бы на Unity, просто потому что есть большой опыт работы с движком. Еще важно понимать, что мобильная игра это не только код, но и куча сторонних SDK, которые нужно подключать и поддерживать: AppsFlyer для маркетинговой аналитики, IronSource или AppLovin для рекламной монетизации, плагины для обфускации, для сокетных соединений и другие. И так как проектов на UE4 пока что не очень много, то большинство плагинов и SDK поддерживается хуже по сравнению с Unity.

Что касается мифов о том, что UE4 более оптимизированный, чем Unity, то тут дело скорее в разработчиках, чем в движке. Как пример, проекты компании Madfinger Games, выдающие графику консольного уровня на средних мобильных девайсах, или нашумевший недавно Genshin Impact со сказочной картинкой и оптимизацией.

Каким образом размер глобальной карты влияет на производительность, если одномоментно игрок видит лишь небольшую часть, если приземлился и у вас разный LOD при подлёте, причём с приближением к карте будет видима опять же, меньшая часть всей карты?


В юнити нет возможности не рендерить за пределами камеры (то, что называют culling)?

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

Игрок должен видеть всю карту, потому что:

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

Террейн — не самая большая проблема, которую нужно было решить. Больше проблем доставляли десятки тысяч объектов, расставленных на карте. Даже если их не было видно, Unity все равно рассчитывал для них лоды, и они занимали место в памяти. А те, которые было видно, отсылали сотни запросов на отрисовку. Это все решили мешбейкером, пулом объектов и оклюжен кулингом.

Что получится если такого масшаба игру скомпилировать для Web? То есть в WebAssembly ( Unity вроде позволяет)

Не пробовали. Думаю, получится много ошибок компиляции и нерабочий билд, если не потратить месяцы на адаптацию под веб :)

Когда-то давным давно делал похожий мапинг теней:



Не пробовали печь текстуру на старте уровня? Это должно сильно уменьшить размер билда, правда сожрет больше видеопамяти.
По поводу лодов — был ли вообще смысл в них, если туманом все рубилось по фиксированной дистанции? FarPlane просто бы кулил ненужное и все — сэкономили бы по памяти на мешах.
Инстансинг использовался?


Статья годная, давно тут такого не было...

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

По поводу лодов — был ли вообще смысл в них, если туманом все рубилось по фиксированной дистанции? FarPlane просто бы кулил ненужное и все — сэкономили бы по памяти на мешах.
Лоды точно нужны. Если их выключить, то fps заметно просядет. А так как в нашем проекте кубическая графика, экономия на отсутствии мешей для лодов будет несущественной.

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

Статья годная, давно тут такого не было...
Спасибо! :)

P.S. Насчет запекания света. Год назад я зашел еще дальше и запек 3D-карту теней в 2D-текстуру.

Мы поддерживаем очень много старых смартфонов и планшетов.

Сейчас девайсов без gles3 около 8%, к тому же платежеспособность этой аудитории весьма сомнительна. А vtf, etc2 и инстансинг — весьма вкусные вещи.


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

Так в том и дело, что инстансинг рисует кучу одинаковых мешей за 1дк, а лоды это ломают, потому и надо пробовать в комплексе. Еще инстансинг как и динамик батчинг ломает пересечение материалов по RenderQueue (сортируя по дистанции от камеры) — если четко разнести все материалы по своим индексам без пересечений, то инстансинг заработает как надо.

Проблему с отсутствием etc2 решили кастомным шейдером и препроцессингом текстур.

Девайсов без gles3 10,5% процентов глобально, у нас таких пользователей — 12%. У нас они генерируют в районе 3% прибыли, но еще главнее — они генерируют онлайн, который критически важен для сетевых шутеров. Отказаться от этих игроков ради роста производительности на пару процентов в дополнительном игровом режиме — звучит как не очень заманчивый бизнес-план :)
Во во во, и понять это могут только те кто подобными проектами оперирует. Почему-то очень распространено мнение, давайте мы тут выкинем 3% там 3% ищё в 10 местах по 2% а потом удивляются, а где же аудитория?

Хорошая статья, спасибо.

На счет слабых устройств - может попробовать разные настройки для разных устройств. Условные min/max/ultra. Понимаю, что это скорее из мира ПК, но может это лучше, чем отдельная карта "для тормозов". Не так бьет по самолюбию юзера.

У нас есть настройки типа low/normal. Они срабатывают автоматом, когда определяется мощность девайса. Также есть настройка частоты кадров.

К сожалению, нагрузка от режима это не только рендер. На большой карте могут играть 100 игроков, а на маленькой 30. Сотня пользователей — это сетевые сообщения, которые нужно обрабатывать, к тому же на большую карту нужно в 4 раза больше лута, чтобы не тратить много времени на его поиски.

Название немного не полностью отражает суть статьи =) Затея с лайтмапой и использовании ее на динамике - крутая и смотрится шикарно, спасибо за идею)

Оптимизировать вы принялись потому что батл рояль много потреблял. Но когда вы оптимизировали буквально универсально свою графику, выкатили вы ли её на остальные режимы или она только для батл рояля?

Все графические оптимизации были заточены исключительно под батл рояль. А вот многие оптимизации, которые коснулись сетевой части, были применены ко всей игре. Об этом расскажу в следующей статье.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.