reckfellENGINE

Интерполяция: физический шаг, кадр и задержка

Что интерполируется, откуда берётся alpha и почему гладкое изображение немного отстаёт от физики.

На этой странице

Два независимых времени

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

Интерполятор хранит предыдущую и текущую позы. Engine.GetPhysicsInterpolationFraction возвращает долю между физическими шагами для промежуточного рисунка. Для одной координаты смысл такой: render = previous + (current - previous) × alpha. Это поясняющая формула; для transform с вращением интерполируйте положение и ориентацию подходящим алгоритмом, а не линейно смешивайте все коэффициенты матрицы.

previouscurrentalpharender
1201320120
1201320.25123
1201320.5126
1201320.75129

При следующем шаге current становится previous и появляется новая текущая поза. Обычный Position/GlobalTransform остаётся состоянием сущности, а не обещанием экранной промежуточной координаты. В 3D для визуального потребителя есть GetGlobalTransformInterpolated; у Entity2D такого одноимённого метода в SDK нет.

Цена сглаживания

Использование двух уже известных состояний означает визуальную задержку порядка физического шага. При 60 шагах/с сам шаг — около 16.7 мс; это не измерение полной задержки ввода, дисплея или сети. Реальное ощущение зависит также от камеры и способа ввода.

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

Проверить наблюдением

В примере 2D синий и белый квадраты получают одну X-координату на каждом шаге. У синего On, у белого Off. При 10 шагах/с и более частом рендере синий занимает промежуточные экранные положения, белый — удерживает физические положения до следующего шага. Статичный снимок показывает расположение, а разницу в плавности нужно наблюдать в движении.

Автопроверка читает центры цветных объектов из 72 последовательных кадров каждого примера 2D/3D и сравнивает число смен экранного положения. Дополнительно она сопоставляет 3D-проекцию GetGlobalTransformInterpolated с пикселями. Это проверка конкретного примера на установленном рендере, а не оценка всей производительности или задержки устройств.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.