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

Доброго всем времени суток!

Я долгое время читаю хабр, и мне все это время кажется, что тема 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: Пример использования оптической системы маркеров:



Съемка движений слона. На объект съемки прикреплены отражающие свет сферы — маркеры. В момент захвата движений объект с маркерами должен находиться в поле зрения нескольких камер. Каждая камера снимает в инфракрасном спектре. У каждой камеры вокруг объектива кольцо с инфракрасными светодиодами. Таким образом для каждой камеры подсвечиваются точки-маркеры с ее стороны.
+21
6 января 2012, 01:35
37
Sheynar 5,0

комментарии (34)

+1
hhrhhr #
неужели в данном продукте ценой от 120 тысяч рублей нет документации описывающей все эти шаги? хаутушек, примеров работы, банального getting starting?
+1
Chii #
Видимо нет, раз эта статья появилась и НЛО решило её продвинуть. Продолжаю пользоваться Блендером, благо там и сообщество отзывчивое и мануалы и интерфейс поудобней этого. И скрипты можно писать, вместо того, чтобы руками графики править.
0
Fedcomp #
в максе вроде как тоже своя скриптовая система.
+4
Chii #
А в блендере моя =)
+1
Sheynar #
Скрипты для редактирования графиков анимации — полезная вешь, но в условиях работы с записанной с человека анимации желательно производить как можно меньше объемов редактирования. С каждым примененным скриптом или фильтром, человеческая анимация теряет свою реальность, становится более компьютерно-мультяшной.
–1
Chii #
Надо писать такие скрипты, которые лишнего не вырезают.
+1
Sheynar #
Просто обычно для чистки используют 2 типа скриптов (основная масса упоминаний в интернете) — удаление пиков и сглаживание, которые в свою очередь как-раз и убирают часть «правильной неровности» движений человека. Что убирает долю реализма движений. Если есть скрипты, лишенные этого недостатка — очень хотел бы посмотреть принцип их работы, очень хочется оптимизировать объем/время работы.
–1
Chii #
Что мешает необычно написать третий тип скриптов, который будет резать только то, что надо?
+2
Sheynar #
тип определения «то что надо», с точки зрения данных, есть кривая изменения положения по одной из осей, пик — резкое изменение координаты с возвратом обратно, если взять человека, и «испугать», или еще что-то — движение человека будет резким и скрипт может эту резкость движения срезать, посчитав, что это глюк, хотя на самом деле все нормально. По-этому необходимо в скрипте выловить начало именно глюка, определить его конец и алгоритм выправления, в зависимости от того, какого типа этот глюк. У меня в работе вообще часто бывают моменты с графиками анимации сразу с мокапа — график плавный, в определенный момент вылазит «ступенька» смещения на какую-то величину (в зависимости от того на какую камеру переключилось определение положения, угла этой камеры и т.д.) и дальше график двигается так же плавно, со смещением, после некоторого количества кадров «ступенька обратно», причем количество кадров может быть разным, например 400 кадров, бывало и больше. И вообще, тут начинается спор, хотя мы говорим о разных вещах ;), любой скрипт в той или иной степени полезен, пока не начинает зарезать положительные эффекты мокапа, но есть вещи, которые я лично пока вручную буду делать дольше, зато уверен в результате, если кто-то поможет мне разработать скрипт чтобы не работать руками — я только рад.
0
Chii #
Да да, есть случаи, когда ручное редактирование эффективней написания скриптов, но блендер всё-равно лучше.
0
Sheynar #
У меня в университете дипломная работа звучала так: «Разработка дистанционного курса „создание игр в среде Blender Python“». любую программу для работы с 3д графикой надо воспринимать как инструмент с определенным набором функций, ибо «тридешник» есть суть — чуловэк, который знает принципы работы с 3д, и если надо возьмет любую программу, разберет и сделает то что требуется. (злостно, сорри)
0
Chii #
если надо возьмет любую программу, разберет

К продуктам компании автодеск это не относится, сорцы они не дают и лицензия запрещает декомпиляцию.
+1
Anisotropic #
Молоток тоже не получится декомпилировать, зато ним можно научится забивать гвозди.
«Разберёт» было употреблено в смысле «научиться пользоваться», а не в смысле «залезть внутрь исходников».
0
AlexSelivanoff #
Вот тут возникает моленький вопрос. А зачем?
0
Chii #
Вот тут возникает маленький ответ: а вам жалко что ли?
Лучше иметь возможность и не пользоваться ею, чем не иметь возможности изначально.
+1
AlexSelivanoff #
Да не жалко. Просто интересно, много ли людей реально пользуются в работе возможностью переписать софт, в котором работают.

