Производители мобильных устройств нередко идут на всякие уловки, чтобы увеличить продажи своих девайсов. Например, при слабом процессоре устанавливают экран с высоким разрешением. Итог очевидный — графический процессор не справляется с отрисовкой кадра и происходит падение FPS. Сегодня вы узнаете об одной хитрости, которая может значительно повысить производительность вашей игры на слабых мобильных устройствах.
Наверняка вы уже знаете, что наиболее частая причина падения FPS — это высокая нагрузка при отрисовке графики. То есть, центральный процессор успевает сделать все вычисления за отведённое время (1/60 секунды, т.е. 0.016 сек), но графичекий процессор не успевает вовремя отрисовать кадр.
► Как решить проблему
Отрисовка кадра происходит по всей площади экрана, вне зависимости от настроек проекта. Например, если в параметрах проекта указан размер окна 1280x720, а у пользователя экран 1920x1080, то графический процессор будет отрисовывать кадр площадью 1920x1080. Так в чём же хитрость? Хитрость в том, что вы можете программно изменить разрешение экрана.
За это отвечает параметр "canvas size". То есть, вы просто программно уменьшите площадь отрисовки, что снизит нагрузку на графический процессор. Если вы играли в компьютерные игры, то это то же самое, что изменить разрешение экрана в настройках игры. Жертвуя качеством картинки вы выигрываете в производительности.
► Как это сделать:
▪ В свойствах проекта обязательно ставим Fullscreen scaling > Low quality.
1. Изменение разрешения на старте уровня. On start of layout > set canvas size. Важно чтобы вы меняли разрешение экрана пропорционально, иначе часть экрана просто будет обрезана.
Одно из решений — это сделать специальную переменную, значением от 0.25/0.5/1 (назовём её Scale). И умножать эту переменную на размер экрана пользователя.
- ▪ On start of layout > set canvas size :
Scale*ViewportRight(0);
Scale*ViewportBottom(0)
И обязательно добавляем ниже ещё одно действие:
- ▪ Set Layout scale to Scale*1
2. Другой вариант — это динамическое изменение разрешения в процессе игры. То есть, вы отслеживаете показатель FPS по ходу игрового процесса и если он начинает падать, то понижаете разрешение экрана.
Например, событие "Every X seconds", а ниже подсобытие с условием "fps < 45" и действиями "set canvas size", "set layout scale" аналогично тому, как это было показано выше. А также, действие, которое меняет значение переменной Scale. То есть, вы сможете изменять разрешение прямо по ходу игры, в зависимости от того, как сильно падает fps.
Только не увлекайтесь и не делайте эту проверку слишком часто, потому как при изменении canvas size графический процессор полностью перерисовывает экран, что на короткое время вызывает вызывает замирание экрана (так называемые "фризы").
► Другие способы применения
Можете добавить настройки графики, чтобы игроки сами смогли выбрать наиболее подходящий вариант. В общем, вариантов реализации много — выбирайте то, что вашей игре подходит больше.
► Исходник
Для симуляции высокой нагрузки на GPU в исходнике используется большое количество спрайтов наложенных друг на друга.