← Назад к статьям

19 февраля 2025 г.

Скорость в играх - FPS, VTS и FTS

🧠 20% LLMРАЗРАБОТКАИГРЫ

Что такое FPS в играх?

Очевидно, Frames Per Second - количество кадров в секунду.

Но видели ли вы когда-нибудь в эмуляторах старых консолей, например, PS1, лимит на FPS? Зачем он нужен?

Рассмотрим на примере моей игры Voidwalker: https://github.com/axelrodvl/voidwalker

vts

Когда больше FPS - не лучше. Или чистый VTS. Подход времен NES и PS1.

Что такое FTS и VTS

Если Cyberpunk 2077 выдает нам 28 кадров в секунду на RTX 5090 с лучами и без DLSS - то чем больше FPS, тем лучше.

А если возможности железа уводят FPS в облака? С какой скоростью двигать объекты? Как часто опрашивать кнопки на джойстике?

Для решения задачи существует два подхода:

  • Variable Time Step (VTS) - расчёт физики/логики/ввода вместе с кадром, то есть равно количеству FPS.
  • Fixed Time Step (FTS) - расчёт физики/логики/ввода фиксированное число раз в секунду, вне зависимости от FPS.

Как это работает в Unreal Engine и Unity

В двух самых популярных игровых движках физика, логика и обработка ввода работает следующим образом:

  • Физика - FTS, равный 50 Гц (20 мс на кадр) или 60 Гц (16,66 мс на кадр).
  • Игровая логика - FTS или VTS (зависит от игры).
  • Обработка устройств ввода - VTS (нужно обрабатывать не только факт нажатия на кнопку, но еще и скорость отклонения аналоговых стиков).
  • Кадры - VTS, равное FPS (сколько можно физически отрендерить, столько и отрисуется - 15 кадров или 1500 кадров).

Минимально желаемые в любой игре 60 FPS на самом деле дают движку всего лишь от 16 до 20 мс на обсчет игровой логики, передвижение объектов, расчёт коллизий, общение с сервером по сети и прочие задачи. Современные многоядерные процессоры за это время способны выполнить несколько миллиардов операций, но и количество объектов в современных играх поражает воображение и может занять CPU на 100%.

Во времена NES и PlayStation 1

В стародавние времена, когда деревья были большими, мы жили с телевизорами, работающими или в PAL (50 Гц), или в NTSC (60 Гц).

NES/Famicom/Dendy, например, вообще не имела FTS. У игры были жесткие 50 или 60 FPS, в зависимости от PAL или NTSC региона/телевизора. Если вдруг игра была сложной и кадры выпадали - игра просто становилась медленнее. А при запуске на эмулятор без ограниченияе скорости рендера (FPS) - быстрее.

PlayStation 1 уже оказалась на границе парадигм. Игры всё еще использовали VTS, но разработчики уже пытались искусственно реализовать FTS на системных таймерах, хотя их точность не позволяла в честный FTS.

Самое удивительно, что первой PlayStation, давшей честный FTS была только PlayStation 4 (!), в то время как на ПК системные таймеры позволяли работать с FTS примерно с 2000-х.

vts

Современный подход - рендер VTS, физика, логика и ввод на FTS.

Спасибо за внимание!