Основы работы в Ramen

Ильдар Ахметгалеев написал для нас гибрид обзора и урока Ramen — свободного композера, использующего узлы для создания композиций.

Про композитинг вообще

Компо́зитинг (от англ. compósiting — компоновка) — создание целостного изображения путём совмещения двух и более слоёв отснятого на кино- или видеоплёнку материала, а также CGI (Генерированные Компьютерные Объекты) и анимации. Широко применяется в современной компьютерной технологии для создания визуальных эффектов в кино, на телевизионном производстве, в рекламе, когда необходимо идеально симулировать реальную действительность. Примерами композитинга можно назвать такие широко известные фильмы, как «Терминатор-2», «Титаник», «Матрица», «Властелин Колец», рекламные кино-ТВ ролики «Coca-Cola», «Toyota», «BMW», и др. (источник)

Проще говоря, это технология склеивания и фильтрации движущихся картинок.

Композеры можно разделить на две группы:

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

В мире достаточно хороших, дорогих и не очень, проприетарных решений. Навскидку:

  • Apple Shake;
  • The Foundry Nuke;
  • Autodesk Combution;
  • Eyeon Fusion;
  • Adobe After Effects.

У пользователей свободного ПО с выбором похуже. Из существующих решений можно отметить следующие:

  • Blender: его встроенный композер с виду хорош, но стоит лишь начать работать с ним, как сразу понимаешь, в какое болото ты попал. Это и очень медленная работа, и постоянная необходимость создавать узлы Viewer (и кто это только придумал?), и ужасные средства для анимации композиции: узел Time и Translate, который не умеет двигать картинку на полпиксела. Кроме того, обрезается картинка, залезшая за пределы области рендеринга. Я уж не говорю об отсутствии человеческих средств для ротоскопинга (векторные маски). Да и ещё много других подводных камней.
  • Synfig Studio: хоть эта программа делалась вовсе не для композитинга, а для векторной анимации, но с некоторыми задачами композитинга она справляется на «ура». Поскольку главное в ней — векторная анимация, с ротоскопингом вообще нет никаких проблем. Кроме того, движок визуализации Synfig очень неплохо справляется с большими разрешениями. Основные недостатки — скромный набор эффектов и неспособность работать с дополнительными каналами (каналы глубины, скорости и прочие хитрые вещи). Synfig организует элементы в виде дерева, так что при желании программу можно использовать как своеобразную замену Adobe After Effects.
  • Cinelerra: работает по слоям, есть более-менее функциональный ротоскопинг, неплохие фильтры. Но о том, чтобы делать что-то сложное, даже думать страшно.
  • GAP: Gimp Animation Package тоже может это делать, но разрушающе, поскольку после применения фильтра изменяется исходное изображение. Кроме того, он сам по себе несколько неудобен.

И тут откуда ни возьмись — Ramen.

Как и почему

Спасителем выступил Эстебан Товальяри (Esteban Tovagliari) — человек, имеющий более чем десятилетний опыт работы композером в рекламе и компьютерной графике. Увлёкшись программированием ещё в 15 лет, в своей профессиональной деятельности он позднее разработал ряд сложных инструментов для обработки изображений, которые здорово ему помогли. Однако эти инструменты имели интерфейс командной строки и были неудобны: приходилось экспортировать изображения, обрабатывать, импортировать обратно, проверять и повторять этот процесс снова и снова. И тогда Эстебан начал разрабатывать Ramen.

Приблизительно год назад Эстебан раздал пару копий своей программы друзьям и сослуживцам, а потом рассудил, что сделав исходный код открытым, он сделает свой вклад в open source. Особенно учитывая намерение Apple похоронить Shake и уход Adobe и Autodesk в сторону от решения насущных задач.

Установка Ramen

Сразу отмечу, что пользователи самой популярной операционной системы пока могут не беспокоиться: сборка для Windows возможна, и первые шаги для этого сделаны, но у Эстебана нет времени на то, чтобы устанавливать третью систему и поддерживать сборку для неё. Сейчас вы можете скачать готовые сборки для Linux и Mac. Как раз к выпуску статьи Эстебан выложил новые предварительные сборки 0.5, так что свежесть гарантирована.

Если же вам интересно наблюдать за развитием приложения воочию, тут начинаются первые препятствия, которые, впрочем, вполне объяснимы. Над проектом в данный момент работает только один человек, и потому скорость разработки достигается за счёт использования большого количества сторонних библиотек.

Исходный код можно получить из репозитория SVN на SourceForge:

