Russian Qt Forum
Ноябрь 22, 2024, 19:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронизация анимаций 2  (Прочитано 6012 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Декабрь 20, 2019, 14:11 »

Добрый день

Есть последовательность анимаций (данных записанных по кадрам)

Animation      Type           Frames    Speed
------------------------------------------------
Walk              Cycle          0-50          10
Walk2Run       Transition   51-75        15
Run                Cycle         76-100       20
Run2Walk       Transition   101-125     15
Walk              Cycle          126-176     10
 
При проигрывании всей последовательности объект сначала "идет", потом переключается на "бег" и затем обратно на "шаг". Но мы можем проигрывать всяко-разно. Во-первых, анимации типа Cycle построены так что их можно проигрывать N раз, напр после проигрывания первых 50 кадров мы можем их проиграть снова, в рез-те объект пройдет большее расстояние прежде чем переключится на бег. Во вторых, можно менять скорость проигрывания, напр те же первые 50 кадров можно проиграть за 40, объект будет делать те же самые шаги и пройдет то же расстояние, но за меньшее время, т.е. визуально он делает шаги быстрее. Конечно это дает разумные рез-ты до определенного предела.

Требуется: для каждого кадра произвольной траектории найти время (кадр) исходной анимации (табличка выше). Рез-т должен быть "бесшовным"

Немного "пожуем". Вот просто взять "walk" и подстроить время проигрывания под траекторию. Но на каком-то участке скорость может соответствовать "run",  что совсем не "шаг быстрее". Ну тогда давайте на этом участке задействуем "run". А как? Ведь до этого был "walk", просто так соскочить на "run" нельзя (шов), надо сначала проиграть переход "walk2run". Ах, так он ведь может не вписаться! И.т.д.

Спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Декабрь 23, 2019, 14:44 »

Можно представить это как "конструктор" (для детей). Есть пр-ки зеленые и синие, но соединять их напрямую нельзя, нужно использовать "переходнички". Число синих, зеленых и переходничков не ограничено. Требуется выстроить цепочку которая наилучшим образом описывает заданную кривую (график скорости). Правда это еще не все - можно менять ширину/высоту любого пр-ка сохраняя при этом его площадь (скорость проигрывания).

Наверняка задача известная, но как ее "нагуглить"? Скорее всего она называется как-то совсем иначе


Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Декабрь 23, 2019, 18:41 »

Ох что-то мне кажется это что-то из задач об упаковке
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Декабрь 23, 2019, 18:48 »

Я бы попробовал подумать в эту сторону (я тупой и в предметной области никогда не шарю, так что меня можно не слушать) - вот у нас есть график и есть знание о площади прямоугольников.
Получается, надо замостить площадь под графиком прямоугольниками. Площадь не зависит от формы кривой => можно рассматривать замощение прямоугольника такой же площади (просто если график "сдувается" вдвое по оси У мы потом соответствующий прямоугольник "раздуем" по оси Х). Длина прямоугольника известна - это длина графика. Высота тоже известна - это что там из площади графика получается. Таким образом, можно наши прямоугольники зафиксировать по высоте и решать задачу об упаковке на отрезке. Это задача о рюкзаке, что ли?..
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 25, 2019, 17:24 »

Это задача о рюкзаке, что ли?..
Хз, может и да, но это задача слишком общая и воспользоваться имеющимися решениями не удается.

Мое гугление на сей раз успехом не увенчалось, вот пожалуй лучшее что накопал. Да, "движение по заданному пути" есть, но подстройкой скорости никто не занимается. И ссылка старая, впечатление что это никому не интересно. Возможно потому (ну это я так думаю) что более новые техники покрывают это "синтезом" т.е. умеют создавать кадры которых нет в исходных анимациях.

Придется переться великом, нежелательно, но лучшего не видно. В прынцыпе какое-то рабочее решение не вызывает затруднений. Напр мы закончили "синий" пр-к и теперь есть выбор - повторить опять синий или соскочить на зеленый. Просчитать оба и выбрать то где скорость меньше отличается от скорости используемой анимации. Возможно потребуется просмотреть 2-3 или больше шагов вперед, ну тоже решаемо.

Однако есть мерзкий "частный случай" - так называемые "idle" анимации где сам объект не движется, но анимация есть. Напр char дысыт (вздымается грудная клетка), лупает глазками, жестикулирует руками, и.т.п. как-то видел даже играет на гитаре. При этом скорость = 0, и значит все кадры idle анимации будут просто пропущены. Что недопустимо. Тут пока не знаю что делать
« Последнее редактирование: Декабрь 25, 2019, 17:26 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.