Про Autodesk Maya я такое слышал про Вету и ILM. Ещё вроде Vanguard в свое время Майю под себя переписывали
0
Chii #
Все нормальные люди (и ненормальные тоже, просто они об этом не догадываются) в работе пользуются тем, что другие люди, которым хочется переписать и дописать софт, могут это сделать и делают.
Но практика показывает, что в рабочем процессе редко кто переписывает свободные инструменты, хотя встречаются и такие компании, где это практикуется довольно широко. Гугль, например.
0
AlexSelivanoff #
да шо нам гугль. Меня графика интересует.

Просто одно дело — дописывать скрипты и плагины, это все делают, и совсем другое — копаться в кишках програмы
0
AlexSelivanoff #
Лучше для чего?
–1
Chii #
Лучше для добра и справедливости.
0
AlexSelivanoff #
То, что надо обычно видно только на глаз.
+1
AlexSelivanoff #
да везде питон сейчас. А с кривыми удобнее всего в Sofimage работа, по словам матерых персонажников. Ну и Гудини они тож хвалят.
+2
AlexSelivanoff #
а кстати, как в блендер данные с мокапа запихивать?
–1
Chii #
Честно говоря я блендером пользуюсь только для скульпторинга, всё остальное отдаю делать аниматорам, так что врядл смогу подробно ответить. Но что мешает спросить об этом у сообщества в блендер орг?
+1
AlexSelivanoff #
У сообщества мешает спросить только то, что мне ответ не очень вобщем-то нужен. Хотелось просто покопаться попробовать

А если не секрет, что за студия, в которой блендер используют? И насколько вы его широко применяете? В смысле всё в блендере или только моделинг?
–2
Chii #
Не секрет, к моей основной деятельности блендер никакого отношения не имеет. Во фрилансе только (там весь спектр, но я лично только скульпторингом занимаюсь) или когда надо простую картинку отрендерить (растровое рисование у меня хромает)
+1
AlexSelivanoff #
Понятно, спасибо.
Меня просто иногда, после просмотра очередного блендеровского демо на сигграфе, посещает мысль, что неплохо б блендер в пайплайн воткнуть, но пока он не прижился. Максимум намоделить что-нить простое.
0
Sheynar #
В принципе можно попробовать сначала через костыли туда воткнуть данные мокапа, потом прописать плагин… В случае с персонажной анимацией — каждой контрольной кости скелета соответствует набор из нескольких точек, определяющий движение кости, остальные кости будут двигаться уже по IK. В случае с лицевой анимацией все немного сложнее, надо будет учитывать движение головы, вычитая его из данных каждой контрольной точки, дальше брать контрольные точки рига лица и уже туда присваивать изменение координат с каждой точки мокапа. Вообще тема интересная, жаль только домашний мокап данных(условно бесплатный/недорогой) отличается большим временем обработки данных (совместить видеозаписи, просчитать с них изображение и т.д.), тогда как «покупные» мокап установки стоят недешево (зато просчет данных с камер идет в реальном времени и в файл записываются готовые положения точек + каждая точка имеет свое определенное название).
+2
Sheynar #
Вообще есть, в самом хелпе короткие кусочки о том как создать, как отрезать кусок данных анимации, как выбрать тип заполнения отрезка без данных. Но все это разбросано по хелпу и неудобно в использовании и понимании тем, кому срочно надо выбрать способ редактирования.
+3
tyr #
Мне кажется интереснее подробного туториала по чистке точек было бы описание работы с мокапом с нуля и тонкости работы: про запись, потом уже чистку, привязку к модели, результат. Может чуть менее подробно, но чуть более живо. Всё-таки тема для хабра экзотическая.
+1
Sheynar #
Когда-нибудь будет, в данный момент я работаю над одним проектом, общие положения которого, в том числе и подобное оборудование, закрыты коммерческой тайной.
Хотя уроки по мошнбилдеру есть, и все этапы достаточно подробно разобраны. А вот с самим этим этапом обычно люди сталкиваются по факту, когда либо получают данные, либо когда пытаются записать мокап данные сами.
0
nicknarian #
Чистил в свое время анимацию в программе от Vicon (запамятовал название, Blade вроде), так она мне как-то больше понравилась, нежели Motionbuilder. Там и интерфейс приятнее будет, менее загружен, да и наглядный псевдоскелет генерирует хорошо при именовании маркеров.
0
Sheynar #
Это первичная обработка в софте, связанном напрямую с мокап системой, я сам использую внутренние возможности той системы, с которой работаю, но когда получаешь данные и нет возможности воспользоваться лицензией и ПО такого плана, можно сделать как в статье ;)
+1
AlexSelivanoff #
Ура! Спасибо за статью! Наконец-то на хабре стали затрагивать темы, имеющие отношение к реальному постпродакшену.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.