Найти тему
Про VFx

Про трекинг. Часть 3. Практическая азбука трекинга

Оглавление
Последнее время я нередко общаюсь с молодыми людьми, пришедшими в профессию и не могу не отметить, что уровень их фундаментальной подготовки не так высок, как хотелось бы, например, мне (как супервайзеру или ментору) видеть. Поэтому я решил написать эту статью (наверное, подобные «азбуки» будут и по другим затрагиваемых темам). Материал должен быть полезен как начинающим, так и уже знакомым с трекингом специалистам, желающим заполнить какие-то пробелы, а также другим людям из профессии, желающим понять, что и как происходит, чтобы затем правильно снимать и/или общаться с пост-продакшеном на одном языке.

Стоит оговориться, что эта статья касается трекинга объектов в отснятом видеоматериале. Существует много других технологий трекинга, вроде Motion capture (захват движения актеров с использованием специального оборудования), Performance capture (продвинутый захват мимики с помощью спец. оборудования) и другие вариации захвата/трекинга движения непосредственно во время съемочного процесса. О них мы, возможно, поговорим в другой раз, а здесь пройдемся по «классике», когда у нас есть отснятый материал, какая-никакая информация о камере, которая его снимала (если повезет) и (будем надеяться) несколько контрольных точек для трекинга, попавших в кадр.

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

Другими словами, давайте еще раз копнем основы, но поглубже! :)

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

Уточнение терминологии

В первой статье про трекинг я дал немного размытые определения трекингу и матч-мувингу, что отчасти связано с тем, что в русском языке обычно всё это называется просто «трекингом» (произносить проще, короче, и всем понятно о чем речь), но в зарубежном продакшене эти термины различаются и это отличие важно понимать.

Трекинг (tracking) — это непосредственно процесс получения информации о движении объекта.

Матч-мувинг (match-moving) — это процесс сопоставления одного движения с каким-либо другим.

Например, если вы следите глазами за движением кота по квартире — это трекинг, а если вы взяли смартфон и снимаете кота на видео, стараясь удерживать кота в центре кадра, то это уже матч-мувинг. Причем, кота вы тречите (он — источник движения), а камеру — матч-мувите (ее движение ставится в зависимость от движения источника).

«Ну как, тречишь?» — «Ой, во всю матч-мувлю!»
«Ну как, тречишь?» — «Ой, во всю матч-мувлю!»

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

По моим наблюдениям в российских технических заданиях термин «матч-мувинг» чаще встречается применительно к задачам сопоставления движения отснятых объектов, людей или животных с их CG-дублерами, хотя, как уже понятно из определения, изначально термин существенно шире.

Точка и область

Точка — основа любого трекинга

С момента появления трекинга и матч-мувинга (а, строго говоря, с момента появления фотограмметрии в середине XIX века) в основе всегда лежала точка (на плоскости и в пространстве).

Результатом любого трекинга будет определение координат одной или множества точек в каждом кадре исходного видео (или набора изображений). Независимо от того, какой именно трекинг мы используем — точки, области, плоскости или поверхности, — результатом всегда будут координаты точек в пространстве.

Например, точка, движущаяся в пространстве, может представлять движение любого объекта. А точнее — его некого условного центра, который в разных программах и при разных условиях может называется «якорем» или «опорной точкой» (anchor point), «центром тяжести» (centroid), «основанием» (origin) и т. п., — другими словами, некого центра его (локальных) координат.

Движение сложного объекта задается через изменение координат одной-единственной точки, обозначенной на иллюстрации желтой сферой в геометрическом центре объекта.
Движение сложного объекта задается через изменение координат одной-единственной точки, обозначенной на иллюстрации желтой сферой в геометрическом центре объекта.

Одна точка может определить положение объекта в пространстве, а две — его угол поворота (угол между прямой, проведенной через эти точки, и осями координат) и относительный размер (масштаб — изменение длины отрезка — расстояния — между точками).

Вторая точка позволяет задать масштаб и угол поворота объекта.
Вторая точка позволяет задать масштаб и угол поворота объекта.

Таким образом, информации о положении всего двух точек в пространстве достаточно, чтобы однозначно определить положение объекта в пространстве — его местоположение (location), угол поворота (rotation) и относительный размер (scale). В англоязычных источниках и программах для описания комбинации этих параметров используется слово transform, так что по-русски часто употребляют прямой перевод — трансформация (объекта).