svn checkout https://ramenhdr.svn.sourceforge.net/svnroot/ramenhdr/trunk ramenhdr

Далее внимательно читаем список зависимостей и способ сборки в файле INSTALL.txt. На тот момент, когда писался этот обзор, в файле не было написано, что при сборке с GCC 4.4 вам потребуется свежая библиотека boost версии 1.42.

Если вы пользуетесь Ubuntu, вам повезло, потому что есть PPA с ночными сборками.

Кроме того, для запуска вам потребуется нормальная (не Intel) и относительно новая видеокарта. На моем GForce 8200 всё работает замечательно.

Первое знакомство с Ramen

Если вы никогда не имели дело с программами такого рода, вероятно, вам сначала захочется узнать общий принцип составления композиции. Он примерно таков:

  1. Сначала создаются один или несколько источников изображений, таких как узлы Color, Color Bars, Gradient, Image (поддерживает форматы tif, sgi, tga, png, jpg, hdr, exr, dpx и cin), Mandelbort (фрактал), Noise (полезен для подмешивания шума) или Quick Shape (векторная маска для ротоскопинга).
  2. Затем создаётся некоторое количество фильтрующих и смешивающих узлов.
  3. После этого создаётся нужное количество выходных узлов Image (поддерживает те же форматы что и входной узел Image).
  4. Наконец, входы и выходы узлов соединяются проводами.

Сразу после старта Ramen выглядит примерно так:

0000.png

Большую часть экрана занимает окно просмотра композиции. Внизу располагаются два окна собранные во вкладки: окно просмотра дерева композиции (активно) и окно редактирования кривых анимации. В правой части располагается окно параметров выделенного узла.

Узлы добавляются через меню Create в верхней части и связываются между собой перетаскиванием курсора от входа/выхода одного узла до выхода/входа другого узла. Для разрыва связи достаточно щёлкнуть по проводу между узлами с зажатой клавишей Control. Выход узла обозначается жёлтым квадратиком, основной вход — зеленым, вторичный вход — красным, matte — синим:

Активный узел, отображаемый в редакторе параметров, отмечен красной рамкой. Узел отображаемый в окне просмотра — синей. Выделенные узлы имеют жёлтый фон.

Для активации узла щёлкните по нему два раза.

По умолчанию в окне просмотра отображается активный узел. Для того чтоб просматривать один узел, а редактировать другой, нужно переключить режим Active на Context в окне просмотра.

После активации режима Context щёлкните два раза с зажатой клавишей Control на интересующий вас узел. В окне просмотра появится изображение с выхода этого узла.

Кроме того, вам пригодятся следующие горячие клавиши:

  • , and . — приблизить и отдалить соответственно; объект увеличения зависит от того, где вы в последний раз щёлкнули мышью.
  • Backspace — удалить выделенные узлы или точки на кривой анимации
  • Alt + Left Mouse Button — панорамирование

Просмотрите меню, в котором также указаны горячие клавиши.

Первая проба

Идея ролика

Идея проста. В начале мы видим брутальную linux консоль, после чего она заливается цветными кляксами, ну и в конце — логотип сайта linuxgraphics.ru.

Исходные материалы

Консоль загружающейся системы была записана при помощи VirtualBox и xvidcap. На экране примечательный дистрибутив SliTaz.

Кляксы сделаны при помощи туши, пипетки, бумаги, сканера и растрового редактора GIMP.

Экранная демонстрация загрузки

Приводим расположение элементов к более привычному вам виду и начинаем собирать картинку:

0001.png

Ramen в данный момент не может показать, где находятся края кадра, поэтому используем старый как мир трюк. Берём яркий задник (узел color) нужного размера, и кладем поверх него свою картинку. Сразу становится ясно, куда и насколько её растягивать.

0002.png

Кляксы

Добавляем заранее заготовленные кляксы. Ramen определяет их как последовательность кадров. Это не то, что нам нужно, однако, в свойствах узла image_in есть полезное поле Slip и функция Lock. Они позволяют указать нужный кадр последовательности и выключить смену кадров.

0003.png

Далее делаем так: инвертируем картинку узлом invert, при помощи узла setch заворачиваем канал Red в канал Alpha (в инспекторе на картинке ниже), затем перемножаем получившуюся картинку с желаемым цветом при помощи узла layer. При этом нужно будет для узла color указать размеры картинки так, чтоб в неё полностью умещалась наша кляксомаска.

0004.png

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

Чтобы было красивее, немножечко изменяем положение узлов:

0005.png

Повторяем операцию несколько раз и получаем ураган цвета:

0006.png

