В предыдущих версиях я заметил, что картинка не такая уж плавная для >1000 FPS, поэтому на уровне движка добавил интерполяцию рендеринга.
Это значит, что игра обновляется с фиксированной частотой (40 UPS), но между циклами обновления может быть бесконечное количество кадров, которые отрисуют максимально плавную картинку.
Объекты хранят информацию о том, где они были в предыдущем цикле обновления и где находятся в текущий момент.
Перед рендерингом текущего кадра я вычисляю интерполятор - дробное число от 0 до 1, которое показывает сколько времени осталось до следующего цикла обновления, когда вновь обновится предыдущая и текущая позиция объекта:

При рендеринге я просто линейно сглаживаю позицию между предыдущей и текущей координатой:

На игровую логику это никак не влияет, только на картинку.
Это стандартный подход для AAA-индустрии. Вот хорошее видео, которое показывает как такая система работает в движке Source, наследуя её ещё со времен Quake: