June 1st, 2016

Book

realtime latency-free easing

Приведу тут несколько задач. Никто так не делает™, а мне хочется.

Дано: мышь обновляется 200 раз в секунду, экран - 60 раз. Мы хотим правильно™ перетягивать объекты по горизонтали.

Начнём с простого. Допустим, (1а) мышь перемещается идеально равномерно по столу. Надо обеспечить, чтобы Х-координата курсора мыши на экране совпадала с координатой перетягиваемого объекта.

Интересно, что это весьма нетривиальная задача. Скажем, если (2а) никакой реальной мыши нет, а нам надо просто анимацией изобразить, что кто-то равномерно перетаскивает, задача значительно упрощается.

В-общем, визуально наивное решение (1а) отличается от точного решения (2а) довольно сильно. Даже если опустить граничные условия (начало и конец движения).

Проблема известна в обработке сигналов как causal vs not-causal filters. По идее, этим (компенсацией разнообразных отставаний) должны заниматься разрабы мультиплеерных игр и теоретики теории управления, но я что-то не нашёл ничего по теме.

Задача Б - это задача А плюс начало и конец движения. Даже если реальная мышь идеально следует easing-кривым, 2Б всё равно оказывается практически неразрешимой.

В задачах "В" указатель как-то перемещается человеком. В задаче 3В нужно по известной трассе (списку пар "время-координата") построить анимацию, которая была бы максимально близка к трассе, но в то же время была гладенькой и приятной для глаз. В задаче 3А требуется делать то же самое в реалтайме.

В принципе наверное можно собрать обучающую выборку трасс и построить по ней предсказывающую модель. Трудность будет в граничных условиях - т.е. при торможении указателя объект будет его обгонять, и нужно обеспечить возвращение объекта из ошибочно предсказанной в реальную конечную позицию без рывков

Upd литература по теме: Mouse Pointing Endpoint Prediction Using Kinematic Template Matching. Там же ссылки на prior art

Upd2 вопрос по компенсации лага мыши на SO (без ответов)

Upd3 вопрос о природе лага мыши на SO (без нетривиальных ответов)