Voidwalker - что такое этот ваш FPS (а еще VTS и FTS)
Видели когда-нибудь в эмуляторах PS1 лимит на FPS?
Если Cyberpunk 2077 выдает нам на RTX 5090 с лучами и без DLSS аж целых 28 кадров - то чем больше 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 (сколько можно отрендерить, столько и дадим угля).
Как видим, желанные нами 60 Гц на экране дают движку всего от 16 до 20 мс на обсчет игровой логики, передвижение объектов, расчёт коллизий, общение с сервером и прочее. Правда, современные многоядерные процессоры за такое время способны выполнить несколько миллиардов операций.
А что там с PS1?
В стародавние времена, когда деревья были большими, мы жили с телевизорами, работающими или в PAL (50 Гц), или в NTSC (60 Гц). NES/Famicom/Dendy, например, вообще не имела FTS. У игры есть жесткие 50 или 60 FPS. Если вдруг игра была сложной и кадры выпадали - игра просто становилась медленнее. А при запуске на эмулятор без ограничения рендера (FPS) - быстрее.
PlayStation 1 уже оказалась на границе парадигм. Игры всё еще использовали VTS, но разработчики уже пытались искусственно реализовать FTS на системных таймерах, хотя их точность не позволяла в честный FTS.
Звучит смешно, но первой PlayStation, давшей честный FTS была только PlayStation 4 (!), в то время как на ПК системные таймеры позволяли в FTS примерно с 2000-х.
Ваш любимый Voidwalker будет работать в FTS и минимум в 60 FPS, не волнуйтесь.