Как стать автором
Обновить

Работа с Motion Capture данными, cleaning/чистка

Время на прочтение6 мин
Количество просмотров11K
Доброго всем времени суток!

Я долгое время читаю хабр, и мне все это время кажется, что тема 3д и анимации очень редко радует статьями работников данной сферы. Часто думал, чтобы такого написать, и вот идея оформилась. Я расскажу каким образом происходит первичный этап работы с данными Mocap(Мокап). Всем, кому это интересно — добро пожаловать под кат, осторожно, много картинок (кликабельны).


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

У вас набор файлов анимации, скорее всего это будут файлы с расширением C3d, одного из самых распространенных стандартов.

Данный стандарт подразумевает наличие в пространстве точек-контроллеров, закрепленных на теле человека во время съемок. Эти точки крепятся таким образом, чтобы организовывать на теле недвижимые системы для дальнейшей привязки к костям персонажа (точнее кости будут привязываться к точкам, и недвижимость системы является «условной», т.к. человеческое тело очень гибко и точки ставятся на мышечные покровы). Соответственно в таких системах будут некоторые смещения, которые программное обеспечение усредняет, получая то что нужно.
В своей работе я использую пакет Motionbuilder от Autodesk.

Импортируем Motion данные.


Изображение 1

Motionbuilder задаст вопрос о том, что конкретно импортировать из данного файла.


Изображение 2

Жмякаем по Import и смотрим на экран:


Изображение 3

В видовом окне появится набор подсвеченных голубым цветом точек — это и есть координаты точек-маркеров. Если поискать в интернете — можно найти множество уроков как именно прицепить маркеры к персонажу, если сказать просто и быстро — создается «кукла» — Actor, в которой собраны все необходимые для присвоения ей движений, снятых с положений маркеров, после чего уже с Actor'а движения перенаправляются на персонаж. Но нас это не интересует.

Все полученные данные надо проверять: аппаратура не идеальна, человеческий фактор и т.д., к тому же зависит от договоренности, в каком виде вы получите данные.
В моем случае пенять не на кого, т.к. в мои обязанности входит и съемка.

Немного запутанно получается, потому вот простая цепочка работы данной схемы:

Съемка Mocap -> Обработка данных (чистка/ Cleaning) -> Обработка данных, примененных уже к персонажу и подстройка под его особенности.

Это упрощенная схема. Нас интересует второй пункт — Чистка.
И так, смотрю я на открытые данные и сразу вижу несколько косяков:


Изображение 4


Изображение 5

Среди облака светлых точек в некоторых сегментах анимации точки темнеют. Это значит, что по какой-либо причине в данный отрезок времени нет данных о положении маркера. В принципе такое случается часто, например, если маркер, прикрепленный к боковой части пояса будет закрыт рукой(Изображение 5).


Изображение 6

Если выбрать эту точку, то в соответствующем окне мы увидим графики изменения координат данной точки по 3 осям, в местах, где точка сереет график будет отображен, но при этом окрас поля будет отсутствовать, что и означает отсутствие физических данных. В таком случае график является восстановленным одним из алгоритмов ПО, но в момент потери данных на Actor по данной точке не поступает сигнала о положении. Если бы сейчас был поставлен Actor, отсутствие этой точки может в принципе дать неконтролируемую перекрутку области таза (у меня в одной из анимаций у персонажа так корпус на 180 перекрутила, смотрится весело, но косяк).

Кроме того, при просмотре анимации в видео я обнаружил, что несколько точек «дергаются», это обусловлено тем, что система оптическая, и алгоритм обрабатывая изображение может менять для данной точки динамически используемые камеры, что и обуславливает смещение. К сожалению показать это в видео не представляется возможным, но такие моменты очень хорошо видны на графиках анимации:


Изображение 7

В данном случае видно, как вниз уходит так называемый «Пик».
Соответственно вот две основных причины, наличия в процессе работы пункта «Чистка/Cleaning». Чем мы сейчас и займемся.

Есть несколько способов проведения чистки, но на них останавливаться не будем. Скажу только, что в ПО mocap обычно есть возможность прямо после съемки проверить все графики движения точек и, если есть косяки — восстановить вручную, для движения тела, по-моему, в Motionbuilder данная работа организована удачнее, удобнее и быстрее.

