Voidwalker - или просто и наглядно об оптимизации в играх

Здравствуй, DTF! Тормозит ли ваша игрушка на вашей модной видеокарте или процессоре? Ругались ли на разрабов за оптимизацию? Вот вам простой и наглядный пример изнутри, как может выглядеть оптимизация.

Поставили нам задачу красить спрайт игрока в разные цвета в зависимости от полученного урона. Для простоты берем HP и просто рисуем фигурку игрока каждый раз. А потом успешно забываем про это на будущее. Ну и пусть по заданию менеджера релизим бегом как есть.

Теперь включаем профайлер и играем ровно 1 минуту.

Спрайт игрока до кэширования - аллокация 39.97 Мб за 1 минуту
Спрайт игрока до кэширования - аллокация 39.97 Мб за 1 минуту

А потом добавляем кэширование, работы на 2 минуты.

Спрайт игрока после кэширования - аллокация 237.82 Кб за 1 минуту
Спрайт игрока после кэширования - аллокация 237.82 Кб за 1 минуту

Вот так ровно одна забытая оптимизация зеленых/желтых/красных ботинок игрока сожрала в 172 (!) раза больше памяти, чем могла бы. Почти 40 Мб вместо жалких 256 Кб.

Это мы еще CPU Time в расчет не брали. Спойлер - 1580 мс за минуту вместо 20 мс, или в 79 раз больше. 1,5 секунды из 60 мы потратили тупо на отрисовку спрайта.

У нас же у всех по 32 Гб одной ОЗУ, такое можно и не заметить. Или потерять. Или поставить низким приоритетом.

А теперь представьте, какое безумное количество элементов в современных играх, и то же самое кэширование, реализованное в движке, может быть тупо забытой кем-то галочкой в миллионах строк кода и экранов в UE5.

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

Вот так и живем.

28
26 комментариев