Комментарии 5
Как производить трансформирование вершин модели я в принципе понимаю, однако возникает проблема привязки вершин к joint-ам и возникает отвратительная анимация движения.
(Если добавите источники — это 95% ответа на поставленный выше вопрос)
Конкретно с захватом движений иметь дело на текущий момент не доводилось (по крайней мере, с реализацией), но видел несколько интересных статей на эту тему в материалах конференции Motion in Games. Можно ещё поискать отдельные публикации в Google Scholar.
Интересная статья, хоть и для меня (как новичка в 3D анимации) - очень сложная! Хотя, чувствую, что ничего особо сложно в данном материале - может дело в подаче.
Лично для меня было бы интересно продолжение темы для мультиинстанс ренеринга - когда нужно вывести десятки или даже сотни анимированных моделей - каждая в своей анимации. Да хотя бы просто одну и ту же модель, в одном анимационном клипе ввести 100 раз, но в разных позициях расположения и разных позициях анимации.
При инстанс-рендере модель просто дублируется нужное количество раз вертексом буфере (под разным идентификатором порядка в вершинах) и передаётся ещё массив позиций (мировых трансформаций). Но для анимации для каждой модели ещё нужно палитру анимации костей передавать так получается - нужно будет передавать массив (позиций) массивов (костей).
Когда я начал читать статью - я то думал будет реализация, где все настройки (метаданные) анимации будут передаваться в вершинный шейдер статично, а вся магия по расчёту позиции костей будет осуществлена уже в шейдере. Тогда инстансинг моделей с разными кадрами скелетной анимации особо не изменится и для инстансинга статичных моделей - просто вместе с массивом мировых трансформаций каждого инстанса нужен будет массив позиции анимации клипа + метаданные о каждом кадре анимации - и тогда уже расчёты будут внутри шейдера.
Но тут скорее всего всё сместится к тому, что передача таких метаданных - тоже будет массив (костей) массивов (кадров(перемещения и ориентации)) - если делать такой шейдер в общем случае затруднительно, то есть два три решения:
Фиксированное число костей (и небольшого количества) - тогда каждая кость - это просто отдельный массив в uniforms - отдельный поток анимации (для разных скелетов - соответственно разный шейдер, хотя, вероятно тут тоже можно было бы оптимизировать всё условно для одного шейдера).
Распределить все инстансы по группам нахождения между двумя ключевым кадрами - каждую группу рендерить отдельно, передавая в вершинный шейдер в двух uniform два кадра (прошлый и следующий + флаг - что текущий кадр = следующему и интерполяция не нужна; тут ещё можно оптимизировать - сделав набор таких переменных - чтобы можно было передавать фиксированный набор разных скелетов - обычно в этом случае их не много вариантов - которые применяются во всех инстансах) - и в каждом uniform находятся метаданных в массиве костей - останется просто выполнить интерполяцию между двумя ключевыми кадрами (при необходимости).
А ещё можно передать метаданных трансформаций каждой косточки и каждого кадра - как один массив - просто развёрнутую линейно матрицу2x2 - получается упрощённый вариант 1. - но вместо отдельных глобальных переменных - один линеаризованный массив (два: для кадров перемещения и ориентации) с группами смещений по каждому номеру кости.
А это я ещё не завёл речь об упаковке в шейдер сразу нескольких клипов анимации - ведь разные инстансы мог быть в разных состояниях анимации (в различных анимация) - не очень бы хотелось делить их ещё и по этом признаку - тут уже начинает теряться всё преимущество инстанс-рендеринга - вместо, условно, 100 объектов отрисовки за раз будет получаться от силу десяток - а количество отрисовок увеличится на порядок! Третий вариант тут, кстати, очень хорошо должен подойти!
Вот об этом всём было бы интересно статью почитать. Вообще про инстанс-рендеринг очень очень мало статей. Про анимированный инстанс-рендеринг я вообще не видел.
А сами трансформации анимации при расчёте палитры анимации для текущего кадра нужно делать на GPU, а не на CPU - или я ошибаюсь?
Реализация скелетной анимации для трёхмерных моделей