Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2

Склейка скелетных анимаций

30.06.2023, 13:34. Показов 829. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

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

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

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

Какие есть мысли? Делать это великом или искать готовые решения? (тогда где и есть ли они).

Спасибо
Миниатюры
Склейка скелетных анимаций   Склейка скелетных анимаций  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2023, 13:34
Ответы с готовыми решениями:

Создание скелетных схем (приложение)
Товарищи, подскажите пожалуйста, есть такая идея в С# написать приложение: Основной функцией которого явл рисование прямыми линиями...

Цепочка анимаций
Приветствую! Вопрос вроде простой, но не видел "интересных" решений. Нужно построить цепочку анимаций - блок DIV должен первые 500мс...

Совмещение 2D анимаций
Здравствуйте! Я новичок в Unity, делаю простенький 2d платформер. У меня есть несколько анимаций + анимация получения урона (объект за 10...

10
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
30.06.2023, 17:31
Цитата Сообщение от Igor3D Посмотреть сообщение
Многочисленные книги (в глянцевых обложках) по сути разжевывают "азы" упомянутые в предыдущем абзаце, приводят код и.т.п.
Статьи "научные" полистайте, там не "азы" обсуждаются, как правило.
Например, это гуглится на раз-два.
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
30.06.2023, 19:19  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Статьи "научные" полистайте, там не "азы" обсуждаются, как правило.
Например, это гуглится на раз-два.
Помню, хорошая статья. Но опять-таки, речь там об (умной) интерполяции. Это сработает хорошо напр для перехода "с шага на бег" или наоборот, но не для нашего случая "шел и встал". Кстати обратите внимание на год статьи (2003)

Не по теме:

Возможно перед тем как гуглить стоит определить "а что мы, собсно, хотим найти :)

0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
30.06.2023, 19:53
Цитата Сообщение от Igor3D Посмотреть сообщение
но не для нашего случая "шел и встал"
А что не так? Вам же не "двухминутный" переход нужен, а буквально полсекунды-секунда. На таком промежутке почти естественный переход получится. Что не так? (Я, если что, не разбираюсь в анимациях)

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Возможно перед тем как гуглить стоит определить "а что мы, собсно, хотим найти :)
Действительно, а что? :)

0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
30.06.2023, 20:38  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
А что не так? Вам же не "двухминутный" переход нужен, а буквально полсекунды-секунда. На таком промежутке почти естественный переход получится. Что не так? (Я, если что, не разбираюсь в анимациях)
Я тоже не профессиональный аниматор Как я себе представляю:

- вот есть анимация "идет" (walk). В начале цикла движения левая нога на уровне правой но чуть приподнята. Она идет вперед и становится на землю, за это время подымается пятка правой. Потом двигается вперед правая и тоже становится на землю, за это время приподнимается левая. Цикл движения окончен (здесь 38 кадров), можно начинать все сначала. Конечно root смещается соответственно.

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

Ну и ясно что интерполяция по всем бонам ничего хорошего не даcт. Хотя бы потому что в какой-то момент для левой уже все свершилось, а для правой еще ничего (нового) не началось. Ну и я так смело говорю левая/правая, но это ведь только пара бонов стопа/foot (что стоит на земле).

Не по теме:

человек "приставил ногу"
Меня всегда смущало что мы ходим вопреки законам физики. А как же Ньютон, масса, ускорение, "движущееся тело нельзя остановить мгновенно" и все такое ? :)