Область — способ трекинга точки

А как оттречить точку? По определению это бесконечно малая величина и ухватиться за нее в общем-то нереально. Поэтому для отслеживания движения используется область изображения.

Внутренний прямоугольник — это паттерн (pattern / feature area), а внешний — область поиска (search area). Сама же точка внутри паттерна — это точка привязки (attach point / position / tracked center). Стандартный способ трекинга происходит по следующему алгоритму:

  1. Пользователь явно указывает точку привязки, паттерн и область поиска в одном из кадров последовательности (видеоролика) — этот кадр считается ключевым.
  2. Программа переходит к соседнему кадру и внутри области поиска ищет участок изображения, максимально похожий на паттерн из ключевого кадра.
  3. Когда совпадение найдено, расстояние, на которое был сдвинут паттерн записывается в новые координаты точки привязки в этом кадре.
  4. Область поиска также смещается вслед за паттерном и алгоритм повторяется для всех последующих кадров друг за другом.
Схематичная визуализация процесса трекинга. 
Здесь для сравнения паттерна с участком кадра используется режим смешивания Difference — он иллюстрирует отличие пикселов верхнего и нижнего слоя: чем они светлее, тем больше отличие.
Схематичная визуализация процесса трекинга. Здесь для сравнения паттерна с участком кадра используется режим смешивания Difference — он иллюстрирует отличие пикселов верхнего и нижнего слоя: чем они светлее, тем больше отличие.
Стоит отдельно заметить, что траектория смещения паттерна записывается именно в координаты одной-единственной точки — точки привязки. Сам паттерн, как описано ниже, может искажаться в процессе трекинга, но вся его задача — определить направление и расстояние смещения участка изображения от кадра к кадру, и записать это смещение в новые координаты точки привязки.

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

  • Location — это самая простая и быстрая модель, которая проиллюстрирована на примере выше: паттерн просто смещается по x и y-координатам кадра и ищется лучшее совпадение;
  • Location, Rotation, Scale — более сложная модель поиска, подразумевающая, что для поиска лучшего соответствия паттерн может также быть повернут или масштабирован;
  • Perspective и Affine — в этих моделях паттерн кроме смещения, масштабирования или поворота может еще искажаться по правилам трехмерной перспективы (perspective), или аффинной модели (affine).
Модели анализа движения в Blender
Модели анализа движения в Blender

Я привожу здесь эти примеры не для детального изучения (это мы как-нибудь позже рассмотрим на примере из жизни), а для пояснения того, насколько хорошо современные программы могут отслеживать движение объекта в кадре и как они это делают. Потому что понимая, как происходит этот процесс, вы будете понимать, как помочь алгоритмам выполнить свою работу.

Из приведенного примера становится ясно, что, например, небольшие контрастные элементы в кадре приносят радость и счастье человеку и алгоритму, принявшемся за трекинг, а вот различные шумы на видеозаписи — это враги, способные помешать алгоритму увидеть соответствие деталей.

Разные программы также могут оптимизировать те или иные этапы трекинга, или вообще на основе их строить более сложные системы распознавания движения. Например, трекер камеры в After Effects или PF Track (и многих других программах, включая тот же Blender) может автоматически расставить точки привязки, паттерны и области поиска на изображении, определив контрастные элементы в кадре (и выполнив их трекинг). Mocha и Fusion могут использовать эти точки внутри определенных пользователем участков изображения, интерпретируя их как движение единой плоскости в пространстве, что также помогает алгоритмам как при трекинге, так и при восстановлении движения (Track Solving), поскольку движение всех точек на одной плоскости происходит по связанным между собой траекториям.

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

Результат трекинга: траектории (красно-синие линии) сразу нескольких точек привязки (с собственными паттернами и областями поиска).
Результат трекинга: траектории (красно-синие линии) сразу нескольких точек привязки (с собственными паттернами и областями поиска).

Решение трека или расчет движения

Ну вот мы оттречили одну, две или сто точек в видео — а что с ними делать дальше? Пока что у нас просто есть набор траекторий на плоскости, и, если нас интересует простейший эффект, вроде этого, то, можно сказать, мы близки к успеху как никогда.

Позиционирование элементов по одной точке в двумерном пространстве
Позиционирование элементов по одной точке в двумерном пространстве

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

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

