Почему мобильной игре пофиг, сколько Гц (FPS) выдаёт экран смартфона
Недавно написал для DGL статью на тему, почему “игровые смартфоны” – маркетинговый буллшит. В комментах меня спрашивают – погоди-погоди, а как же частота обновления экрана? Типа, FPS-то всё равно решает? Есть, ведь, телефоны там с 90 Гц, даже 120 Гц.
Товарищи! Первый же абзац этой статьи – не надо судить смартфоны по меркам рынка ПК. Казалось бы, для раскрытия заданной в заголовке темы этот абзац никакой информационной нагрузки не несёт, но сама эта мысль очень важна для понимания всего остального.
Если коротко: просто перестаньте судить о смартфонах (да и игровых консолях) как о ПК. Just stop it. Там общего настолько мало, что почти ничего.
Вы думаете, стоит вам найти смартфон с 90 Гц экраном, как игры тут же начнут летать в 90 FPS? Да, на ПК бы так и было, во многих случаях, хотя тоже не во всех, но о них сейчас не будем. Если интересно – потом расскажу.
Суть в том, что большинство мобильных игр имеют жёсткое и неснимаемое ограничение на FPS. И это 30 FPS. Даже не 60! Asphalt, Modern Combat, Fortnite, PUBG Mobile – вот эти ребята. Честно, не помню про Real Racing. Да, вы можете найти видосы, как мобильные игры запускают на эмуляторах на ПК в 60 FPS – но именно на эмуляторах, а не на самих смартфонах.
У вас смартфон может уметь хоть в 100500 Гц, а игра всё равно будет работать в 30 FPS. Потому что так заложено на стадии разработки.
Почему заложено? Это тоже интересный вопрос. В подавляющем большинстве мобильных игр физика и управление жёстко привязаны к фреймрейту. То есть, обсчёт нового положения объектов согласно прилагающимся к ним силам и считывание нажатых кнопок или данных гироскопа происходит перед прорисовкой очередного кадра. Если такая игра начнёт работать на 90 Гц – она просто начнёт работать в три раза быстрее, как на ускоренной перемотке.
Конечно, формально можно не привязывать физику игры к фреймрейту. Но это сильно зависит от игрового движка. К примеру, в Unity вам всё равно придётся обсчитывать всё перед прорисовкой кадра, просто вы можете в формуле расчёта новой позиции объекта опираться на прошедшее время по таймеру реального времени. И потом каждый раз думать – а что будет с вашим, например, автомобилем, если телефон вдруг лаганёт и игра остановится на секунду. Как минимум – два объекта, которые должны столкнуться, могут пройти друг сквозь друга. Как максимум… что угодно может произойти. К сожалению, я не знаю, можно ли в том же Unity обсчитывать физику и управление вообще не привязываясь к рендеру кадра, но это всё равно вызовет лишь новые вопросы и проблемы в работе игры.
Ну а почему именно 30 FPS, а не 60? Да потому, что запуск игры лишь на топовых смартфонах разработчикам не интересен. Не всегда даже понижением детализации графики можно добиться, чтобы на старом ведре игра работала в стабильных 60 FPS. С 30 FPS здесь проще. Мне иногда дают на тест совсем слабые телефоны, которые стоят копейки, и вот на них, прикиньте, Modern Combat 5 работает так же (с точки зрения производительности), как на топовых Samsung Galaxy. Просто игра выглядит как мыло.
Впрочем, возможно есть и ещё какие-то причины, почему мобильны игры работают в 30 FPS. Буду рад, если сами разработчики выскажутся в комментариях.