3DTracking - небольшие заметки
Здравствуйте!!!
В этом уроке речь пойдёт о 3D Tracking. Сегодня трудно назвать фильм, где бы не применялась данная технология. В уроке будут рассмотрены несколько проектов и несколько способов получения данных.
Для урока использовалась программа Boujou 4.1.
При съёмке материала желательно не забыть измерить расстояние между несколькими парами маркеров или хотя бы между двумя маркерами. Это поможет в дальнейшем и облегчит совмещение видео с 3D объектами. Хорошо если меркеры будут размещены в разных плоскостях. Ещё нелишним будет снять сетку для определения Distortion (искажения), причём сетку необходимо снимать с тем же фокусным расстоянием, с которым снимался материал для трэкинга. Но если съёмка проводилась без маркеров, без замеров, без контрольной сетки, а данные камеры неизвестны, это не значит что такой материал нельзя использовать и при таких условиях можно получить точные данные трэкинга.
Пример сетки, снятой для использования в уроке.
Что бы узнать значение Distortion, импортируем снятую сетку в программу. Далее переходим в Setup, затем переходим к строке Asses Lens Distortion (manual).
В открывшемся окне создаём калибровочную линию Add Calibration Line. Можно изменить значение Step с 0,1 до 0,01 в первом случае будут добавляться десятые доли, а во втором - сотые, это позволит более точно выставить значение в строке R
Изменяя значение R нужно добиться совпадения калибровочной линии с линией на снятой сетке. При таком искажении значение R получилось 0,19.
Сейчас рассмотрим проект. Перед началом необходимо внести изменения в настройках программы. Данные трэкинга будут использоваться в програмее 3D Max, исходя из этого внесём необходимые изменения. Заходим в Edit далее Preferences, в появившемся окне выбираем 3D Display, затем нажимаем на параметр Preferred Camera Orientation и устанавливаем значение Z-up, Y-forward. Если этого не сделать, то в 3D Max все объекты будут неправильно сориентированы и придётся всю сцену корректировать.
Импортируем материал, для этого в левой части программы (Toolbox) нажимаем на соответствующую кнопку и в появившемся окне необходимо выбрать тип камеры Free Move, потому что камера была не статичной и перемещалась, далее в окне Interlace укажем Not Interlaced, т.к. используемый материал без полей. Желательно видео просчитать в последовательность кадров, а не использовать AVI файл.
Весь путь к материалу не должен содержать кириллицу, иначе программа не сможет открыть файл. Если установлен русский Windows, в этом случае и на «Рабочий стол» нельзя сохранять, потому как путь будет таким «C:/Documents and Settings/All Users/Рабочий стол/».
Если известны параметры камеры, на которую был снят материал, необходимо указать программе эти данные. Для этого переходим в Toolbox и нажимаем на кнопку , откроется окно с настройками, вносим необходимые изменения. Меняем значение Film back (размер матрицы) в данном случае - 21,5 мм на 16,1 мм, в том же окне Cameras переходим в Advanced параметры и устанавливаем значение Radial distortion на 0,19,полученное при помощи сетки. Далее укажем фокусное расстояние, для этого возвращаемся в Toolbox и нажимаем на кнопку Focal Constraint, в открывшемся окне указываем нужное значение, в данном случае 22 мм
Следующим действием будет создание маски. Учитывая что актёр, находящийся в кадре двигается, нам необходимо исключить его из процесса трэкинга, иначе результат может быть не таким, как нужно. Вот что получилось при трэкинге без маски. В начальных кадрах всё хорошо, но при первом движении актёра, точки «уплыли». И здесь же добавлю, визуально в окне программы смещаются точки (Predictions), но если перейти в режим 3D sпроекции, можно увидеть что смещаются не точки, а именно виртуальная камера, движение которой получено в результате трэкинга.
И так для создания маски переходим в левую часть программы (Toolbox) и нажимаем на кнопку делее, левой кнопкой мыши обводим актёра. Затем анимируем маску, переходя по таймлайн, из кадра в кадр перемещаем маску так, что бы она закрывала актёра от первого кадра, до последнего.
Маску можно анимировать не только перемещая вершины, но и в тех участках видео, где это возможно, передвигать её целиком
1. Перемещение вершин,
2. Перемещение всей маски,
3. Вращение маски,
4. Изменение размера.
В том случае, когда актёр снят на зелёном/синем экране, можно упростить создание маски. Достаточно сделать чёрно-белую маску из основного материала. В данном случае использовалась программа After Effects, с помощью кеинга убираем зелёный фон, далее создаём новый слой белого цвета White Solid (при чёрном Background Color) и в параметрах Track Matte устанавливаем Alpha Inverted Matte. Полученный результат просчитываем в последовательность кадров.
В программе Boujou заходим в 2D Tasks, затем нажимаем на Import Image Based Mask, в открывшемся окне указываем путь к созданной маске и в разделе Mask Type устанавливаем include white, тем самым именно белый цвет будет включён в процесс трэкинга, при этом актёр будет закрыт маской.
Что бы начать трэкинг, преходим в Toolbox и нажимаем на кнопку Track Features, в появившемся окне нажимаем на Advanced и в контрольном окне видим что актёр исключён из процесса трэкинга, остаётся нажать Start и ждать завершения.
И в конце преобразуем полученные данные из 2D в 3D, для этого необходимо нажать на кнопку Camera Solve и в появившемся окне установим галочку на Optimize camera path smoothness, для сглаживания пути камеры, затем нажимаем кнопку Start.
Посмотрим на результат, на первый взгляд всё выглядит неплохо, но при внимательном рассмотрении видно, что в кадре 33 точки сместились относительно маркеров, причём отклонение довольно большое. При таком результате в 3D пакете, объекты будут смещаться, поэтому необходимо исправить ошибку.
Попробуем добавить в сцену Target Track, для этого в Toolbox выбираем Add Target Track и в первом кадре устанавливаем на маркер. Положение Target Track можно контролировать в Zoom Tool, что находится в правой части программы. Затем необходимо создать несколько ключевых кадров,для этого преходим по таймлайн и устанавливаем созданный Target Track на тот же маркер, но в разных кадрах. Чем больше ключевых кадров, тем лучше будет результат трэкинга. После этого необходимо нажать правой кнопкой мыши на Target Track, появится строка Toggle edit mode, нажимаем на неё и перейдя в режим управления трэком, опять нажимаем правой кнопкой мыши на Target Track и выбираем строку Track, после этого начнётся процесс трэкинга. Таким образом добавим в сцену несколько Target Track. Сейчас опять вернёмся к Camera Solve, что бы получить новые данные трэкинга. В Boujou есть функция Adjust Solve, ею так же можно пользоваться для исправления ошибок, именно при добавлении Target Track или Locator, но в данном случае неточность в трэкинге довольно большая и Adjust Solve скорее всего не исправит ошибку, поэтому была выбрана функция Camera Solve и 3D камера будет создана заново, с учётом изменнеий.
Посмотрим на результат после добавления Target Track.И в этом случае смещение есть,но уже не такое большое.В просмотровом окне программы несоответствие может быть незаметным,но при совмещении с 3D объектами ошибка будет очевидна.Необходимо продолжить исправление ошибки.
Перейдём в Graph Mode,здесь можно увидеть график перемещения и вращения камеры.Что бы активировать окно Graph Mode нажимаем на соответствующую кнопку в Active View Controls Toolbar(над просмотровым окном).
Оставим активным график перемещения камеры,для этого снимем галочку с ненужных параметров,оставив её только для Translation.Рассмотрим график,для увеличения окна можно воспользоваться комбинацией Shift+правая кнопка мыши,так будут лучше видны погрешности.В данном случае никаких искажений в перемещении камеры нет,значит траектория движения виртуальной камеры соответствует траектории реальной камеры,но трэки всё же смещаются.
Активируем график вращения камеры,переставив галочку на Rotation.Здесь видны искажения,именно в кадре 33 самое большое отклонение.Добавление Target Track не исправит ошибку,они отслеживают движение маркеров при трэкинге,но после Camera Solve смещаются относительно маркеров,в то же время продолжая движение по траектории маркеров.Значит программа не точно определила положение маркеров в пространстве.Улучшить результат можно с помощью локаторов (Locator), название этого инструмента говорит само за себя.
Исходя из графика, в сцену необходимо добавить локаторы (Locator). Для этого в Toolbox выбираем кнопку и устанавливаем локатор на маркер. Так же как и Target Track, положение локатора можно контролировать в окне Zoom Tool. Перемещаясь по таймлайн необоходимо создать несколько ключевых кадров,минимум два,при этом локаторы можно устанавливать не только на маркерах, но и на любых предметах,попадающих в камеру. Функция Locator отличается от функции Target Track. Локатор не обладает возможностью отслеживать движение маркера, но с его помощью программа лучше определяет положение маркеров и объектов в сцене,что значительно повышает точность результата. Локатор влияет на трэкинг только в тех кадрах, где он был установлен, там же создаются ключи. Поэтому сам локатор желательно устанавливать в тех участках, где есть резкое изменение траектории движения камеры при съёмке. После установки локатора, необходимо нажать на него правой кнопкой мыши и далее на строку Toggle edit mode. Чем больше локторов, тем точнее будет результат, но длительность просчёта увеличивается в разы.
После установки всех локаторов, опять переходим в Camera Solve, как только завершиться процесс можно увидеть, что в этом случае в кадре 33 точки не смещены относительно маркеров, более того большенство точек окрасились в жёлтый цвет, это говорит о точности трэкинга. Таким образом была исправлена ошибка трэкинга, теперь никаких смещений нет и совмещение с 3D объектами будет точным. Если сравнить график до и после добавления локаторов, видно как меняются линии вращения камеры, в первом случае есть резкие изменения формы линий, во вотором случае линии сглаженные и не содержат резких искажений.
Для того,что бы увидеть результат,можно установить контрольный объект.В Boujou есть несколько тестовых объектов,по умолчанию это «Божья коровка»,для добавления объекта в Toolbox нажимаем Add Test Object. Из списка Type выбераем объект Arrow, почему именно Arrow? Этот объект можно точно разместить на маркере, так будут лучше видны малейшие ошибки трэкинга. При воспроизведении видно, что тестовый объект не смещается и в кадре 33, где было смещение трэков, объект так же находится на маркере. Всего лишь несколько локаторов помогли исправить неточность в трэкинге.
Таким способом можно получить безупречный результат, несмотря на размытие изображения в некоторых участках. Но в проекте были использованы данные о камере. А что если данных о камере и о фокусном расстоянии нет, к тому же сетка не была снята и определить Distortion невозможно ? В этом случае дейсвтвия могут отличаться, а использование автротрэкинга с добавлением локаторов может быть недостаточным, для получения хорошего результата.
Создадим новый проект. Импортируем этот же материал в программу. Допустим что данных о камере и о фокусном расстоянии нет. В этом случае всё оставляем без изменений. Если фокусное расстояние неизвестно и не менялось, в окне Type устанавливаем Constant unknown, в том случае когда фокусное расстояние менялось, в том же окне Type устанавливаем Variable unknown.
Следующим дейстиием будет создание маски. Добавляем маску, так же как и в предыдущем случае.
Далее, как и в первом проекте, воспользуемся автотрэкингом,для этого нажимаем на кнопку Track Features,затем в открывшемся окне нажимаем Start, после окончания трэкинга нажимаем на кнопку Camera Solve и опять Start,тем самым преобразуем данные из 2D в 3D.
По окончании процесса рассмотрим результат. Если на таймлайн открыть строку Solves, можно увидеть пропуски в зелёной линии, это говорит о том, что в данном участке трэкинг отсутсвует, а перейдя в Graph Mode видно, что и в нескольких непропущенных кадрах (с 28 по 35) трэкинг неудался, об этом говорят резкие изменеия формы линий. В этих кадрах точки будут смещаться с маркеров. Результат трэкинга намного хуже, относительно предыдущего проекта, при этом действия отличались лишь тем, что в первом проекте были внесены данные о камере. Значит в этом случае с помощью автотрэкинга хорошего результата не будет. Исправлять ошибки в данном проекте не будем,этот пример был приведён лишь для того, что бы показать как влияют на результат данные о камере. Проект можно закрыть и начать заново.
В новом проекте воспользуемся возможностью программы, вручную отследить движение маркеров. Что бы добавить Target Tracks нажимаем на кнопку .Но для этого необходимо минимум 7 трэков одновременно видимых по всей длине. В данном материале нет нужного количества маркеров, которые видны по всей длине, поэтому некоторые трэки будут установлены не с первого кадра. Для более точной установки Target Tracks можно увеличить просмотровое окно, воспользовавшись комбинацией Shift+правая кнопка мыши или контролировать положение трэка в окне справа Zoom Tool.
Устанавливаем трэк на маркер в первом кадре, далее переходим по таймлайн и корректируем положение трэка относительно движения маркера, создавая ключевые кадры. Минимальное количество ключевых кадров, для трэкинга-2. Но для лучшего результата их должно быть больше, особенно в тех участках, где есть размытие из-за резких движений камеры. После установки ключевых кадров, нажимаем правой кнопкой мыши на трэк (Target Track), появится строка Toggle edit mode, нажимаем на неё и переходим в режим управления трэком.
Что бы начать трэкинг опять нажимаем правой кнопкой на Target Track и выбираем строку Track, нажимаем на неё и ждём окончания процесса. Для лучшего результата можно изменить контрастность между маркером и фоном, для этого в окне справа Zoom Tool меняем значения Brightness и Contrast, после этого маркер будет более чётко виден и программа точнее отследит его перемещение. Если, в процессе трэкинга, Target Track сместился относительно маркера, можно остановить трэкинг, нажав кнопку Cancel, что находится под просмотровым окном.В проблемных кадрах необходимо создать дополнительные ключи и возобновить трэкинг.
После окончания трэкинга можно проверить его качество, для этого на таймлайн откроем строку Target Tracks, если есть красные участки их нужно исправить, потому что в этих участках трэкинг прошёл неудачно. Нет необходимости повторять действия для всей длины. Достаточно очистить нужный промежуток. Необходимо правой кнопкой нажать на ключ, далее выбрать Clear Range Tracking, что бы очистился нужный участок, нужно выбрать из двух ключей именно первый. Далее можно добавить один или 2 ключа и опять с помощью правой кнопки выбрать строку Track Range, так трэкинг пройдёт только в выбраном участке. Если красных линий нет, можно идти дальше. Желательно добавить несколько локаторов (Locator) так же, как и в первом проекте.
Учитывая, что не все трэки активны от первого до последнего кадра, на этом этапе рано воспользоваться Camera Solve, если это сделать, в таком случае трэкинг будет активным только с того кадра, в котором активны все 7 трэков (в данном случае это кадр 68) а до этого кадра в просмотровом окне мы не увидим ни условной поверхности (Ground Plane), ни тестовго объекта, а если перейти в режим 3D проекции, то и виртуальная камера появится только в кадре 68.
Переходим в Toolbox и нажимаем на кнопку Track Features, это нужно для того, что бы заполнить пустоту с первого кадра по кадр 68. Далее можно перейти к Camera Solve. После завершения всего процесса посмотрим на результат. И снова трэкинг не идеален. В первом кадре трэки смещены относительно маркеров, но далее до самого конца никаких смещений нет и результат трэкинга безошибочный.
Перейдём в 3D проекцию,для этого нажимаем на иконку 3D здесь можно увидеть путь виртуальной камеры.Отклонение в движении,с первого по второй кадры,довольно сильное,при том,что в сцену были добавлены Target Track и Locator.Что бы исправить неточность трэкинга,нужно изменить значение Distortion.
Если сетка всё же была снята и значение Distortion известно, в этом случае проделываем уже знакомые действия. Переходим в Setup, далее Asses Lens Distortion (manual). И в окне Asses Lens Distortion вносим полученное значение 0,19
В конце, что бы всё встало на свои места, с учётом изменеия Distortion, необходимо опять обратиться к Solve. На этот раз воспользуемся Adjust Solve, эта функция не создаёт камеру, в отличии от Solve Camera, а вносит изменения к уже созданной камеры. Переходим в 3D Tasks, далее Adjust Solve и в появившемся окне устанавливаем галочки на Optimize radial distortion parameters и Optimize camera path smoothness, после этого нажимаем Start. Так будут внесены изменеия в сцену, с учётом новых параметров.