Бывают моменты, когда возможности Motionbuilder, наоборот подходят меньше чем прямая ручная чистка каждого кадра вручную через ПО Mocap.

Итак, нам надо почистить данный блок анимации.
В motionbuilder есть очень полезная возможноть — на основе групп точек-маркеров создавать «Rigidbodies» — жесткие тела. Например, маркеры, отвечающие за положение и наклон головы крепятся жестко, чаще всего это шапка или повязка. Маркеры в таком случае двигаются одной группой. Соответственно это и есть один из примеров RigidBody группы, которую можно создать:


Изображение 8

Внизу во вкладке Rigidbodies жмем Add и видим следующую картину:


Изображение 9

Между выбранными точками образована геометрическая фигура со связями.

Далее по аналогии нужно разбить по группам не двигающиеся относительно друг друга группы точке, например спина, таз, верхняя часть рук, нижняя часть рук. Главное — не соединять группы между собой.


Изображение 10

Вот так это выглядит у меня, с данной схемой расположения точек-маркеров. Для удобства следует переименовывать группы соответственно положению.

Зачем это надо? Данные группы позволят нам редактировать положения точек внутри группы. Например группа таза, отсутствует одна из точек, таз двигается только целиком, соответственно точка без координат должна двигаться вместе с остальными, и Rigid body «утянет» ее положение за остальными точками, основываясь на изменении их положения и положения «Rigid Body». Кроме того это позволит выровнять положение дергающихся точек:


Изображение 11


Изображение 12

Как видно из этих двух графиков — точка дергается сразу по двум осям. ВАЖНО! в этот отрезок времени остальные точки группы не дергаются, двигаются соответственно общему движению тела. Для того, чтобы выровнять этот момент — воспользуемся тем возможностью восстановления положения точки в зависимости от положения общей группы и удалим данный сегмент:


Изображение 13


Изображение 14


Изображение 15

Из изображения видно, что Motionbuilder восполнил пробел графиком, причем график не ровный, а следует изменениям положения остальных точек. Кроме того на экране появилось красное перекрестье, я к нему вернусь, но чуть позже.

Далее с остальными косяками подобного рода (неправильное смещение точек) по аналогии:


Изображение 16


Изображение 17


Изображение 18

А теперь, что же это за перекрестье красное?


Изображение 19

Как видно из изображения — перекрестье появляется в момент разрыва графика, когда есть теоретическое положение точки (восстановленное), но нет фактического.

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

Когда вы уверены, что работа по выправлению косяков (чистка) закончена — выбираем необходимые нам точки и нажимаем внизу кнопку Regenerate Marker Animation, таким образом все данные, полученные через Rigid Body будут «запечены» в маркеры. Точки можно выбирать и запекать по частям или все сразу, зависит от конкретной ситуации.

Когда координаты положения точек запечены с групп в кадрах разрыва будет следующая картина:


Изображение 20

Опять отображение старого и нового положения точек, но теперь точка, связанная с группой уже имеет фактическое положение и может быть использована в анимации Actor.

Далее можно выбрать точки и наложить на них дополнительные автоматические фильтры, но нельзя забывать, что они работают по определенным алгоритмам и чем больше фильтров, тем более компьютерно смотрится анимация, снятая с человека, т.к. теряются особенности неравномерности человеческих движений.

Надеюсь данная статья будет кому-либо полезна.

P.s. упоминания о данном способе редактирования и чистки в интернете есть, но вскользь, я постарался описать процесс с некоторыми теоретическими вкладками, дабы было понятно что и зачем делается, если будут вопросы — постараюсь ответить.

UPD: Пример использования оптической системы маркеров:



Съемка движений слона. На объект съемки прикреплены отражающие свет сферы — маркеры. В момент захвата движений объект с маркерами должен находиться в поле зрения нескольких камер. Каждая камера снимает в инфракрасном спектре. У каждой камеры вокруг объектива кольцо с инфракрасными светодиодами. Таким образом для каждой камеры подсвечиваются точки-маркеры с ее стороны.
Теги:
Хабы:
Всего голосов 31: ↑26 и ↓5+21
Комментарии34

Публикации

Истории

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань