Тематическая иллюстрация

Разработчик, описавший попытку ускорить Brotato на маломощном устройстве, сделал вывод: качество тестового стенда определяет ценность оптимизации. Идея, показавшая выигрыш на несопоставимых прогонах, может оказаться ложным улучшением.

Почему первая попытка не дала надёжного ответа

Автор начал с тяжёлого игрового сценария и предполагаемого узкого места — физических расчётов. Эксперименты с упрощённой обработкой столкновений и объединением графических ресурсов на одном устройстве показали улучшение, но при переносе на другое устройство заметного выигрыша не обнаружилось.

В первоначальных замерах не хватало метаданных сборки, нескольких сценариев, повторных прогонов и сырых покадровых данных. Средняя скорость скрывала редкие длинные кадры. Даже одинаковый seed не гарантировал воспроизводимость всех условий.

Что вошло в новый стенд

  • Фиксированные сценарии с разной нагрузкой на физику и отрисовку.
  • Повторения и прогрев перед измеряемыми запусками.
  • Идентификатор сборки и параметры устройства.
  • Сохранение сырых метрик для повторной обработки.
  • Сравнение только тех записей, условия которых совпадают.

Продолжительность сценария привязывали к выполненной симуляции, а не только к настенным секундам. Это помогало отличать реальное ускорение от ситуации, когда программа просто выполнила меньше расчётов.

Медиана и длинные кадры

Медиана показывает центральное значение выборки, а P95 и P99 помогают увидеть хвост распределения. Для времени кадра критичны большие значения: редкий длинный кадр может испортить ощущение игры, даже если средний FPS выглядит приемлемо.

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

Как менялась гипотеза

По результатам на новом стенде замена физического сервера не давала ожидаемого выигрыша. После этого автор искал лишние пары столкновений, повторные вычисления и мелкие покадровые вызовы.

Отдельно проверялась отрисовка: снижение разрешения и временное скрытие групп объектов помогали различить нагрузку GPU и расходы на подготовку множества команд. Затем вернулись к атласам, объединению отрисовки и эффектам частиц.

Такая последовательность соответствует общему правилу: сначала найти ограничивающий участок, затем изменить его и снова измерить. Профилировщик создаёт накладные расходы, поэтому его показания сопоставляют с отдельными контрольными прогонами.

Что переносится в другие проекты

Из кейса не следует, что любой игре нужны конкретные структуры вроде хеш‑сетки, другого BVH или MultiMesh. Замена структуры может улучшить один сценарий и ухудшить другой. При объединении объектов возникают собственные ограничения, например общая видимость группы вместо независимого отсечения отдельных экземпляров.

Переносимая часть метода — сохранять условия и данные, проверять несколько сценариев и отказываться от гипотез, которые не подтверждаются. Заявленные результаты относятся к конкретным устройствам и версии игры; независимый бенчмарк здесь не проводился.