Компьютерная графика в кино (ролик плюс статья)

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

Как же это все сделано? Прямо на площадке или на компьютере?
То есть, спецэффекты или визуальные эффекты?
Их часто путают, но все-таки компьютерная графика в кино — это visual effects.

Вот о них мы сегодня и поговорим. Под катом лежит ролик и его текстовая версия, адаптированная для статьи. Много картинок!

[embedded content]

Моделирование

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

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

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

Сколько раз в кино была сцена со взрывающимся вертолетом? Не знаю, но не уверен, что в мире найдется столько вертолетов.

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

И даже тут реальная съемка не обязательна. Есть такая профессия — фоны рисовать.
Мэт-пэйнтинг — создание всей той красоты, что находится вдалеке и особо не демонстрирует выпуклости объектов. Звездное небо, лазурные берега, равнины Дикого Запада.
Эту задачу эффективно решает технический дизайнер или художник, который что-то отрисует, что-то сфотографирует, что-то смоделирует и вернет в пригодном к композу, о котором чуть позже, виде. Строить честную трехмерную сцену бескрайних просторов, когда те — просто декорация за спинами героев и участия в действии не принимают, затратно, долго и бессмысленно.

А как насчет моделирования чего-то более живого?
Сперва моделируется болванка с минимумом деталей, затем ее подробно прорабатывают; этот процесс называется скульптингом. Затем приходит очередь текстурирования и анимации модели, перед которыми может проводиться ретопология.

Топология — это то, как именно сетка описывает объект. Полигоны могут логично обрисовывать форму, повторяя естественные линии предмета.

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

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

Но в больших проектах, создавая зверушку, ее прорабатывают изнутри. Существо моделируется со скелетом и мышцами, и так же ответственно анимируется. Чтобы под кожей перекатывалась мускулатура, демонстрируя виртуальные усилия.
Очевидно, что художник, создающий дракона, должен немало часов провести в кругу настоящих драконов, чтобы результат выглядел достойно. Не такая уж и безопасная работа =)

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

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

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

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

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

Симуляции

Симуляции в нашем случае — это любые сцены, не создающиеся руками покадрово, а развивающиеся сами, следуя каким-то заданным правилам.

[embedded content]

Некоторые фильмы невозможны без симуляций.
2012 — идеальный пример. Студия спецэффектов Uncharted Territory поработала на славу, симулируя разрушения в промышленных количествах.
Холодное Сердце немало обязано своим очарованием отличному снегу, который пришлось разработать специально для мультфильма.
Красивую огромную волну как в Интерстелларе не обязательно симулировать полностью. Достаточно создать простую фигуру, похожую на волну, а поверх нее льющуюся симулированную воду.
Эпическая песчано-грозовая буря в Безумном Максе тоже потребовала немало частичек на свое создание, хотя в той сцене много чего налеплено.

Примеров не счесть. Какие же симуляции бывают?

Начнем с симуляций частиц. Их используют, когда надо гореть, дымить, литься, сыпаться и так далее.

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

Огонь, дым, взрывы — все они хорошо имитируются.
Сыпучие или вязкие материалы, которые контролируемо себя ведут сделаны точно таким образом.
Разнообразные магические эффекты почти всегда имеют какие-нибудь синие искры, которые сделаны именно частицами.
И так далее.

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

Из типичных задач еще надо вспомнить про волосы и шерсть.

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

Рендер

Вот и добрались до визуализации.

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

Чуть позже я прочитал интервью с создателями мультфильма Тачки, где те, среди прочего, рассказывали о нескольких часах рендера каждого кадра мультфильма на ферме из множества компьютеров.
Так я узнал, что вывод кадра игры и вывод кадра графики для фильма — это разные задачи. В первом случае максимально оптимизированная картинка должна создаваться много раз в секунду, во втором же — создание одного кадра может занимать часы.

Трехмерную сцену в картинку превращает программа-рендерер. А процесс называется, соответственно, рендерингом или просто рендером.

Рендер очень тесно связан с шейдингом материалов и освещением, потому что их основу он как раз и дает. Базовые материалы, настраиваемые как захочешь, источники света, виртуальные камеры — это все работает в тесной связке с программой-визуализатором. Трехмерные пакеты имеют свои стандартные рендереры, и почти всегда позволяют подключать сторонние.
Самая известная связка — 3ds Max + V-Ray. Это базовый комплект для архитектурной визуализации. Да, это связка вчерашнего дня, но до сих пор наследие уроков по ней держит достаточно низкую планку вхождения. Да и в резюме трехмерщика обычно требуется строчка про знание Макса.

