Войти
ПрограммированиеФорумОбщее

Реализация итеративной интерполяции float во времени, независящей от fps.

#0
(Правка: 26 ноя 2022, 2:28) 22:18, 18 ноя 2022

Добрый. Для проекта на анриле понадобилось модифицировать стандартную функцию интерполяции float во времени (Finterp To) так, чтобы её работа не зависела от времени на кадр. В дефолтной версии происходит простая интерполяция актуального значения к целевому на определенный коэффициент, помноженный на дельту времени (и ограниченный от 0 до 1). Такая реализация дает разную динамику результата при разном fps. Вот как это выглядит на блюпринте: Screenshot_1 | Реализация итеративной интерполяции float во времени, независящей от fps.
В интернете нашел решение с добавлением экспоненты в алгоритм: Screenshot_2 | Реализация итеративной интерполяции float во времени, независящей от fps.
Всё прекрасно работает, но захотелось дальше усовершенствовать алгоритм так, чтобы результат плавно ускорялся и замедлялся во времени. Сейчас происходит просто интерполяция переменной к целевому каждый тик, и чем больше разность переменной от целевого значения, тем быстрее происходит интерполяция.

Пробовал сделать модели гармонического осциллятора с затуханием на основе разных методов интегрирования движения (rk4, semi-implicit euler, leapfrog), и они в принципе хорошо работают, но возникла идея на основе модифицированного finterp To сделать имитацию инерции.

В теории всё просто. Интерполируем первую переменную к target, а затем вторую, где целевым значением будет уже не target, а первая переменная после интерполяции. Вторая переменная уже будет плавно стартовать и тормозиться.

Но возникла проблема! Если результат первой переменной не зависит от fps, то результат второй переменной уже зависит! Вот как примерно выглядит динамика переменных при разном фпс. В левом графике прогнал алгоритм 1 раз с dt = 1, в правом тысячу раз с dt = 0.001 (красная линия - первая переменная, зеленая - вторая) Screenshot_3 | Реализация итеративной интерполяции float во времени, независящей от fps.
Видно что вторая переменная сходится к более медленной динамике при уменьшении dt.
Понимаю что это происходит из-за target для второй переменной. Но как решить эту проблему я не знаю.

#1
19:28, 24 ноя 2022

Удалось построить формулу для второй переменной. Теперь над третьей думаю). Создал тему на мат форуме. Там формулы для первых двух переменных. http://mathhelpplanet.com/viewtopic.php?f=38&t=78641

#2
(Правка: 2:18) 2:17, 25 ноя 2022

Всё, разобрался с третьей переменной. Решение там же на мат. форуме. Тему можно закрывать.

ПрограммированиеФорумОбщее