0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
30.06.2023, 20:52
Цитата Сообщение от Igor3D Посмотреть сообщение
Ну и ясно что интерполяция по всем бонам ничего хорошего не даcт. Хотя бы потому что в какой-то момент для левой уже все свершилось, а для правой еще ничего (нового) не началось.
Во-первых, вы наглядно показать можете, что "интерполяция ничего хорошего не даст"?
Во-вторых, вы можете смешивать не в любой момент, а только начиная с "ключевых" кадров (напр., в момент окончания шага, так же как и в жизни, остановка при ходьбе начинается в определенных позах). В старых игрушках, насколько я помню, именно так и делали.
Как в современных - не знаю, но судя по реалистичности, там просто специальные переходные анимации.
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
01.07.2023, 11:12  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Во-первых, вы наглядно показать можете, что "интерполяция ничего хорошего не даст"?
Не хочу воскрешать старый код только чтобы показать "как плохо". Это можно посмотреть напр в тьюториалах Вани, видно что char не "ходит", а его "двигают", этот эффект часто называют "foot skating".
Цитата Сообщение от zayats80888 Посмотреть сообщение
Во-вторых, вы можете смешивать не в любой момент, а только начиная с "ключевых" кадров (напр., в момент окончания шага, так же как и в жизни, остановка при ходьбе начинается в определенных позах). В старых игрушках, насколько я помню, именно так и делали.
Про игрушки ничего не скажу, но опцию типа "blend с заданного кадра" видел не раз. Но все равно не вижу как blend'ить.

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

И вот у нас есть конечная позиция (прямые ноги), и мы можем ее как-то смешивать с любым кадром. Хорошо, пусть с какого-то кадра по какой-то. Хорошо, пусть даже разные веса для левой и правой ног. Все равно не вижу "разумного сценария" такого смешивания
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
11.07.2023, 14:39  [ТС]
В аттаче мувик - полный цикл левой ноги, кадры 0..37. А картинка - требуемое конечное положение. Напрашивается бленд разных костей на разных интервалах времени. На кадре 15 стопа полностью "приземлилась", значит 3 нижних кости уже должны занять свое конечное положение "в мире". Может с этого же кадра начать бленд 3 верхних бонов? Но сколько кадров он должен длиться? И как морфить "часть бонов" в мире - смутно себе представляю. Пусть стопа на кадре приземления (15) отличается от требуемой (хотя и немного). Как это пофиксить, начинать блендить ее напр с кадра 10? Так можно убить "фазу приземления". Или морф 3 верхних бонов - они ведь "парент", и стопа (чайлд) может начать елозить по земле. Да, и это всего лишь левая нога, для правой все совсем иначе.

В общем "велик" не выглядит таким уж безнадежным, но проблем/неясностей хватает. Другие пути/подходы? Огромное число людей занимающихся "играми" и.т.п. ничего не скажут, они сосредоточены на конкретном API, реальный ответ "в нашем API этого нет" давно получен. Остальные наоборот, видимо инстинктивно, полагают что какие-то средства/API существуют и городить велик неуместно. Попал "в стык"
Миниатюры
Склейка скелетных анимаций  
Вложения
Тип файла: mp4 Preview.mp4 (77.3 Кб, 15 просмотров)
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
12.07.2023, 13:39
Цитата Сообщение от Igor3D Посмотреть сообщение
Напрашивается бленд разных костей на разных интервалах времени.
На разных интервалах - это неудобно, да и зачем, если можно подвести под один интервал, а "кривую смешивания" иметь для каждой косточки свою (так называемая маска).
Цитата Сообщение от Igor3D Посмотреть сообщение
Как это пофиксить, начинать блендить ее напр с кадра 10?
На мой взгляд самые удачные кадры для начала - 11 или 12, там голень имеет положение, практически идентичное требуемому из второй анимации.
Цитата Сообщение от Igor3D Посмотреть сообщение
Так можно убить "фазу приземления".
Не понял, что это значит.
Цитата Сообщение от Igor3D Посмотреть сообщение
Или морф 3 верхних бонов - они ведь "парент", и стопа (чайлд) может начать елозить по земле
Почему? Вы же блендите не сами анимации(их трансформации), а их вклад в "мировое" положение костей, т.е. конечный результат применения этих трансформаций. Применяете "транслейт" к анимации "стояния", чтоб какая-нить кость стопы совпадала в обеих анимациях (та, что в обеих наименее подвижна).
Цитата Сообщение от Igor3D Посмотреть сообщение
В общем "велик" не выглядит таким уж безнадежным, но проблем/неясностей хватает.
А в чем собственно "велик" заключается?
Если ваша цель сделать реалистичные переходы между анимациями (я говорю именно глобальное смешивание, а не "аддитивное", когда, например, к ходьбе или бегу добавляются различные анимации торса), то проще попросить аниматора, он вам вручную сделает анимации-переходы для всех возможных комбинаций - это будет быстрее и качественнее, чем какой-то универсальный автоматический или полуавтоматический инструмент изобретать и использовать.

