Этапы производства анимации
Добрый день. Меня зовут Филипп Горбачев. Вот уже 18 лет моя жизнь связана с компьютерной графикой. Я начал заниматься 3d в 2003 году, но это было исключительно мое хобби. В 2008 году хобби переросло в коммерческое русло, а в 2010 я понял, что это стало моим единственным источником дохода и основной деятельностью. И сейчас, в 2019 году, я решил сделать проект, который смог бы объединить в себе все то, чему я научился, и что у меня, вроде бы, не плохо получается. То есть в данном случае упор идет на технические моменты. Как и в начале своей карьеры в 3d, так и сейчас, я испытываю огромный интерес ко всему, что связано с автомобильной визуализацией. Один из крупных преоктов можно посмотреть тут.
В данной статье я бы хотел осветить все этапы производства анимации, начиная с создания окружения и заканчивая композитинг всего в after effects. Для работы использовались: 3ds max, redshift, forest pack и after effects. Также использовалось цветовое пространство OCIO, вместо стандартного SRGB.
Сюжет был выбран не замысловатый, но и не ради сюжета все делается. Сцена проста - прямая дорога, на заднем плане много зелени и техническое здание, чтобы не было совсем пусто.
Первая проблема, с которой сталкиваются многие, в том числе и я. Это асфальт. Из доступных для покупки текстур, я нашел только одну, которая удовлетворяла мои потребности хотя бы частично. Основная трудность, это тайлинг, который тяжело скрыть и который портит все на кадрах, где видно большой участок дороги. Начал я с того, что решил попробовать начать с простого - две текстуры, с разными каналами в mapping миксуются по ноде noise, а на поверхность дороги, в свою очередь я положил два модификатора Uvw map, так же с разными каналами, и один из них я повернул на 90 градусов по оси Z. Такой подход был выбран из-за того, что я использовал не только Diffuse текстуру, но так же и Normal, которая, с которой в Redshift возникают проблемы, если поворачивать ее напрямую в настройках текстуры. Таким же образом я применил все остальные текстуры из набора (reflection, specular и displacement).
Скриншот материала дороги.
Сделав тестовый рендер, я был не до конца удовлетворен результатами и вдобавок мне хотелось чуть-более пасмурного настроения в ролике, так что я решил добавить небольшое количество луж, а так же в целом разбавить однородность дороги посредством дополнительных, более сильно отражающих деталей и разметкой по краям дороги. Затем был добавлен небольшой нойз на геометрию. Чтобы при движении не было моментов, где колеса проникают в асфальт, или наоборот на один кадр повисают в воздухе, я добавил небольшую колею. Это помогло сделать анимацию автомобиля сильно проще не сильно портя визуальную составляющую. В итоге я был доволен тем, как все получилось.
Дальше я перешел к следующему этапу работы - окружение. Тут все так же просто на первый взгляд, но тем не менее пришлось немного потрудиться и сделать тестов.
Для окружения был куплены деревья и использован набор из разнообразных кустов и травы, найденный в интернете бесплатно. Деревья и траву удобно рассаживать с помощью плагинов Multiscatter или Forest pack. В моём случае выбор пал на второй вариант, так как Redshift не поддерживает Multiscatter. Все ассеты были приведены к необходимой цветовой гамме с помощью color correct. Но предварительно мной был создан небольшой участок земли, внутри которого располагалась дорога. Так же с помощью spline были созданы границы, где должны были заканчиваться деревья, и начинаться трава и кусты. Чтобы придать местности больше реализма, было принято решение немного “размыть” границу леса с помощью неоднородности сплайна, и добавления отдельных небольших участков, где будут появляться редкие деревья.
Зона для рассадки деревьев.
Это поможет дать чуть больше параллакса в движении, и избавить от ощущения, что все движется вдоль стены из деревьев, по той же причине был сделан рельеф у поверхности. В процессе работы выяснилось, что такая большая площадь, усыпанная достаточно детализированными моделями травы, не помещается в память моей видеокарты gforce 1080ti, так что пришлось использовать функцию camera clipping в Forest pack, которая помогает скрыть все, что находится вне камеры, от зрителя. Для того, чтобы в отражение в деталях авто была какая-то информация, я я воспользовался функцией range, которая помогает сделать необходимое для отражения количество копий травы. С деревьями я решил так не поступать, так как все-таки разница в количестве инстансов колоссальная и они хорошо рендерились и так.
Изначально проект планировался как одна - две картинки, но потом было принято решение перейти в анимацию, так рендер тайм оказался приемлемые и стало интересно что из этого выйдет.
Изначальная картинка.
Так что изначально не было, например, ангара. Он был добавлен после. Ещё пришлось увеличить размер местности и сделать ее нормально выглядящий с любой точки сцены.
Итак, с окружением, как мне кажется, мы уже закончили. Теперь переходим к автомобилю. Модель была взята из другого моего ролика. Модель кад, была получена мной для клиентского проекта. Единственное, на что стоит тут обратить внимание - материал автомобильной краски. Я использовал Rs Car paint, в котором пришлось немного покрутить параметров и добавить свойственную автомобильной краске шагрень (orange peel), появляющийся в процессе высыхания автомобильного лака после покраски. В остальном - обычные шейдеры. В большинстве использовался как обычный рефлект, так и coat с чуть более высоким глосси. Sidewall на покрышке сделан с помощью самодельного набора текстур и объемный рисунок на боковине резины был сделан с помощью bump, так как колеса находятся в движении, и особого смысла утяжелять их нет.
Теперь настало время перейти к анимации. Я задался целью сделать лаконичный риг, так как анимировать двигая 100 дамми мне не хотелось. Было принято решение анимировать все по сплайну. Для этого был создан основной дамми который я прилинковал с помощью spline path.
К нему был приаттачен дамми, который ставится примерно в точку центра тяжести авто. Я его установил по центру между передним и задним рядом колес, на уровне центра окружности колеса. Далее к нему приаттачен еще один дамми, который находится там же, но он нужен, чтобы положить на него noise контроллер, который будет имитировать небольшое покачивание кузова автомобиля. Далее к этому дамми прилинкован контроллер, с помощью которого анимируются крены при старте, разгоне или торможении, или же при повороте. Ну а к нему уже прилинковано все, кроме колес. У колёс же свой риг, на два дамми. Один отвечает за вращение колеса и за noise н оси Z, второй за поворот передних колес, а также за то, чтобы дамми с noise контроллером не ушел в нулевую точку координат. Вращение колеса было осуществлено посредством wire parameter. Связь установлена между дамми, вращающим колесо и дамми, идущем по сплайну. Вот примерно так выглядит формула.
Сразу скажу, что она была написана не мной, а взята с официального autodesk форума.
Она позволяет точно снижать или повышать скорость вращения колеса в зависимости от скорости движения дамми по сплайну. В авто анимации очень важно, чтобы автомобиль двигался с определённой скоростью, слишком медленно будет выглядеть вяло, слишком быстро - смажет всё картинку. Для контроля скорости в 3д максе я использовал бесплатный скрипт speedometer+, с его помощью становится легче отслеживать скорость и не допустить нелепого превышения, которое впоследствии может испортить визуальное восприятие анимации.
Интерфейс скрипта.
В итоге мы имеем удобный риг, который не избавляет полностью от нужды делать анимацию руками, но делает этот процесс значительно легче и приятнее.
Далее хотелось бы перейти к камерам. В первой итерации у меня был сделан монтаж, в котором использовались камеры, сделанные из головы, и это была большая ошибка. Поняв, что я не являюсь оператором по профессии, я принял решение позаимствовать некоторые движения камер из уже существующих рекламных роликов и дело пошло. Важный момент - крайне рекомендую руководствоваться как референсом для камер тем видео, где показан примерно тот же класс автомобиля. В процессе я совершил ошибку, попробовав использовать видео, где был снят какой-то супер кар, сильно отличавшийся по габаритам и приемы, которые отлично смотрелись на низком, спортивном авто стали выглядеть на suv, которым является chevrolet в моем ролике, мягко говоря плохо. Так же оказалось что удобней всего делать движения камер в отрезке, где машина статична. Таким образом более наглядно видно пути камеры, и их можно немного править прямо в вьюпорте, а не только в curve editor. После того, как камера была готова, я просто сдвигал все ключи анимации камеры по таймлайну на нужный отрезок анимации автомобиля. Конечно же перед анимацией камеры необходимо сделать риг. Камера и ее таргет линкуются к двум дамми, которые линкуются, в зависимости от желаемого эффекта, к главному дамми, или к какой-либо части автомобиля. Такой подход к ригу дает возможность использовать на камеры эффекты, такие как camera shake, который просто делается с помощью noise контроллера, примененного к одной или нескольким осям камеры, или ее таргета.
Аниматик.
Свет в ролике. Тут все очень просто - rs dome light с одной hdri. Так же свет был добавлен в фары автомобиля. Для передних фар - это incandescent material положенный на плейн и светодиоды. Задние фары - также самосветящийся материал. В дальнейшем я добавил omni lights на места светодиодов и задних фонарей, чтобы перенести их, вместе с камерами в after effects. Об этом я расскажу чуть позже.
Для рендера проекта был выбран Redshift. Причин для этого масса. Начиная с того, что я уже настроил как то это авто в Redshift ранее, и заканчивая тем, что я давно уже его купил и работаю в нем достаточно много. Ну а важнейшая причина - скорость рендера. Я пробовал работать практически во всех GPU рендер движках (Redshift, Octane, Fstorm, V-ray next gpu) и могу с уверенностью сказать, что редшифт наиболее быстрый и без каких либо проблем может работать с колоссальными объемами информации в сцене. Также важно то, что в нем очень большой простор для оптимизации и это то, чего не хватало мне в других gpu движках. В конечном итоге, это все дало мне возможность рендерить ролик с настоящим Motion blur, а не прибегать к его постовому аналогу.
Для композитинга мною был выбран Adobe After Effects. К сожалению я до сих пор не стал уверенным пользователем nuke или fusion, так что как есть. Тут все достаточно просто и наглядней всего было бы показать ключевые этапы композитинга в этом видео:
Compositing breakdown.
Уже имея привычку работать в ocio ежедневно, в этом проекте я не стал делать исключения. При всей своей скорости и гибкости Redshift всё же имеет недостаток. Сырые рендеры из вьюпорта выглядят очень искусственно, пожалуй, слабее любого другого движка. К счастью, это компенсируется переходом в цветовое пространство OCIO. Оно придаёт картинке натуральности правильно обрабатывая информацию о яркости и цвете.
Но с приходом OCIO пришла другая проблема. Как я уже говорил, я работаю в After Effects, и в нем работа с ocio происходит через сторонний плагин. А это значит ухудшение скорости работы и рендера. Также приходится всем секвенциями ставить preserve rgb, что очень раздражает, когда секвенций много. Но, как мне кажется, оно того стоит:
В остальном все стандартно. Video copilot для флар, Film effect для финальной цветокоррекции. Также на посте был сделан Camera shake и небольшая, едва заметная, глубина резкости.
Скриншот композиции в After Effects.
Так же я обещал немного рассказать о переносе данных из 3ds max в after effects. Тут мне крайне сильно помог скрипт “Sk-Films: Camera Exporter”.
Интерфейс скрипта.
Опишу принцип его работы. Берете вашу камеру, источник света и (или) дамми, добавляете в окно скрипта, и экспортируете в файл. Далее импортируете в афтер эффектс посредством Scripts>Run script. И все. У вас есть камера, источник света и null, в точности повторяющие их положение в сцене и их анимацию. В моем случае мне нужна была только камера и лайты, чтобы использовать их для автоматического трекинга в Video Copilot Lens Flare для создания, собственно, флар. Скрипт также переносит информацию об интенсивности света, или же цвете источника освещения. После импорта всех моих камер и источников освещения, мне осталось только сделать анимировать интенсивность света в зависимости от ракурса или анимации камеры.
На производство ролика у меня ушло чуть больше 3х недель, при учете того, что это было далеко не единственное и не основное мое занятие в это время. Вот такой проект получился, спасибо всем кто прочитал до конца и надеюсь, что мой опыт окажется полезным.