Только все равно один трекер — это слишком мало информации. Как мы уже увидели, даже две точки дают гораздо более точные данные, включая не только перемещение, но и вращение-масштабирование объекта.

Что мы рассчитываем

Непосредственный трекинг элементов изображения — это только половина задачи. Она в большей степени зависит от пользователя, чем остальные операции, но, тем не менее, просто оттречить точки недостаточно. Вторая часть задачи — это расчет движения объекта на основе полученных данных трекинга. Он выполняется программой самостоятельно, но пользователь также может на него влиять через ряд настроек.

Solving (решение, расчёт) — это математический процесс вычисления движения объекта на основе изменения координат трекинг-точек между кадрами.

Целевой объект (target) — это объект, к которому применяется результат расчета.

Строго говоря, даже для одной точки происходит такой расчёт, только в этом случае происходит простое копирование (умножение на 1) координат трекинг-точки в координаты целевого объекта.

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

Объект: 2D-элемент

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

В данном случае не было необходимости делать сложный трекинг — достаточно простого трекинга перемещения и угла поворота. Затем эти данные использовались для сопоставления движения (match moving) отдельно подготовленного слоя с трибунами, заполненными людьми — After Effects
В данном случае не было необходимости делать сложный трекинг — достаточно простого трекинга перемещения и угла поворота. Затем эти данные использовались для сопоставления движения (match moving) отдельно подготовленного слоя с трибунами, заполненными людьми — After Effects

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

Объект: плоскость

Здесь мы говорим пока не о полноценной плоскости в 3D-пространстве, а о некоем объекте на двумерном изображении, который при съемке был плоскостью. Особенность заключается в том, что мы пока не восстанавливаем настоящую трехмерную перспективу, а просто работаем с участком изображения, все точки которого на видео трансформируются взаимосвязанным образом.

Часто такие объекты называют псевдотрехмерными или 2,5D-объектами. Соответственно, двумерное пространство, в котором происходит работа с псевдотрехмерными объектами обозначают как 2,5D-пространство.

2,5D-пространство — «псевдотрехмерное», двумерное рабочее пространство, в котором имитируются трехмерные эффекты.

Планарный трекинг / трекинг плоскости — расчет движения участка изображения, интерпретируемый как деформация плоскости в псевдо-трехмерном пространстве.

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

Итогом такого трекинга являются 4 точки, расположенные в условных углах объекта трекинга. Целевой объект же в данном случае будет представлять собой четырехугольник, углы которого будут привязаны к этим точкам (в большинстве случаев это прямоугольник, но не обязательно).

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

В общем случае существуют два подхода к трекингу плоскостей: трекинг углов и трекинг области (поверхности).

Трекинг углов требует явное наличие в съемочном материале этих самых углов, поэтому используется нечасто. Тем не менее, это довольно быстрый способ получить приличный трекинг (а в отдельных случаях и вполне себе единственный адекватный).

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

Выбор типов движения планарного трекинга в Mocha (слева) и Fusion (справа)
Выбор типов движения планарного трекинга в Mocha (слева) и Fusion (справа)

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

Алгоритмы планарного трекинга реализованы, например, в Boris FX Mocha и инструменте Planar Tracker приложения Blackmagic Fusion. В Blender, например, на момент написания статьи планарный трекинг отсутствует (там можно превратить 4 трека точки в трек четырехугольника — Plane Track — но это фактически то же самое, что на примере со стеной здания выше).

Объект: 3D-камера

Вот мы и добрались до настоящего 3D-пространства! Здесь любой трекинг начинается с определения положения камеры. Камера может быть статичной или движущейся.

Со статичной камерой все относительно просто: если нам известны фокусное расстояние оптики и размеры матрицы камеры, то, указав такие же значения в параметрах виртуальной камеры мы просто подбираем ракурс, совпадающий со съемочным по ориентации камеры и масштабу. Если эти параметры не известны, то придется посидеть немного подольше и подобрать еще и их. Но и здесь есть инструменты, которые могут помочь в работе — например, fSpy позволяет указать всего пару направляющих и сама рассчитывает все параметры камеры.

Подбор ракурса статичной камеры в Blender
Подбор ракурса статичной камеры в Blender

Зачем нам вообще знать фокусное расстояние оптики и размер матрицы камеры? В 3D-пространстве мы имеем дело с углом обзора, а в реальной жизни он однозначно определяется этими двумя параметрами. Знание угла обзора необходимо для корректного расчета ракурса камеры.

