Sintel: о технологичности искусства

    Вот и прошёл 2011 год… Впереди новый год — год Дракона. Традиционно важный и успешный год, год сражений и побед. Предыдущий год прошёл в типичной обстановке патентных волнений, перестроений кодовых баз множества продуктов и постоянном развитии технологий. И всё же статья о другом. Рассказ пойдёт о девушке по имени Синтел и драконе из короткометражного фильма Sintel, выпущенного Blender Foundation уже больше года назад, но ставшего огромным стимулом в развитии 3D-редактора Blender на весь 2011 год. Безусловно, эта статья была бы хороша и год назад, но лучше поздно, чем никогда.

    Дьявол скрывается в мелочах. В рамках информатики нет такого проекта, в котором удалось бы обойтись от перехода к упрощённой модели, не соответствующей реальному миру. Пример — освещение, волосы, ткани и множество других вещей. Поэтому будет много кликабельных изображений (осторожно, трафик!). Все модели и сцены из фильма распространяются по лицензии CC-BY 3.0 и доступны в виде архивов svn проекта.

    Итак, приступим.


    Сюжет начинается со сцены битвы на территории земли дракона. Мы встречаем главную героиню на в горах, когда на неё нападает Хранитель. Усталой и замёрзшей девушке удаётся его сразить его же собственным копьём.


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



    При просмотре старых версий этого места нас ждёт сюрприз: там три охранника вместо одного.



    Вот они: слева-направо — Smith, Lao Tseu и Dark. Кроме того, планировался ещё один охранник внутри города. Четыре модели с полным риггингом и лицевыми эмоциями, но окончательный кастинг проходит только Lao Tseu.



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

    Новая сцена. Синтел просыпается от голоса хозяина юрты — шамана, который спас и приютил её.

    (изображение разрешением 4096x1744).

    Здесь чётко виден эффект подповерхностного рассеивания по практически светящимся от огня пальцам. Подповерхностное рассеивание во всех сценах является обязательным атрибутом кожи и прибавляет заметную долю реализма.

    Немного о модели Синтел. Это крайне сложная модель с большой сеткой и огромными текстурами, использовать её на Core2 + 4гб RAM практически невозможно, поэтому я опишу модель Sintel Lite (ссылка на модель). В ней около 800 000 полигонов. В момент создания модели моделировщики несколько раз меняли метод создания волос. Есть традиционный вид волос в виде полигонов с текстурой волос. Этот метод активно используется в игровой индустрии, но даже с учётом возможности анимации с помощью физики мягких тел, результат получается не очень реалистичным. Гораздо лучше получается результат в ходе использования специальных алгоритмов. Однако на то время симулятор волос находился в нестабильном состоянии. В ходе создания симулятор был стабилизирован и в итоге мы наблюдаем волосы из частиц. В полном варианте используется 25 тысяч волос (для сравнения: у среднего человека их около 100 тысяч). Траектория движения определяется для каждой сотни волос, вследствие чего наблюдаются пряди параллельно идущих волос. Физика волос в Sintel не используется, на каждой сцене Синтел причёсана вручную. А так выглядит модель Sintel Lite до и после рендера:





    Повествование Синтел возвращает нас в её родной город, в день, когда она встретила дракончика. Синтел ищет еду, держит в руках 250000-полигональный плод дуриана.



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


    На что здесь стоит обратить внимание? Правильно, на фон, размытый эффектом глубины резкости. За этим эффектом скрывается ещё одна низкополигональная модель Сюзанны.

    Крыло дракончика повреждено, симулятор жидкости по уравнению Навье-Стокса рассчитывает движение капель крови. Синтел помогает залечить рану.

    Новая сцена, показывающая уход ночи и приход рассвета.


    Новый день в городе. Дракончик Scales бегает/летает по городу, что позволяет разглядеть много мелких деталей. Во-первых, это жители. Сразу в глаза бросается Брук, главный герой Elephants Dream. Пруг пришёл из 2005 года, поэтому он лысый и даже без бровей, благодаря чему в нём всего лишь 238000 полигонов. И ещё 12 подобных случайных персонажей.



    Кому нужно солнечное освещение? Сцену с городом освещают 40 направленных источников.



    Дракончик бежит за курицей, Синтел бежит за дракончиком. На развороте Синтел рассыпает корзину с фруктами по 10000 полигонов в каждом. Город забросан высокополигональным мусором ещё более высокополигональными статуями.

    Неудивительно, что нашлись люди, которые на фоне всех случайных совпадений увидели в небе силуэт Big Buck Bunny.



    Новая сцена — храм города Иштар на горе. Вокруг неё не очень случайным образом расположены дома.



    Вот так оно выглядит без птичек и постобработки:


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

    Вот тот же храм с постобработкой:


    С технической точки зрения тут нужно сказать об эффекте Bloom, отвечающем за размывание света на ярких гранях сцены. Яркий фон «просачивается» здесь во всё: стены, персонажи и существа. Также нельзя не заметить, что один объект на картинке выше сильно напоминает логотип Блендера :).

    Модель детёныша дракона в момент анимации (до применения скульптинга) около 8 тысяч полигонов (видео модели). Это достаточно немного, так как у него нет шерсти, волос или частиц. Зато после применения 4-х уровней скульптинга получается 8178*4^4 — больше 2 миллионов микрополигонов.



    Черновой вид с шейдерами GLSL и картой нормалей вместо скульптинга:


    Не в пример больше полигонов у взрослого дракона, который появляется на той же сцене (видео модели). Если учесть четырёхуровневый скульптинг (скульптинг головы, сжатый до 6 минут), получается 5 миллионов полигонов. Ниже будет рендер лица с высоким разрешением. А так выглядит взрослый дракон в позе привязки:


    Итак, во время очередной прогулки Scales был захвачен взрослым драконом. Синтел покидает стены города, пробирается по джунглям (рендер в разрешении 4k):


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


    Идёт по пустыне (изображение снова 4k, а вот blend-файл). Эффект засвечивания от солнца (flare, нет на кадре). На момент создания фильма в Blender не было функционала Dynamic Paint, поэтому заранее нарисованные следы на песке проявляются с помощью масок. С выходом версии 2.6 такой эффект можно получить намного проще.


    Идёт по снежным просторам. Здесь лучше всего виден эффект виньетирования: затемнения изображения по краям кадра для привлечения внимания зрителя к месту действий. Также виден искусственный для 3D-графики фотооптический шум. Впрочем, эти два элемента используются во всём фильме.


    История приходит к началу, в котором на Синтел сидит в хижине шамана и рассказывает ему эту историю. Лицо Синтел крупным планом:


    В отражении то же лицо, но израненное и постаревшее:


    Выслушав рассказ, шаман указывает Синтел, где находится цель её поисков. Наконец она находит пещеру. Пещера, подобно снежной равнине выполнена методом скульптинга. У входа в пещеру — дерево, изображённое на рукоятке оружия хранителя. Это же дерево — логотип проекта Sintel.


    Шестиугольные объекты — результат эффекта Боке — симуляции диафрагмы объектива с шестью лепестками.


    Взрослый дракон поедает коровью тушу. В низкополигональной модели коровы 1230 граней. После применения пяти уровней скульптинга в модели около 1.2 миллионов граней. И всё это (как и у большинства других объектов) под тремя текстурами 4096x4096: цвет, блики и bump-карта.


    Дракон-детёныш не признаёт Синтел, после чего взрослый дракон обнаруживает и нападает на неё. Симулятор частиц и дыма во всей красе:


    Скульптинг на голове дракона в разрешении 4k:


    В ходе схватки дракон сбивает Синтел с ног, но вместо того чтобы убить её, он колеблется, а она, пользуясь моментом, поражает дракона смертельным ударом копья — и только тогда видит знакомый шрам и понимает, что её маленький Scales вырос и именно его она только что убила… Глядя на своё отражение в луже крови, она осознает, что не только дракон сильно изменился — в поисках друга прошло слишком много времени.

    Пещера начинает рушиться, и Синтел покидает её, оставляя тело дракона. Снаружи она, через какое-то время справившись с горем, сбрасывает доспехи, выбрасывает оружие и уходит прочь. Маленький и теперь одинокий детёныш дракона следует за ней…



    Здесь и заканчивается история, описываемая в сюжете. Однако эти 15 минут стали огромным толчком в развитии и мотивом к стабилизации ветки 2.5 редактора Blender. Уже сегодня можно скачать версию 2.61 с новым движком фотореалистичного рендера на GPU Cycles, системой 3d-трекинга, симулятором океана и динамическим рисованием.

    В планах у Blender Foundation ещё один короткометражный фильм под кодовым названием Mango. Что мы в нём увидим? 2012 год покажет!
    Поделиться публикацией
    Комментарии 29
      +8
      В избранное, прочитаю завтра)
        +4
        Что-то я ссылки на их DVD не увидел — вот она. Собственно, 3 DVD со всеми исходниками плюс уроки и видео о создании данной короткометражки.
          +2
          Sintel — отличный мультфильм, с удовольствием почитал статью о нем.
            +1
            Sintel добрый и великолепно сделанный мультфильм. Спасибо за статью.
              +3
              Добрый? Вы шутите?
                0
                Я, кстати, заметил, что все известные мультфильмы, сделанные в блендере — НЕ добрые. Если юмор — то грубый/чёрный, сюжеты мрачные и ни одного настоящего хэппи-энда. В результате все нафиг потёр, ни одного себе «в коллекцию» не оставил.

                Хотя графическое исполнение вполне на уровне, даже в самых ранних.
              +5
              Хороший комментарий на ютубе: «надеюсь, она не убила и сына чешуйчика».
                0
                А рендер умеет несколько разных видеокарт одного производителя? Или хотя бы ручное указание более мощной карты?
                  +3
                  Если это NVIDIA — то вы можете определить на какой карте рендерить ( не знаю на счет multi-GPU) через переменную CUDA_VISIBLE_DEVICES=card_id. Работает как в Windows, так и в Linux начиная с 260 версии драйверов.
                  +1
                  Разве CC-BY-SA? Наверное, должна быть просто CC-BY. Или именно на модели и сцены другая лицензия?
                    0
                    Моя ошибка, там действительно CC-BY 3.0. Исправил в статье.
                    +7
                    Спасибо за статью, очень приятно, что Blender так быстро «взрослеет». А вот из-за мультика очень расстроился, надо предупреждать, что грустно :(
                      0
                      А что значит «приминили скульптинг»? Отказываюсь верить, что создатели анимировали 800 000+ полигональную модель или использовали 2х миллионые трупы коров в рендерах. Скорее ведь на персонажах дисплейсмент-карты, а на ассетах карты нормалей?
                        +3
                        Для рендеринга использовались 16 четырёхядерных машин с 6 ГБ RAM и Debian и ещё 6 машин от Dell схожей конфигурации с Ubuntu (видео). На моём двухъядерном E8500 на эту корову в разрешении 1414*884 уходит ровно одна минута. В сферическом мире на такой ферме этот процесс займёт меньше двух секунд. Другое дело, что параллелизация идёт по кадрам и на практике рендеринг одного кадра всё равно занимает столько же времени, сколько на одном сервере.

                        По поводу анимации: она выполняется для низкополигональной модели. Результат скульптинга применяется программой в последний момент перед отправкой на рендер-движок. Скульптинг в Blender это и есть по сути последовательное применение нескольких дисплейсмент-карт, но не зависящих от UV-развёртки. Каждый новый уровень делит полигон на 4 части и тем самым увеличивает увеличивает количество микрополигонов в 4 раза. После пяти уровней получается 1231*4^5 = 1.2 миллионов микрополигонов.

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

                        PS: немного ошибся с расчётами в статье, уже исправил и добавил скрин чешуйчика со скульптингом.
                          0
                          >Скульптинг в Blender это и есть по сути последовательное применение нескольких дисплейсмент-карт, но не зависящих от UV-развёртки.
                          То есть это какой-то хитрый именно блендеровский формат?

                          По поводу нормалов, возможно они используются, когда самый высокий уровень сабдвов не нужен (если объект далеко от камеры, например) для экономии.
                            +1
                            Скульптинг в Blender сильно отличается от ZBrush или Sculptris. У Blender полигональный скульптинг, у остальных — clay sculpting. С одной стороны это слабая сторона Blender, поскольку этот метод не подходит для создания модели путём лепки с нуля (из сферы, например). С другой стороны, модели, созданные в ZBrush или Sculptris не подходят для анимации, поскольку не имеют чёткой топологии, а следовательно их вершины невозможно корректно привязать к скелету. Поэтому такие модели подвергаются ретопологизации (т. е. по сути вся работа сначала) и последующему созданию normal/displacement map по отношению к модели с неправильной топологией.

                            В Blender каждый новый уровень скульптинга повторяет топологию уровня выше. Смещение вершин на более подробных (глубоких) уровнях может сместить вершины на уровнях выше, но оно никогда не меняет топологию, поэтому меш продолжает нормально реагировать на растяжения от скелета.
                              0
                              Ой-ой. Абсолютно все программы для скульптинга, которые используют в основе полигоны (то есть минус, скажем, 3d-Coat), работают по одинаковому принципу: делят полигон на 4 части, соблюдая топологию. Модели, созданные в Z будут обладать ровно той топологией, которая лежит в моделе-основе: собственно если есть утверждённый дизайн модели, то большинство делает base mesh с нормальной топологией, а в Z только добавляет детали. К скелету можно привязать любую геометри, разве что геометрия с плохой топологией будет выглядеть как говна мешок.

                              Ровно и наоборот: не вижу никаких причин, почему в Blender'e нельзя сделать любую модель из сферы. Другое дело, что в программах, заточенных под скульптинг, делать это намного проще, удобнее и быстрее (видео с головой дракона это хорошо показывает опять же)

                              Мой вопрос был про «последовательное применение нескольких дисплейсов, независимо от UV». Или вы имели ввиду, что модель в Блендере может одновременно хранить несколько уровней детализации, так же как в Z? Вот это круто, если так
                                0
                                Да, конечно, можно хранить все уровни! Для вьюпорта используется уровни ближе к 0, для рендера — в зависимости от требуемого качества, обычно самый высокий уровень. Ну и при скульптинге можно всегда вернуться к менее детализированному уровню, не потеряв детали уровней выше.

                                Кстати, сам Blender считает файл с результатами скульптинга «dispacements file», что в общем правильно.
                                  0
                                  А можно в двух словах — как это готовить?

                                  «multires is not supported in sculpt mode»
                                    +1
                                    Простейший пример: возьмите плоскость (один полигон), добавьте модификатор Multires, перейдите в режим скульптинга, нажмите в модификаторе Subdivide 9 раз. Надпись «multires is not supported in sculpt mode» исчезнет, можно что-нибудь нарисовать.

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

                                    (картинка кликабельна на случай, если хабравёрстка обрежет)
                        +1
                        А все равно, много неестественных моментов:

                        Например, в шатре пол — идеально плоский, текстура на нем выглядит так, будто пережатая джипегом, пыли и грязи на полу нет, стены и столбы пересеаются с полом под идеальными углами, ткань, которая висит под потолком — пластмассовая (края не свисают вниз, и вообще, неестественно выглядит), волосы героини тоже как-то странно выглядят, как будто сблюрены, — никогда таких в реальности не видел.

                        Стены шатра идеально плоские. Кувшины и горшки — идеально чистые, будто только что изготовлены.

                        На сцене в городе зеленый пиджак (или что это?) продавца выглядит, как будто он пластмассовый, поза неестественная. Все дыни — идеально одинаковы. Текстура на досках, их которых сделан прилавок, плохая (доски — это вообще беда 3D-анимации. Такое ощущение, что американцы никогда настоящих досок не видели. Например, в Half Life 2 у досок тоже неестественная, некачественная, размазанная текстура). Стены зданий — идеально чистые (как они этого добиваются??). Улица — идеально чистая.

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

                        На картинке с джунглями — ну вообще непохоже не правду. Опять, вместо земли с растениями тут плоскость с размазанной текстрой, отдаленно напоминающей траву. Тени от стволов ложатся на идеально плоскую поверхность.

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

                        Да, конечно, критиковать проще, чем что-то сделать, но правда, неестественно же.
                          +1
                          > Такое ощущение, что американцы никогда настоящих досок не видели.
                          Мультик, правда, делали в Голландии :)

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

                          И на выходе получается довольно средняя картинка, слабый дизайн и рваное повествование (если что, это моё скромное мнение). Хотя, на мой взгляд, если бы авторы взяли чуть менее пафосный сюжет со скучной подачей (привет, le royaume), больше бы подумали над стилизацией картинки в угоду риалистичности (охайо, paths of hate) и дизайном (хелло, fur) даже бы желания придираться к пластмассовым пиджакам и идеально чистым горшкам не было. (это так, рассуждения о судьбах родины, извините)
                            0
                            >> как Блендер в пайплайн встраивается не знаю
                            Очень плохо. Только как тулза для моделинга. На мой взгляд их главная беда — как раз ориентированность на то, что всё надо делать в блене — от моделинга до композа.
                            >>И на выходе получается довольно средняя картинка, слабый дизайн
                            Полностью соглашусь =)
                            0
                            У меня есть чувство, что это вынужденная мера. Иначе просто блендеровский рендер не потянул бы всё это посчитать
                            0
                            Спасибо за статью! А то мне всё лень было making of почитать )

                            238000 полигонов на эпизодического перса в углу кадра, 10000 на фрукт в корзине.
                            Отсюда вопрос к знающим блендер.
                            В блендере сабдивы есть? И есть ли возможность конвертить полигоны в сабдивы на этапе рендера?
                              0
                              Мне кажется это именно то, о чём Lockal рассказывал веткой выше: меш может хранить несколько состояний (multires, как в zbrush), и для модели можно выставить какой уровень сабдива будет во вьюпорте, какой в рендере. С одной стороны довольно логично, с другой — удобно только если всё делаешь в Блендере.
                                0
                                Ну да, вроде оно. Но я думал будет что-нить наподобие render polygon as subdivision в мантре и рендермане.
                              0
                              Давно и долго в 3д, всегда когда читаю подобное или смотрю видосы, тут же качаю блендер, открываю, иии… чёрт возьми он — странный! его сложно понять в нем многое сделано иначе чем в пакетах к которым я привык (lightwave, maya, modo). В вышеперечисленных пакетах очень многое пропитано общим духом, и все можно найти и сделать, но бендер, ах блэндер…
                                0
                                Та же фигня =) Я вот его периодически запускаю, посмотрю, поверчу, потом плюну и лезу обратно в привычные houdini, maya и nuke

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

                              Самое читаемое