Еще один инструмент компоузера, составляющий основу большинства визуальных эффектов и довольно тесно связанный с трекингом, — это маски.
Основные сведения
Что такое «маска» в VFx
Маска (mask)— это замкнутый контур, отделяющий часть изображения от целого. Область внутри маски может быть прозрачной, или наоборот, прозрачной может быть остальная часть изображения, не попавшая в зону маски. Степень прозрачности может варьироваться.
На изображении выше большие четырехугольные маски задают прозрачные области изображения (дверные проемы и стекла), а меньшие (оранжевая, розовая, бирюзовая и т. п., окантовывающие поручни), наоборот восстанавливают часть изображения, обозначая непрозрачные зоны.
Маски очень близки по сути к другим понятиям из графического дизайна и обработки изображений.
Область выделения (selection) — временный контур, позволяющий работать с отдельной частью изображения. Ключевое отличие в том, что он чаще всего временный. Но на его основе можно создать маску, ровно как и наоборот, маску можно использовать для создания области выделения.
Да, в Photoshop'е, например, есть «сохраненные области выделения», которые, вроде как, не «временные», но они по сути виртуальны — их можно преобразовать в маски слоя, например, или загрузить как уже реальные области выделения, чтобы поработать с частью слоя, но, опять же на короткое время.
Альфа-канал (alpha) — это монохромное изображение, являющееся постоянным атрибутом графического (в том числе видео-) файла или слоя в графическом файле, которое описывает видимость или «непрозрачность» (opacity) участков изображения: белый полностью видимый, черный — полностью прозрачный; оттенки серого создают полупрозрачность (чем ближе к белому, тем менее прозрачный).
Маска легко может быть преобразована в альфа-канал, а он в свою очередь может быть использован в качестве маски.
Чтобы расставить все завитки над й, ещё раз про отличия этих понятий: альфа-канал — это прозрачность-результат, хранимый в графическом файле как часть изображения; область выделения — это временный контур, позволяющий разово обработать часть изображения, или создать на основе себя маску; маска — это рабочий инструмент, постоянная область выделения, которая хранится в файле-проекте по обработке изображения (но не является частью самого изображения).
Mask и matte
Эти два термина существуют параллельно в английском языке, в то время как в русском есть только «маска», — так в чем разница? Я сталкивался с некоторыми расхождениями в понимании, тем более что слово «мэйт» (та самая matte) присутствует в лексиконе ви-эф-иксеров. По сути дело обстоит так:
- mask — это редактируемый контур,
- matte — это фактическая область, которую этот контур формирует.
Не стоит путать matte (когда мы говорим о масках и альфа-каналах) с matte paint — это другое. В старину matte paint иногда называлось glass paint — рисунки на стекле, оптическим образом совмещавшиеся с отснятыми материалами и дополнявшие локацию, которую было невозможно (или слишком сложно) снять в живую. Сегодня мйэт пэинт используется повсеместно, но выполняется уже средствами цифровых технологий — мы будем сталкиваться с ним время от времени.
Типы масок
Здесь все максимально просто: маски бывают векторные и растровые.
Векторная маска — это замкнутая кривая, состоящая из точек, соединённых между собой. На первой картинке выше желтая и зеленая линия — это векторные маски. Зеленая линия кажется не замкнутой, но на деле она просто выходит за границы кадра — это совершенно нормально.
Растровая маска — это пиксельное монохромное изображение, определяющее прозрачные и непрозрачные зоны (да, почти как альфа-канал, но в программном представлении маска создаётся, существует и редактируется как самостоятельный слой). На второй картинке красным подсвечены области растровой маски.
Результат работы обоих типов маски наглядно демонстрирует третье изображение.
Мягкими (soft) называются границы масок с плавным переходом от прозрачности к непрозрачности. Чем шире эта граница плавного перехода, тем «мягче» маска на данном участке. Безусловно мягкость может варьироваться вдоль контура — как у растровой, так и у векторной маски. Обратно, маска с четкими границами называется жёсткой (hard).
Чтобы лучше это пояснить, предлагаю посмотреть на эти изображения. Сплошные линии — это основные контуры масок. Пунктирные линии обозначают границы отступов в пределах которых размывается граница сплошной линии в одну и в другую сторону. На остальных изображениях иллюстрации — результат применения такого смягчения границ.
Для чего нужны маски
Наверняка вы уже знаете ответ, но раз уж мы движемся от основ к сложным темам, проговорить нужно все основы. Маски позволяют работать с частью изображения, а не с целой картинкой (что нам и требуется чуть реже, чем всегда).
Самые частые и очевидные примеры такой работы — это необходимость наложить часть одного изображения на другое (например, изображение ведущего прогноза погоды на фон с виртуальной студией), поместить изображение в какой-то заранее подготовленный для него участок (например, запись телепередачи на экран телевизора), поставить новый объект позади какого-либо другого объекта, присутствующего в кадре (например, робота, идущего по обочине дороги, позади человека).
В любом фильме или ролике, когда вы видите как виртуальный объект (от крошечного крылатого мячика или эмблемы на стене до гигантского космического корабля или разрушительного цунами) «живет» в кадре — органично смотрится в нем, взаимодействует с персонажами и окружением — можно быть уверенным, что тут совершенно точно не обошлось без масок!
Как создаются и анимируются маски
Я уже довольно много сказал про маски, но еще не упоминал момента анимации. Мы работаем с видео, следовательно, картинка в той или иной степени у нас меняется со временем. Каждый последующий кадр отличается от предыдущего, значит, маска тоже не должна быть статичной. Вот сейчас об этом и поговорим — заодно и про трекинг немного вспомним (с сего момента эти две темы будут пересекаться достаточно тесно).
Векторные маски
Если вы не знакомы с векторной графикой, я рекомендую ознакомиться с ее основами на Википедии, а также посмотреть разделы о кривых Безье и сплайнах.
Векторные маски создаются вручную и представляют собой комбинацию сплайнов (в большинстве программ композитинга один замкнутый сплайн считается одной отдельной маской; соответственно, комбинация таких «простых масок» может считаться составной или сложной маской).
Анимация векторных масок реализуется через анимацию точек сплайна — как самих точек на линии, так и управляющих векторов (handles). В определенных (нужных компоузеру) кадрах ставятся ключи анимации.
А сейчас, что скажу... Когда вы делаете анимацию маски в соответствии с изменениями контура какого-либо объекта, вы фактически делаете ручной трекинг контура объекта (читай маски)! И прелесть некоторых современных программ в том, что иногда они могут вам с этим помочь — выполнить (в той или иной степени) автоматический трекинг векторных масок! И что еще скажу: сильно не обольщайтесь — пока что это именно вспомогательные средства, а не что-то из серии «нажал одну кнопку и стало хорошо».
Рассмотрим пару примеров.
Есть такой инструмент — Mocha. Бывает как отдельное приложение Mocha Pro, или плагин для After Effects — Mocha AE. Программа вообще предназначена для планарного трекинга (одна из разновидностей трекинга поверхности, когда объектом трекинга выступает не деформирующаяся плоскость — ПО позволяет оследить ее перемещение в 3D-пространстве и угол поворота).
Векторные маски здесь используются, чтобы указать программе, какую область она должна посчитать плоскостью и оттречить. При этом, если обвести маской контур объекта, как несложно догадаться, форма маски будет следовать за контуром объекта (при удачном трекинге). Даже если объект — не совсем плоский, или трекинг не безупречный, зачастую бывает достаточно скорректировать маску всего в нескольких ключевых кадрах, чтобы вместе в автоматическим трекингом получить корректно анимированную маску на всем временном промежутке.
Второй пример — Blackmagic Fusion. При редактировании векторных масок в этой программе можно включить т. н. Roto Assist. Маску придется создавать и анимировать все равно вручную, но Roto Assist пытается распознать контуры на изображении и работает как инструмент привязки редактируемой маски к этим контурам. На иллюстрации можно увидеть эти контуры — желтая обводка при редактировании точек маски.
Лично я при анимации векторных масок всегда исхожу из того, что основное движение — это движение самого объекта, а изменение контура — это движение вторичное. Поэтому чаще всего по возможности автоматизированными методами стараюсь сначала оттречить движение нужного объекта, а потом к нему уже добавить анимацию контура маски (по аналогии с примером Mocha).
Растровые маски
Наиболее распространенным способом получения растровых масок является кеинг (keying) — это процесс создания прозрачности на основе определенного цвета (chroma keying) или светлоты (luma keying). Хрома-кей использует оттенок цвета для определения, какой участок картинки сделать прозрачным, а какой — нет: чем ближе тот или иной пиксель к заданному цвету, тем большая прозрачность ему назначается. Люма-кей работает аналогично, но не с цветом, а с яркостью пикселей: чем темнее (или, наоборот, светлее — как решит художник), тем прозрачнее (да, очень похоже на альфа-канал). В отличие от хромакея, для люмакея редко используется изображение в исходном виде — часто те или иные цвета затемняются или осветляются, затем изображение переводится в монохромное и его яркость дополнительно корректируется — и после этого оно готово стать маской/альфа-каналом.
Растровое ротоскопирование (rotoscoping) используется значительно реже, но дает возможность решить те задачи, с которыми не справляются другие методы. Изначально ротоскопирование было известно как анимационная техника, когда поверх кадров отснятого видео с актером художники рисовали персонажей, повторяющих действия этого актера. Сейчас мало что изменилось — любая обводка по видео по сути является ротоскопированием (да, когда векторные маски рисуются от кадра к кадру — это тоже оно), но здесь мы говорим именно об обводке и заливке области с целью получения канала прозрачности. Это можно делать как вручную в любом графическом редакторе, рисуя поверх каждого кадра, или использовать частично автоматизированные решения, вроде Roto Brush в After Effects: этот инструмент сам пытается определить, где проходит граница между нужным объектом и фоном, который будет прозрачным, а задача художника — при помощи кистей подсказывать ему, какие области считаются требуемым объектом, а какие — лежат за его границами.
Самые лучшие, точные и приятные во всех смыслах растровые маски получаются на основе различных каналов, получаемых при рендеринге 3D-сцен. Например, канал глубины (Z-depth) может быть представлен как — монохромное изображение, где цвет каждого пикселя (число, которое в нем хранится) соответствует расстоянию от камеры до участка на поверхности объекта, который этот пиксель отображает; или канал идентификатора материала или объекта (material ID или object ID) — в таком изображении каждый пиксель содержит число (или набор чисел), которые однозначно обозначают конкретный объект или материал объекта, чья поверхность попала в этот пиксель. Несложно догадаться, что на основе этих точных чисел можно получить точные маски, если на изображении оставлять или убирать пиксели, чьи значения попадают в требуемые диапазоны.
По сути, этот метод родственен кеингу, но в живых съемках мы всегда имеем дело с погрешностью: шум, неравномерное освещение, лишние тени, мусор, атмосфера и т. п. Что же касается данных, получаемых при рендеринге 3D сцен, — они точны; в большинстве программ для работы с ними есть специальные дополнительные инструменты.
---------------------------
Пожалуй, этого вполне достаточно для вводной теоретической части — дальше с масками, как в той присказке, нужно разбираться на практике: «Берешь, и делаешь. Берешь — и делаешь!» Так и поступим. А пока что всё. Если у вас остались вопросы, появились замечания или предложения, пишите в комментариях — прочитаю, учту, отреагирую. Всего хорошего!