Разные углы обзора при разном фокусном расстоянии оптики для Full-frame матрицы (36 мм)
Разные углы обзора при разном фокусном расстоянии оптики для Full-frame матрицы (36 мм)

С этими параметрами относительно просто: мы можем их записать в момент съемки, или посмотреть позже в спецификации использованной камеры и оптики (если, конечно, знаем, чем снимался видеоматериал).

А чтобы восстановить положение камеры, нам также необходимо как минимум два изображения одной и той же сцены с разных ракурсов, на которых можно найти как минимум 8 общих точек. Используя координаты этих точек в двумерном пространстве кадра на обоих изображениях, а также зная угол обзора, можно математически рассчитать положение камеры для каждого из изображений. Очень важно, чтобы при этом точки принадлежали неподвижным объектам, а фокусное расстояние камеры (угол обзора) не изменялся.

Здесь мы не будем рассматривать математику этого процесса, поэтому, если вам интересно копнуть глубже, можно почитать, например, этот учебник по фотограмметрии (пространственная геометрия передает пламенный привет!)

При трекинге программа сначала рассчитывает положение камеры и точек в пространстве для двух ключевых кадров (не путать с «ключевыми кадрами анимации»), а затем, используя полученные значения, вычисляет положение камеры для остальных кадров видеоматериала. В результате получается 3D-сцена, в которой точки неподвижно размещены в пространстве, а положение камеры меняется от кадра к кадру в соответствии с вычисленными значениями.

После трекинга с полученной сценой можно уже делать то, что вам необходимо — например, добавить какие-то новые элементы в кадр, слегка или существенно преобразив исходную съемочную локацию:

Объект: объемный объект в 3D пространстве

В отличие от объектов, используемых для трекинга камеры, которые должны быть неподвижны, трекинг объекта в 3D-пространстве касается именно объекта, который движется (что логично, потому что отдельный трекинг неподвижного объекта нам не нужен — там достаточно просто трекинга камеры).

И эта задача — суть продолжение предыдущей: когда нам известно положение камеры в пространстве, мы можем уже использовать новый набор точек на объекте трекинга, который в свою очередь движется относительно камеры (Альберт Германович в этом месте просил также передать привет). Характер движения камеры тут роли уже не играет: она может быть статичной, или подвижной (главное, что положение камеры известно), движение объекта рассчитывается в ее пространстве координат, а затем может быть приведено к глобальной координатной системе.

Как и для расчета камеры, обычно требуется 8 или больше точек для вычисления изменения положения объекта между кадрами. Таким образом, чтобы вычислить движение объекта в трехмерном пространстве, нужно сначала определить положение камеры, используя ее смещение относительно статичных объектов, а затем, используя в свою очередь координатное пространство камеры фактически как статичное, вычислить перемещение объекта.

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

Объект: деформирующаяся поверхность

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

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

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

Точки, положение которых тречится для восстановления деформации поверхности маски и сетка поверхности (слева), и наложенная текстура маски, деформирующаяся в соответствии с треком поверхности (справа) — Lockdown (After Effects).
Точки, положение которых тречится для восстановления деформации поверхности маски и сетка поверхности (слева), и наложенная текстура маски, деформирующаяся в соответствии с треком поверхности (справа) — Lockdown (After Effects).

Когда итоговый объект — полигональная поверхность с движущимися вершинами — получена, на нее можно спроецировать необходимые текстуры или даже привязать 3D-объекты. Понятно, что точность трекинга точек, а также их количество (плотность/разрешение сетки полигональной поверхности) будет напрямую влиять на качество деформации и совпадение наложенных элементов и отснятых.

Один из самых продвинутых инструментов сегодня для такого трекинга — плагин Lockdown для After Effects и DaVinci Resolve. Примеры трекинга поверхности как иллюстрации к написанному выше можно, например, посмотреть в его промо-видео:

Заключение

Пожалуй, что касается базовой информации о трекинге, я изложил всё, что к таким знаниям относится — хочется верить, что доходчиво и без лишней воды :)

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

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

Как обычно, если у вас остались вопросы, появились замечания или предложения, пишите в комментариях — прочитаю, учту, отреагирую. Подписывайтесь на этот журнал, канал в Телеграме, рассказывайте о нем вашим знакомым — вдруг кому-то еще такой материал интересен.
Всего хорошего!