Всем добрый день! Я давно читаю Хабр, и все это время мне кажется, что тема 3D и анимации очень редко радует статьями работников этой сферы.
Я часто думал о том, чтобы написать что-то подобное, и вот идея оформилась.
Расскажу, как происходит первичный этап работы с данными Mocap. Кому это интересно, милости просим под кат, будьте внимательны, картинок много (кликабельно).
Итак, вы сотрудник компании, занимающейся 3D и анимацией.
По запросу компании сняли анимацию персонажей для вашего проекта и отправили вам данные (Или у компании есть своя Mock-up студия, что скорее всего ближе к той работе, которую подразумевает мой пост).
У вас есть набор файлов анимации, скорее всего это будут файлы с расширением C3d, одного из самых распространенных стандартов.
Этот стандарт подразумевает наличие в пространстве контрольных точек, прикрепленных к телу человека во время съемок.
Эти точки крепятся таким образом, чтобы организовать на теле неподвижные системы для дальнейшей привязки к костям персонажа (точнее, кости будут прикреплены к точкам, а недвижимость системы является «условной», поскольку человеческое тело очень гибкое и точки располагаются на мышечной ткани).
Соответственно, в таких системах будут некоторые смещения, которые программное обеспечение усредняет, получая то, что нужно.
В своей работе я использую пакет Motionbuilder от Autodesk. Импорт данных о движении.
Изображение 1
Motionbuilder спросит вас, что именно импортировать из этого файла.
Изображение 2
Нажмите «Импортировать» и посмотрите на экран:
Изображение 3
В окне просмотра появится набор точек, выделенных синим цветом — это координаты точек-маркеров.
Если поискать в Интернете, то можно найти множество уроков о том, как именно прикреплять маркеры к персонажу; если говорить просто и быстро, то создается «кукла» - Actor, которая содержит все необходимое для назначения ей движений, взятых с позиций маркеров, а затем с помощью Actor'а и движения перенаправляются на персонажа.
Но нас это не интересует. Все полученные данные необходимо проверять: оборудование не идеальное, человеческий фактор и т.д., а еще от договоренности зависит, в каком виде вы получите данные.
В моем случае винить некого, потому что.
В мои обязанности входит и фотосъемка.
Это немного сбивает с толку, поэтому вот простая цепочка работы этой схемы: Съемка мокапа -> Обработка данных (Очистка) -> Обработка уже нанесенных на персонажа данных и подстройка под его характеристики.
Это упрощенная схема.
Нас интересует второй пункт – Очистка.
И так, смотрю открытые данные и сразу вижу несколько косяков:
Изображение 4
Изображение 5
Среди облака светлых точек в некоторых участках анимации точки становятся темнее.
Это значит, что по каким-то причинам нет данных о положении маркера в данный момент времени.
В принципе, такое случается часто, например, если маркер, прикрепленный сбоку ремня, закрыт рукой (Изображение 5).
Изображение 6
Если выбрать эту точку, то в соответствующем окне мы увидим графики изменения координат этой точки по 3-м осям; в местах, где точка становится серой, график будет отображаться, но цвет поля будет отсутствовать, что означает отсутствие физических данных.
В этом случае график восстанавливается одним из программных алгоритмов, но в момент потери данных Актер не получает сигнала о положении в этой точке.
Если бы Actor был установлен сейчас, отсутствие этой точки в принципе могло бы привести к неконтролируемому скручиванию области таза (в одной из моих анимаций тело персонажа было перевернуто на 180 градусов, выглядит весело, но это ошибка).
Кроме того, при просмотре анимации в видео я обнаружил, что несколько точек «дергаются», это связано с тем, что система оптическая, и алгоритм обработки изображения может менять динамически используемые камеры для данной точки, что вызывает смещение.
К сожалению, на видео это показать не получается, но на графиках анимации такие моменты очень хорошо видны:
Изображение 7
В этом случае можно увидеть, как идет вниз так называемый «Пик».
Соответственно, вот две основные причины наличия пункта «Очистка» во время работы.
Что мы собираемся делать сейчас? Существует несколько способов проведения уборки, но мы не будем на них останавливаться.
Скажу только, что в мокап-программах обычно можно сразу после съемки проверить все графики движения точек и, если есть ошибки, восстановить их вручную по движению тела.
На мой взгляд, в Motionbuilder эта работа организована успешнее, удобнее и быстрее.
Бывают случаи, когда возможности Motionbuilder, наоборот, менее подходят, чем прямая ручная очистка каждого кадра вручную через программу Mocap. Итак, нам нужно почистить этот блок анимации.
В Motionbuilder есть очень полезная функция — на основе групп точек-маркеров можно создавать «Rigidbodies» — твердые тела.
Например, маркеры, отвечающие за положение и наклон головы, крепятся жестко, чаще всего это шапочка или повязка.
В этом случае маркеры перемещаются одной группой.
Соответственно, это один из примеров группы RigidBody, которую можно создать:
Изображение 8
Внизу во вкладке Rigidbodies нажмите кнопку Добавить и увидите следующую картинку:
Изображение 9
Между выбранными точками образуется геометрическая фигура со связями.
Далее по аналогии нужно разделить на группы группы точек, которые не перемещаются относительно друг друга, например, спина, таз, верхняя часть рук, нижняя часть рук.
Главное – не связывать группы между собой.
Изображение 10
Вот как это выглядит у меня с таким расположением точек маркера.
Для удобства следует переименовывать группы в соответствии с положением.
Почему это необходимо? Эти группы позволят нам редактировать положение точек внутри группы.
Например, группа Таз, одна из точек отсутствует, таз движется только целиком, соответственно точка без координат должна двигаться вместе с остальными, а Твердое тело будет «тянуть» свое положение за остальными точками, на основе изменения их положения и положения «Твёрдого Тела».
Кроме того, это позволит выровнять положение точек подергивания:
Изображение 11
Изображение 12
Как видно из этих двух графиков, точка дергается сразу по двум осям.
ВАЖНЫЙ! В этот период времени остальные точки группы не дергаются, они движутся в соответствии с общим движением тела.
Чтобы нивелировать этот момент, воспользуемся возможностью восстановить положение точки в зависимости от положения общей группы и удалим этот отрезок:
Изображение 13
Изображение 14
Изображение 15
Из изображения видно, что Motionbuilder заполнил пробел графиком, причем график не прямой, а повторяет изменения положения остальных точек.
Кроме того, на экране появилось красное перекрестие, к нему я вернусь, но чуть позже.
Дальше с другими косяками такого рода (неправильным смещением точек) по аналогии:
Изображение 16
Изображение 17
Изображение 18
Что это за красное перекрестие?
Изображение 19
Как видно из изображения, перекрестие появляется в момент разрыва графика, когда теоретическое положение точки (восстановлено), но нет фактического.
В центре перекрестия кружком указано теоретическое положение точки (теперь оно подсвечено, чтобы было видно график, если не подсвечено, то точка отображается темным цветом, как будто у нее нет координат), Красное перекрестие коротких осей указывает на прежнее фактическое расположение точки, при этом разница видна беременна.
Когда вы уверены, что работа по исправлению косяков (зачистке) окончена, выделите нужные нам точки и нажмите кнопку Regenerate Marker Animation внизу, таким образом все данные, полученные через Rigid Body, будут «запечены» в маркеры.
Точки можно выбирать и запекать по частям или все сразу, в зависимости от конкретной ситуации.
При запекании координат положения точек из групп в кадрах разрыва появится следующая картина:
Изображение 20
Снова показано старое и новое положение точек, но теперь точка, связанная с группой, уже имеет фактическое положение и может использоваться в анимации Актера.
Далее можно выделить точки и применить к ним дополнительные автоматические фильтры, но нельзя забывать, что они работают по определённым алгоритмам и чем больше фильтров, тем более компьютерной выглядит анимация, снятая с человека, потому что особенности неравномерности человеческого тела движения теряются.
Надеюсь, эта статья будет кому-то полезна.
P.s. В интернете есть упоминания об этом способе редактирования и очистки, но я попутно постарался описать процесс с некоторыми теоретическими закладками, чтобы было понятно, что и зачем делается, если будут вопросы, попробую отвечать.
UPD: Пример использования системы оптических маркеров:
Съёмка движений слона.
К объекту съемки крепятся светоотражающие сферы – маркеры.
В момент захвата движения объект с маркерами должен находиться в поле зрения нескольких камер.
Каждая камера снимает в инфракрасном спектре.
Каждая камера имеет кольцо вокруг объектива с инфракрасными светодиодами.
Таким образом, для каждой камеры подсвечиваются маркерные точки на ее стороне.
Теги: #Работа с 3D-графикой #3d-графика и анимация #Motionbuilder
-
Экономика Внимания Почти Мертва
19 Dec, 24 -
Опасная Сделка
19 Dec, 24 -
Телепрограмма На Mail.ru Стала Мобильной
19 Dec, 24 -
Политический Плакат От Программистов
19 Dec, 24 -
Стартап Imhofeed Задает Вопросы
19 Dec, 24 -
Есть Ли Жизнь Без Решарпера?
19 Dec, 24 -
Самая Большая Ошибка В A/B-Тестировании
19 Dec, 24