Все это, конечно, ИМХО.
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
13.07.2023, 14:52  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
то проще попросить аниматора, он вам вручную сделает анимации-переходы для всех возможных комбинаций - это будет быстрее и качественнее, чем какой-то универсальный автоматический или полуавтоматический инструмент изобретать и использовать.
Так аниматор может потребовать денег А возможных комбинаций быстро набегает много. И качество "ручняка" отнюдь не гарантируется. Исходная анимация обычно записана с датчиков, mocap (motion capture), сделать свое движение в редакторе реально, но насколько естественным оно будет - неизвестно. Примерный расклад: есть компании торгующие анимациями, это не редкость. Для рекламы дается пара-тройка бесплатных char'ов, для каждого несколько простых анимаций, часто idle, walk, run (стоит, идет, бежит). Человек скачал этот stuff и хочет слепить из него простую анимацию. И тут выясняется что, напр, перехода walk->idle нету, и его надо как-то делать (или даже покупать ). И так для каждого char'а. Поэтому считаю что инструмент имеет смысл.

Цитата Сообщение от zayats80888 Посмотреть сообщение
А в чем собственно "велик" заключается?
"Велик" - просто код/алгоритм придуманный самостоятельно. Велосипедисты часто обвиняются в некомпетентности, непрофессионализме и.т.п., многие считают что все должно быть "ис каропки", т.е. программист должен использовать "готовые решения", а не "городить свое". Такой подход хорош для типовых, хорошо изученных задач на которые часто попадают начинающие, все, мол, "уже давно написано". Однако не все задачи имеют популярные проверенные решения, вот хотя бы данная (этот топик)

О технических вещах отвечу отдельно чтобы не смешивать
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,847
Записей в блоге: 2
14.07.2023, 19:20  [ТС]
В аттаче подписанные боны, мувик - цикл для 2 ног (левые боны синие). Имею такие соображения

Цель - анимация "шел-встал". Крутим цикл движения, вот левая нога приземлилась, примерно кадр 13, боны Toe и Foot заняли свои позиции, больше они двигаться не будут (хотя и есть какие-то повороты Toe). Тогда известны и конечные позиции всех бонов в мире, включая корень (Hips). Теперь ищем кадр где корень ближе всего к этому конечному положению. Это (примерно) кадр 18, т.е. на этом кадре корень + все боны левой ноги должны оказаться в конечном положении. Это время конца морфа (левой ноги), но с какого кадра начинать? Здесь ясности нет
Цитата Сообщение от zayats80888 Посмотреть сообщение
На мой взгляд самые удачные кадры для начала - 11 или 12, там голень имеет положение, практически идентичное требуемому из второй анимации.
Вполне возможно это даст разумный результат, но привязываться к боне Leg (голень, идет от колена ?) как-то нелогично.

Также имеется мелкая неприятность: при морфе бонов левой ноги необходимо чтобы позиция Toe/Foot оставалась неизменной (стопа не должна скользить). Придется обеспечить это сдвигая корень, другого не вижу
Миниатюры
Склейка скелетных анимаций  
Вложения
Тип файла: mp4 Preview.mp4 (82.6 Кб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.07.2023, 19:20
Помогаю со студенческими работами здесь

Смешение анимаций
Всем здравствуйте! Изучаю Unity. Добрался таки до анимаций. Тут видео с результатом: https://transfiles.ru/sw51p На видео показано,...

Рисование анимаций
Хочу написать программу наподобие такой https://multator.ru/draw/, только через Delphi, но не знаю как сделать кадровые слоты.

Задержка проигрывания анимаций
Имеется объект с тремя анимациями: покой, бег, прыжок. У персонажа в ногах есть коллайдер, который проверяет, стоит персонаж на земле или...

Исходники готовых анимаций
доброго времени суток где можно найти исходники готовый анимаций для android эклипс

Организация очереди анимаций
Требуется реализовать следующий алгоритм: Происходит событие №1 - выполняется анимация, блок за некоторое время перемещается из точки А в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru