Скорость воспроизведения

Визуализация временных данных в Kepler.gl опирается на механизм анимации, который синхронизирует отображение слоёв с временной шкалой. Скорость воспроизведения становится ключевым параметром при работе с потоками координат, маршрутами и временными событиями, так как она определяет плотность восприятия данных и характер их интерпретации.

Модель временной анимации

Анимация в Kepler.gl строится вокруг концепции time-based state. Каждый кадр соответствует определённому моменту времени, а визуализация пересчитывается на основе текущего положения временного курсора.

Основные компоненты:

  • currentTime — текущее значение времени на шкале
  • timeDomain — диапазон доступных временных данных
  • animationConfig — объект управления воспроизведением
  • filterRange — активное окно отображаемых данных

Скорость воспроизведения фактически определяет, насколько быстро currentTime смещается относительно реального времени.


Параметр speed и его роль

Внутри конфигурации состояния часто используется параметр, отвечающий за ускорение временного потока:

const animationConfig = {
  currentTime: 1609459200000,
  speed: 1,
  timeFormat: 'milliseconds'
};

speed интерпретируется как коэффициент:

  • 1 — нормальная скорость (реальное время)
  • 0.5 — замедленное воспроизведение
  • 2 — ускорение в 2 раза
  • отрицательные значения в стандартной конфигурации не применяются

Изменение этого параметра напрямую влияет на шаг обновления временной оси.


Механизм пересчёта времени

При включённой анимации Kepler.gl использует цикл обновления, в котором:

  1. Получается текущее системное время
  2. Вычисляется дельта между кадрами
  3. Дельта умножается на коэффициент скорости
  4. Обновляется currentTime
  5. Перерисовываются слои

Формально:

t_{effective} = t_{real} speed

Где:

  • Δt_real — реальный интервал между кадрами
  • speed — коэффициент воспроизведения

Связь скорости и временного окна фильтрации

При работе с фильтрами типа time range slider скорость влияет не только на анимацию, но и на плотность выборки данных.

Если временной фильтр задан как окно [t1, t2], то при увеличении скорости:

  • увеличивается частота пересчёта фильтра
  • возрастает нагрузка на рендер
  • сокращается воспринимаемая детализация событий

При уменьшении скорости наблюдается обратный эффект — визуализация становится более «разреженной» и аналитически точной.


Триггерные слои и зависимость от playback

Некоторые слои в Kepler.gl чувствительны к временной шкале:

  • Trips Layer — интерполирует движение объектов
  • Point Layer с time filter — отображает события по временной метке
  • Arc Layer с анимацией — строит временные дуги перемещения

Для таких слоёв скорость влияет не только на частоту обновления, но и на визуальную интерполяцию траекторий.


Интерполяция движения при высокой скорости

При значениях speed > 1 система вынуждена упрощать вычисление промежуточных точек. Это приводит к:

  • уменьшению числа интерполированных кадров
  • возможной потере плавности движения
  • увеличению «скачкообразности» траекторий

Внутренне это связано с ограничением FPS и пропуском временных шагов.


Управление через Redux-состояние

Kepler.gl хранит состояние приложения в Redux-структуре, где анимация является частью visState.

Пример обновления скорости:

dispatch(
  updateVisData({
    animationConfig: {
      ...animationConfig,
      speed: 1.5
    }
  })
);

Любое изменение приводит к пересозданию временного цикла и пересчёту зависимых слоёв.


Ограничения точности при низкой скорости

При значениях speed близких к нулю возникают особенности:

  • увеличение точности позиционирования объектов во времени
  • рост количества промежуточных состояний
  • повышение нагрузки на систему из-за частых мелких обновлений

Если скорость стремится к нулю, анимация фактически превращается в пошаговую навигацию по временной шкале.


Влияние FPS на восприятие скорости

Фактическая плавность зависит не только от speed, но и от частоты кадров:

  • 60 FPS обеспечивает равномерное движение
  • 30 FPS создаёт заметные скачки при высокой скорости
  • 120 FPS позволяет сгладить интерполяцию даже при ускорении

Таким образом, визуальная скорость является функцией двух переменных:

v_{visual} = speed FPS_{normalized}


Синхронизация нескольких слоёв

При наличии нескольких временных слоёв важно, что скорость применяется глобально:

  • все слои используют общий currentTime
  • синхронизация обеспечивается через общий таймер
  • рассинхронизация возможна только при кастомных источниках данных

Это означает, что изменение скорости всегда влияет на всю сцену визуализации.


Практическая интерпретация коэффициента скорости

С точки зрения анализа данных коэффициент speed можно рассматривать как:

  • инструмент масштабирования времени
  • средство управления плотностью событий
  • механизм адаптации визуализации под объём данных

При больших датасетах ускорение используется для обзора общей динамики, при малых — замедление позволяет выявлять локальные закономерности.