Comments 20
Почему в качестве движка выбрали Unity а не UE?
Если бы выбирали сейчас, то все равно остановились бы на 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 (сортируя по дистанции от камеры) — если четко разнести все материалы по своим индексам без пересечений, то инстансинг заработает как надо.
Девайсов без gles3 10,5% процентов глобально, у нас таких пользователей — 12%. У нас они генерируют в районе 3% прибыли, но еще главнее — они генерируют онлайн, который критически важен для сетевых шутеров. Отказаться от этих игроков ради роста производительности на пару процентов в дополнительном игровом режиме — звучит как не очень заманчивый бизнес-план :)
Хорошая статья, спасибо.
На счет слабых устройств - может попробовать разные настройки для разных устройств. Условные min/max/ultra. Понимаю, что это скорее из мира ПК, но может это лучше, чем отдельная карта "для тормозов". Не так бьет по самолюбию юзера.
К сожалению, нагрузка от режима это не только рендер. На большой карте могут играть 100 игроков, а на маленькой 30. Сотня пользователей — это сетевые сообщения, которые нужно обрабатывать, к тому же на большую карту нужно в 4 раза больше лута, чтобы не тратить много времени на его поиски.
Название немного не полностью отражает суть статьи =) Затея с лайтмапой и использовании ее на динамике - крутая и смотрится шикарно, спасибо за идею)
Оптимизировать вы принялись потому что батл рояль много потреблял. Но когда вы оптимизировали буквально универсально свою графику, выкатили вы ли её на остальные режимы или она только для батл рояля?
Хорошая статья, в Asset Store выложили плагины чтобы другие тоже могли пользоваться? Поддержать индустрию, так сказать, где-то вы помогли, где-то кто-то ещё, и в итоге будет пулл плагинов для разработки и не нужно придумывать велосипед всем
Как за день потерять 30% онлайна и за два месяца сделать батлрояль