За последние лет десять рендереры проделали огромный путь к фотореализму. Материалы и карты к ним в свободном доступе позволяют быстро получать достойный результат даже дома с некоторыми оговорками. Например — статичные картинки делать можно практически без ограничений. Ну займет рендер у фрилансера несколько часов — поставил на ночь, да и все дела. Вот видео делать значительно сложнее, тут уже скорее всего придется арендовать какие-то облачные мощности.

О моделях и материалах я уже рассказал. Осталось еще кое-что важное. Это свет.
Ничто не будет выглядеть естественно, если оно освещено примитивными источниками света. Хороший свет очень затратен по ресурсам компьютера, поэтому разработчики игр пытаются имитировать его самыми разными способами, лишь бы получать стабильное количество кадров в секунду.
В играх используются точечные источники света, параллельные — для имитации условно бесконечно удаленных источников вроде Солнца и эмбиент — то есть просто подсветка без конкретно расположенного источника и, соответственно, теней. Плюс в играх настоящих источников в сцене мало, очень уж затратное это дело.
Имитировать же свет без источников научились давно, и в случае с трехмерными играми дежурным способым долгое время были запеченые в текстуры карты света или лайтмапы: то есть, светотеневой рисунок просчитывался заранее, и дальше просто рисовался на объектах сцены. Минус такого подхода очевиден: динамического света не сделать, пробегающий мимо нарисованного источника света персонаж не перекроет виртуальных лучей и правильной тени не получится.
Но способы можно и комбинировать, и применять разные другие хитрости, чем и занимаются разработчики игр, борясь за частоту кадров.

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

В играх ГО имитируют более простыми затенениями, но даже они сильно бьют по производительности.

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

Отдельно надо сказать про подповерхностное рассеивание света (SSS).

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

Композ

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

Композитинг или композ — это сложный многослойный монтаж, объединение всего съемочного материала в кадре. Слои могут свободно располагаться в виртуальном пространстве, подвергаться сложным обработкам, воздействовать друг на друга. Любой кадр с компьютерной графикой — результат композа.

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

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

Для заинтересовавшихся — вбивайте в поиске Ютюба оригинальное название любого блокбастера со словом «breakdown». Студии эффектов всегда делают подборки с демонстрацией своего труда.

Софт

В чем же это все делается? В каких волшебных программах, недоступных простым смертным? Явно же не в Виндовс Муви Мейкере, где я клепал ролики с тюнингом Нид Фор Спида!

Я тут могу повторять продукты, о которых упоминал выше. Это для удобства, чтобы весь софт был в одном месте и было удобнее найти, если вдруг понадобится.

Многие слышали о 3ds Max от компании Автодеск. На практике его чаще всего используют для архитектурных визуализаций. Еще его используют для моделинга, благо для Макса за историю его существования сделано столько уроков и плагинов на любой случай, что освоить все можно достаточно быстро. Также моделингом занимаются в MODO и Blender.
Кроме Макса Автодеск выпускает Maya, в которой удобно делать риггинг и анимацию.
Скульптинг делают в основном в ZBrush, но также могут делать в Blender, 3D-Coat (в котором также удобно делать ретопологию) или Mudbox.
Моушн-графику делают в Cinema 4D и с некоторых пор в Maya, когда та получила инструменты для процедурной анимации.
Но король сложной процедурной анимации — Houdini. В нем же делают симуляции.
Двухмерную моушн-графику и несложную трехмерную делают в After Effects от Adobe (эдакий Фотошоп в движении с простеньким трехмерным движком), в котором можно делать и простенький композ.
Серьезный композ делают в Nuke, Avid Media Composer и Fusion.
Еще есть Lightwave, но никто не знает, зачем он нужен =)

Продуктов на рынке тьма, для каждой задачи свой, и часто не один. Под специфические задачи студии нередко разрабатывают свои собственные решения, но в домашних условиях ТАКОЕ вам не понадобиться. А для большинства бытовых задач или для обучения механикам работы в 3д можно взять свободный Блендер и набраться некоторого опыта.
Забавный нюанс: люди в комментариях к ролику писали, что с Блендера приятно начинать, но потом пытаться освоить тот же Макс сложно и связано с сильным дискомфортом из-за недружелюбного интерфейса. А резюме без упоминания именно Макса рассматривают куда как менее охотно.

На этом все, всех с Новым годом!