Motion Capture – своими руками
Motion Capture – своими руками
Всем привет, меня зовут Серго, живу я в городе Чебяркуля, катаюсь на байке, работаю в небольшом продакшене.
Хочу рассказать о реализации motion-capture без участия студии и прочего дорогостоящего оборудования. Данный способ получения движений занимает какоето время, но если всё грамотно один раз настроить, чтобы можно было потом быстро использовать в какихнибудь проектах, эта техника найдёт своё применение.
Рассмотрим пример лицевой анимации персонажа, что нам понадобится:
- Камеры, - будет очень неплохо, если у Вас под рукой 2 или более камеры, но в этом примере мы обойдёмся одной, я использовал встроенную веб-камеру в ноутбук;
- Зеркала, 2шт – они и заменят нам недостающие камеры;
- Маркеры - можно использовать кусочки липкой ленты, но они бликует на свете и плохо отлипают от кожи или, же наоборот хорошо прилипают не туда куда надо (проверено автором :), будем использовать синий фломастер (маркер), синий потому, что его будет хорошо видно на коже;
- Свет, - важно осветить актёра равномерно со всех сторон съёмки, будем использовать настольную лампу;
- Актёр - я снимал сам-себя почти без посторонней помощи (;
- И наконец программа, без которой нам не обойтись - PFTrack
И так начнём!
Организовываем съёмочную площадку - установим камеру на небольшом расстоянии от лица актёра, далее установим зеркала так, чтобы в видоискателе было хорошо видно лицо актёра и его отражения, примерно вот так:
Вид сверху нашей студии будет выглядеть так:
Небольшое отступление, важно чтобы соблюдалось равенство: Z = A + B = X + Y, где Z - фокусное расстояние нашей одинокой камеры, а A+B и X+Y - фэйковые фокусные расстояния двух других камер соответственно. Но на самом деле равенство выполнятся не будет, Z будет всегда меньше, что приведёт к небольшой погрешности в виде немного углублённой формы лица в бедующем, но это нестрашно (: вот такая вот геометрия.
Далее займёмся гримом нашего актёра, посмотрим в интернете как работают наши коллеги, и возьмем нечто среднее, я сделал 8 точек вокруг рта, по три на щеках, ну и ещё несколько на лбу и на носу, обратим внимание, что при любом движение человеческой мимики точки носа и лба остаются неподвижными относительно друг друга, это нам поможет в дальнейшем.
Мотор!
Произносим заранее подготовленную речь, ну или что-нибудь в духе "Превед, я креведко!", стоп. Смотрим чего у нас там отснялось, если всё нормально, все точки отчетливо видны и не уходят за пределы видоискателя идём дальше.
Загружаем отснятый материал в какой-нибудь композер, я использовал After Effects, режим кадр на три части, и сохраняем каждую в отдельную секвенцию предварительно отцентровав и флипнувпо горизонтали видео из зеркал, можно ещё немного поиграть с шарпеном и цветом. Для удобства назовём их center.avi, left.avi и right.avi
Переходим в PFTrack.
PFTrack - позволяет реализовывать различные задачи по трэкингу и нахождению движения камеры, мы же в данном уроке коснёмся только задач связанных с motion capture.
Создаём новый проект File - New Project, смотрим, что тут есть интересного.
Интерфейс программы интуитивно понятен, я разобрался со всем с первого раза непребегая к help
Жмём кнопку Import Footage, в появившемся окне выбираем наши центральную камеру center.avi, жмём load. Видим, что имя камеры автоматически поменялось на center, далее заходим в свойства нашей камеры - Camera - Camera Parameters или "ctrl+p" на клавиатуре.
Меняем тип камеры на Motion Capture, а также указываем, что фокусное расстояние мо время съёмки неменялось и нам неизвестно.
Жмём close. Обратим внимание, что ранее неактивная кнопка Import Footage, снова стала активной. Добавляем оставшиеся сиквенции left.avi и right.avi.
Теперь нужно синхронизировать все наши сиквенции, на самом деле нам этого делать ненужно, потому что снимали всё одной камерой, просто проверим, что все камеры стоят на начале и нажмём кнопку Sync
можно сильно упростить себе жизнь, если выставить окошки камер так, чтобы можно было всё сразу отслеживать, воспользуемся кнопками меню New Window и Tile Window Layout.
Дальше начинается самое интересное... (: Чтобы получить трёхмерные координаты наших маркеров, сначала нужно получить их двухмерные координаты на каждой камере, для этого воспользуемся трэкингом.
Смотрим на нашу центральную камеру, начнём с неё, потому-что на ней отчётливо видны все маркеры на протяжении всего видео. В PFtracke существует два типа 2d трэкеров: автоматические - Auto Features и пользовательские - User Features, мы воспользуемся вторыми, они позволяют точнее контролировать нужные нам области. И так, нажмём ctrl-F3 или выберем в меню Tracking - New User Features и выберем наш центральный маркер на лбу, раздвинем области трэкера как показано на рисунке, назовём его lob_c
Встаем в самое начало видео, вызываем контекстное меню трэкера (кликнем на нём правой кнопкой мыши) и выбираем пункт Track Forwards, наблюдаем как программа находит траекторию движения нашей метки.
В процессе трэкинга программа может выдавать ошибки, это нестрашно. Они могут быть вызваны несколькими причинами, восновном неправильно настроенной выдержкой из-за плохой освещённости, как это было с моей веб камерой. Решить эту проблему можно покрутив параметры в меню Trackig - Tracking parameters.... либо использовать больше света при съёмках и более лучшую камеру, надеюсь, что у Вас таких проблем невозникнет (:
Далее нужно повторить все эти действия с каждым маркером, т.е. встаём на начало видео, заново нажимаем ctrl-F3 выбираем следующий маркер, двигаем ограничители трэкера, жмём Track Forwards. Советую называть трэкеры так чтобы было понятно чему она соответствует, например я следовал такому принципу: eye_L, eye - в переводе Глаз, _L - слева, всё это пригодится в дальнейшем.
Далее нам нужно сделать трэкинг всех этих же маркеров, но уже в другой камере. Для этого встаём в начало видео, выбираем какой-нибудь созданный нами трэкер в списке слева, и указываем его заново, но в уже в другом окне вида соответственно, также указываем его границы, и жмём Track Forwards. Проделываем эту операцию со всеми маркерами которые видны из этой камеры на всём промежутке времени, маркеры которые невидны, либо видны в начале видео, а потом невидны или наоборот- не трогаем. Потом всё тоже самое с последней камерой.
Итак мы имеем 2д координаты всех трэкеров со всех камер, теперь нам нужно преобразовать их в трёхмерные координаты, сделать это очень просто, основная работа позади (:
Чуть не забыл, для ускорения и точности дальнейшего просчёта необходимо указать неподвижные участки лица, выделяем точки носа и лба о которых было сказано выше, жмём Tracking - Constraints, в появившемся окне сначала нажимаем New потом выделяем наши точки справа, потом кнопку "<<" и Close
Выбираем вновь камеру Center в списке слева и жмём в меню Camera - Solve Camera... или ctrl-F7, немного ждём наблюдая за непонятным процессом.
Всё! Мы получили координаты всех наших маркеров и камер в 3д, что с ними делать уже плод вашего воображения, задачу можно считать решенной!
А всё-даки, что делать дальше? Дальше экспортим всё это добро в ваш любимый пакет 3д графики, в моём случае 3dsmax9, ищем слева пункт Camera Exports..., правой на нём! - New, сохраняем в формате 3DS max script (*.ms). запускаем макс, в меню жмём MAXScript - Run Script... и.. дабл-клик по ранее сохраненному .ms
Встаем из-за стола, кланяемся говоря "О спасибо! великий пээфтрэк!", садимся, закрываем его, больше он нам не понадобится
Далее я не буду вдаваться в подробности макса, просто расскажу мой принцип привязки точек к модели головы
Начнём с подгонке нашей конструкции точек под модель головы, я делал это так: немного увеличил размер всей конструкции, немного повернул её и придвинул к лицу модели так, чтобы точки почти лежали на поверхности. Тут могут возникнуть несколько сложностей, идеально было бы начать с кадра в котором лицо актёра симметрично и не выражает никаких эмоций и подгонять всё под него, но если по каким-то причинам такой кадр отсутствует его нужно будет создать, можно условно назвать его Reset Pose. Чем аккуратней будет проделана эта часть, тем лучше будет смотреться конечная анимация.
Теперь создадим риг для лица, в нашем случае он будет состоять из:
- Группы костей состоящих из пары позвонков и большой кости которая будет служить головой, делаем для неё IK контролер по всей длине и привязываем его к точке лба;
- Группы костей для губ, в которой будет 8 IK контроллеров, аттачим их к нашим точкам губ соответственно;
- Кость для подбородка, также делаем ей IK контроллер и аттачим его к точке подбородка.
Я использовал сцену примера, из поставки макса, и немного изменил её.
Теперь кидаем на нашу модель модификатор skin, добавляем в него наши кости и точки щёк, правим развесовку, нажимаем плэй и наслаждаемся проделанной работой (:
ссылка на ролик подлинее