На этом этапе время рендеринга уже велико, поэтому трудно переоценить возможность понизить разрешение изображения (переключатель Full/Half/Third/Quarter на панели с изображением). В режиме Quarter композиция отрисовывается почти в реальном времени.

Далее делаем переход всей композиции в белый цвет. Этот переход хорош ещё тем, что можно зажать кнопку Ignore на узле layer и тем самым отбросить то, что мы только что нагородили с кляксами.

0007.png

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

0008.png

Анимируем параметр Offset узла correct. Узел layer_115 тут перемножает исходную маску с вновь созданной. Узел setch перенастраиваем для того, чтобы направлять канал Red во все каналы, а не дублировать в узле correct параметры на все каналы.

И получаем вполне неплохой результат.

blot_test.gif

Теперь нужно применить изменение ко всем кляксам с правильным таймингом. Тайминг лучше продумать заранее и на бумаге, поскольку Ramen пока не обладает достойными средствами ре-тайминга.

После применения этого приёма дерево подрастает:

0009.png

После удвоения клякс оно уже перестаёт быть похожим на дерево:

0010.png

Убедившись, что эта часть композиции работает как надо, отрендерив и посмотрев, выключаем узел layer, чтобы дальше работать на белом фоне.

0011.png

Логотип

Исходник логотипа был в SVG, так что он был предварительно разбит на отдельные элементы в Inkscape, а для удобства сборки заодно экспортирован целиком.

Вставляем логотип. Поскольку Inkscape экспортирует формат PNG без умножения цвета на непрозрачность (premultiply), нам придётся сделать это в Ramen.

0012.png

Раскидываем элементы по своим местам и получаем еще одну лесенку:

0013.png

Остается только сделать анимацию, используя параметр Scale узлов move2d.

Для большей эффектности в момент перехода добавим размывание клякс:

0014.png

Готовый ролик

И вот он — результат.

Исходный файл в Ogg Theora можно скачать отсюда.

Исходники композиции

Исходники композиции можно загрузить отсюда.

Ramen использует абсолютные пути. Чтобы исправить эту проблему, я положил в архив маленький скрипт pathfix.py. Перейдите в директорию с распакованной композицией и запустите команду

$ python pathfix.py

После этого в Ramen можно открыть compos.rmn.

Итоги

Плюсы:

  • Есть вменяемые инструменты для ротоскопирования! УРА!
  • Удобный интерфейс.
  • Встроенный предпросмотр анимации (flipbook)
  • Высокая скорость работы, даже несмотря на заявление автора о том, что код не оптимизирован.
  • Полностью рабочая (не так как в Blender) система понижения разрешения предварительного просмотра.
  • Почти все параметры узлов могут быть анимированы.
  • Базовая поддержка OFX, что означает возможность использования плагинов для Nuke, Toxik, Fusion и т.д.; в готовых сборках временно отключено из-за недоделанности, но при самостоятельной сборке можно включить обратно;

Минусы:

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

Замечательный старт. Быстрое развитие. Но пока еще не готовый продукт для внедрения в проекты с дедлайном. Тем не менее, Ramen сейчас ближе всех к взрослым композерам. Ещё пару умных голов, и как знать — может быть через год большим дяденькам придётся потесниться.

Планы на будущее

Перечисленные выше пункты относятся к редакции 128 дерева разработки. С каждым новым коммитом Ramen становится все лучше и лучше, поэтому стоит немного рассказать о том, чего ждать от проекта.

В ближайших планах Эстебана исправить наиболее досадные ошибки, сделать программу более надёжной и удобной, а также доработать поддержку OFX.

Что касается более отдалённых планов, Эстебан определяет их как реализацию функционала, сравнимого с функционалом Shake. Это означает motion tracking, хорошее ротоскопирование, векторный узел paint (как в Shake), возможность исполнения сценариев и различные оптимизации.

А ещё?

Эстебан ведёт блог, в котором рассказывает о новостях разработки (этот блог можно читать через аггрегатор Graphics Planet). По адресу https://sourceforge.net/apps/phpbb/ramenhdr/ в ближайшее время будет открыт пользовательский форум. Буквально на днях появилась тематическая группа на Vimeo. Вот, кстати, пример использования хрома-кея в Ramen:

В этом году проект будет подавать заявку на участие в Google Summer of Code 2010. Список возможных проектов приведён здесь.


Автор: Ильдар «AkhIL» Ахметгалеев
Лицензия: cc-by 3.0

1 Kомментарий

1 Trackback / Pingback

  1. Ramen 0.5 - Мультимедиа в Linux

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*