Богданов Вячеслав (супервайзер, RnD)
Сегодня я хотел бы рассказать о создании спецэффектов для финского фильма «Ролли и Золотой ключ». С самого начала был выбран для визуализации рендерер Арнольд. На первый взгляд это был рискованный шаг, так как рендерер был малоизвестен у нас в России на тот момент. Многие о нем слышали, но никто толком его не видел в действии. Дело облегчалось тем что я в марте 2012 года стал официальным бета-тестером этой новой системы визуализации и имел определенный опыт в общении с Арнольдом. Кроме того у меня имелся свой багаж разработок, исследований и большой опыт в управлении крупными кино и анимационными проектами.
Создание спецэффектов в России для зарубежного кино является сейчас явлением достаточно редким. Причин для этого может быть несколько, но мне видится здесь сложившийся (и с недавнего прошлого меняющийся, к счастью) стереотип о том, что у нас нельзя делать качественные дорогие и сложные эффекты для кино.
Производство спецэффектов для проекта (назовем его кратко «Ролли»), началось в июле 2012 года. С самого начала проект отличала тщательная подготовка со стороны наших финских коллег. Чрезвычайно детальная разработка образов персонажей и очень тщательная раскадровка части фильма, касающиейся графики, без сомнения, служило существенным подспорьем в нашей работе и вызывала восхищение мастерством художника, создававшего все это. В проекте было несколько ключевых персонажей мы расскажем. Мы расскажем о главном компьютерном персонаже — червячке Малькольме, воронах и аистах.
МАЛЬКОЛЬМ.
Этот персонаж был главным среди всех компьютерных персонажей. Главная сложность была найти качественное представление кожи у Малькольма. Было до конца не понятно как должен выглядеть червячок, так как образ его был собирательный. Мы решили двигаться от человеческой кожи. Попытаться немного очеловечить его, так как он должен был совершать движения подобные людям — улыбаться, петь, кланяться и т. д., сохранив при этом понимание того что это все-таки гусеница. Для проекта я написал расширенную версию стандартного шейдера от компании SolidAngle(R) – aiStandart — QStandart. В нем были дополнительные функции — слоеная система SSS (Subsurface Scattering) несколько спекуляров (первичные и вторичные) и еще несколько мелочей. Самым сложным тут был поиск правильного набора текстурных карт для SSS. Задача стояла сделать кожу Малькольма детальной (было много довольно крупных планов), поэтому тут не было возможности «схитрить». Два вида спекуляров, сложный векторный дисплейсмент дополнили картину. Для создания волосков на поверхности мы использовали стандартный майский hair. Использование других коммерческих систем не дало качественного результата либо было неоправдано долго по времени. Ну и Арнольд без сомнения существенно облегчил задачу. Арнольд основан на brute force Monte Carlo solution, при этом я бы отнес его к универсальным рендерерам. Он отлично считает и волосы и дисплейсмент, моушин блюр снижает по моей оценке время рендера на 15-30 % что лишь не намного больше чем в продукте Pixar Renderman. Во всех остальных задачах Арнольд сопоставим или превосходит в производительности другие аналогичные продукты, понятно что абсолютных продуктов не бывает, но общая функциональность Арнольда без сомнения перевешивает большинство «узких» мест в других софтах. На червяке мы использовали довольно высокий уровень сабдивов, для передачи всех мелких деталей дисплейса, также дополнительно поверх накладывалась текстура бампа. Для неба был сделан риг освещения с HDRI картой уличного окружения с затертым на ней солнцем, текстура солнца была наложена на плоскость с альфа каналом, для получения детальных бликов и отражений и подсоединена к направленному источнику освещения, такой сетап довольно просто позволил выставлять освещение в разных сцена под разными углами, меняя положение солнца для совмещения освещения со съемочным материалом и в определенных местах получения более симпатичных бликов. Было решено использовать Point cloud SSS в режиме Blue_noise Pref вместо трейсового используя Texture reference geometry, такой подход требует использования большего количества памяти, но существенно быстрее трейсового благодаря более низким семплам и позволят полностью избежать мерцания при анимации даже при небольших значения АА. Также использовались довольно высокие значения Point cloud SSS factor чтобы снизить количество диффузных лучей при это получая не шумный SSS. Многие сцены считались в один проход с волюметриками и дофом, в этом огромное преимущество Арнольда. Единственное что пришлось увеличивать AA так как во всех сценах с нашим червячком были волосы с симуляцией и при motion blur необходимо было избавиться от шума при смазывании объекта.
ВОРОНЫ и АИСТЫ.
История с птицами изначально была самой сложной во всем проекте. Было множество трудностей чисто практических – Арнольд все-таки достаточно новый рендер для нас поэтому было сложно просто освоить определенные особенности этого софта. Что касается птиц, то тут добавились еще и технологические вопросы. Изначально мы не рассматривали коммерческие программные продукты по множеству причин. Во-первых, пока нет коммерческого софта достаточно пригодного для реального (повторяю реального, не для тестов(!)) производства. Очень часто бывает так – появляется какое-то программное обеспечение, все начинают его тестировать – «все великолепно! Как здорово – куча восторгов». Когда дело доходит до реальной серьезной задачи выясняется что продукт совершенно не годится. Недостаточно производительный, нет многих жизненно важных функций и т. д. Во-вторых, я изначально решил поставить такую амбициозную задачу – было очень много крупных планов с птицами (один крупный – когда у нас червячок Малькольм сидел на летящей вороне и видны нательные перья в кадре), поэтому было решено реализовать нечто похожее на то что есть в природе – то есть перья из волосков. А коммерческие продукты для этого не годились. Просто не было такой геометрии – перья. Поэтому ее нужно было создать. У меня был свой программный продукт (QScatter PRO) – старая система «Шевелюра» для Майя/Рендерман является его коммерческой реализацией. Но сама система требовала существенных доработок, прежде всего перевод под Арнольд, во-вторых необходимо было собственно «придумать» как делать перья. Идея была и простой и сложной одновременно. После существенной переработки моя система прекрасно работала с инстансированными объектами, причем позволяла не только раскладывать произвольные полигональные объекты по другой поверхности, но и деформировать их (что строго говоря не является инстансированием, так как объекты по сути становятся уникальными, неважно что изначально они создавались из одной и той же копии). Фактически придавая им нужную форму – сгиб, поворот, скручивание и т. д. Но в данном случае перья – это конструкция более сложная. Они составные.
После я добавил в него возможность деформировать мою новую геометрию стандартными майскими деформерами (еще раз восхитился людьми, которые изобрели ядро Майя – фактически создав свою геометрию, которая удовлетворяет определенным правилам, можно не заморачиваться написанием своих деформеров для нее – стандартные будут работать!). После переработал систему инстансирования в QScatter’е чтобы он стал поддерживать такую новую геометрию. Позже я сделал так чтобы МТОА тоже стала понимать featherMesh как и полигоны – как геометрию которую можно рендерить. Понятно что не было времени на оптимизацию, но даже той скорости и функциональности было достаточно чтобы получить вполне приемлемый результат.
Несмотря на то что МТОА еще в стадии бета-тестирования, она оказалась достаточно «вменяемым» продуктом. В ней отсутствуют (либо некорректно реализованы) несколько ключевых функций – к примеру в майской ноде file МТОА не поддерживает кастомные координаты — эта функция принципиальна при работе с перьями — так как при раскладывании перьев используется глобальные текстурные координаты(геометрии по которой собственно раскладываются сами перья), а для цвета перьев используется локальные(на самих перьях). Мне пришлось взять исходники МТОА (они доступны для тех, у кого есть доступ на сайт разработчиков Арнольда) и собрать свою собственную версию МТОА, в которой этот и еще несколько других багов были исправлены. Итак вернемся к нашим воронам.
После первых тестов с птицами стало ясно, что все работает, я подготовил текстуры для цвета – раскраска перьев и положил на птиц по две системы перьев – одна на голове, с меньшей плотностью волосков и более косматыми, вторая – на теле, более однородные перья. Далее уже остальное было, что называется, делом техники – выставить свет настроить шейдинг и т. д. Вороны считались достаточно быстро, их было немного и в переводе на язык волос на каждой вороне было около 2.5 млн волосков иногда по 20 сегментов на каждом. Труднее было с аистами – это сейчас моя система уже может переваривать чудовищные объемы геометрии за очень короткое время, а в момент работы над проектом у меня не было времени на оптимизацию, и при том что у нас в кадре было около 12 птиц и общий хронометраж сцен с птицами превышал 2 минуты (было три шота по тысяче кадров каждый – это шоты под начальные титры фильма), пришлось разбивать сцены на части и считать слоями. На это ушло примерно 2 полных недели рендера (только на аистов). Тем не менее результат был достаточно удовлетворительный, что окупило с лихвой все бессонные ночи за написанием кода. Если бы мы считали этот проект сейчас я думаю сцены с птицами уже считались раз в 20 быстрее, так как софт уже существенно оптимизирован и переваривает гигантские объемы (последний тест был 1 млрд. 100 млн. полигонов – поле травы, в интерактивном режиме – IPR считалось где-то 6 минут, машина 16 Гб памяти i7 процессор, без особых изысков). Меня в этом смысле Арнольд просто поразил насколько легко он «пережевывает» поистине чудовищные объемы геометрии.