Blender – структура проекта для Big Buck Bunny
Статья из журнала Blender-Empire №8
Автор: Зарыпов Владимир aka krre
Предисловие
В поисках нового материала для очередного номера журнала мы решили создать постоянную рубрику, в которой бы размещались статьи одной и той же тематики, но разбросанные на несколько номеров. Чтобы материала для такой рубрики хватило на несколько месяцев, её тема по идее должна быть очень обширной. А нет ничего более обширного и неисчерпаемого для обсуждения, чем создание 3D-мультфильмов профессионального качества. Вторым по сложности и широте охвата и идёт, наверное, создание игр, но эту тему мы пока пропустим.
Так вот. Мы ни в коем случае не задаёмся целью научить читателя делать мультфильмы от А до Я. Нет. Во-первых, для этого уже есть хорошая книга небезызвестного в Blender-сообществе Roland-а Hess-а «Animating with Blender. How to Create Short Animations from Start to Finish». Она, правда, ещё не переведена на русский язык, но хотя бы с переводчиком в руках из неё можно извлечь много полезного. Во-вторых, чтобы учить других делать мультфильмы профессионального качества, сперва нужно самим хотя бы, как минимум, сделать два-три подобных мультфильма, чем мы, к сожалению, похвастаться не можем. Поэтому мы не будем обсуждать здесь теорию о том, как создаются мультфильмы от А до Я, а займёмся изучением «внутренностей» таких мультфильмов, чтобы понять ход мыслей профессионалов и разобраться, почему они всё сделали так, а не иначе.
У Blender-сообщества есть одно прекрасное преимущество: мы имеем возможность изучать исходные файлы к законченным короткометражным мультфильмам «Elephants Dream» (2007 г.) и «Big Buck Bunny» (2008 г.), созданных в рамках «The Orange Open Movie Project» и «The Peach Open Movie Project» соответственно. Эти файлы выложены в свободном доступе в интернете, и каждый желающий может их скачать.


www.elephantsdream.org
www.bigbuckbunny.org
Мы прекрасно понимаем, что Blender-сообщество разделилось на две категории людей: на тех, кому больше нравится мультфильм «Elephants Dream» и тех, кто фанатеет от «Big Buck Bunny». Первые, как правило, являются сторонниками реализма и фотореализма, монстроподобных и человекоподобных персонажей. А вторые больше тяготеют к мультяшной стилизации и упрощению. Так или иначе, но как бы ни было обидно первой категории людей, а изучать мы будем файлы к мультфильму «Big Buck Bunny». Во-первых, потому, что они меньше по объёму (суммарно 1 гигабайт против 7 гигабайт в «Elephants Dream»), в связи с чем их проще скачать из интернета. Во-вторых, они не отягощены огромного размера текстурами и быстро загружаются в память компьютера. И, в-третьих, поскольку это был уже второй проект у Blender Foundation, то он основывается на большем опыте и использует возможности более современных версий Blender.
И последнее. Данный цикл статьей будет больше ориентирован не на начинающих пользователей Blender, а на «продолжающих», и поэтому в них не будут описываться очевидные вещи вроде того, как пользоваться Blender и где искать тот или иной инструмент. Для этого придётся обратиться либо к документации, либо к соответствующей литературе. Например, прочитать книгу группы авторов под руководством всё того же Roland-а Hess-а «Essensial Blender».
Часть 1. Структура проекта.
Всякий раз, когда мы начинает что-то создавать в Blender, мы сохраняем свои гениальные потуги в файл. Если наша работа осложнена присутствием текстур, либо ещё каких-то дополнительных файлов, то мы создаём на компьютере отдельную папку и сбрасываем в неё рабочий .blend-файл со всем, что к нему прилагается. Как правило, одной папки нам хватает надолго, но только до тех пор, пока мы не задумаем сделать что-то очень большое и сложное — например, мультфильм уровня «Elephants Dream» или «Big Buck Bunny». И как только нам приходит в голову эта сумасшедшая мысль, то сразу становится понятно, что одним только файлом с расширением .blend мы не отделаемся. Кроме того, что самих .blend-файлов будет, как минимум, десяток, не считая промежуточных версий, появятся ещё файлы с текстурами (что само собой разумеется), со сценарием, скетчами, референсами, раскадровками, аниматиками, тестовыми рендерами, финальными рендерами, python-скриптами и звуком. Конечно же, никому и в голову не придёт держать всё это в одной большой куче. И чтобы всё это добро как следует распределить, придётся сначала составить структуру проекта, а потом создать для него дерево папок.
В отличие от программ, вроде Autodesk Maya или Autodesk XSI, Blender не создаёт автоматически дерево папок для проекта, и поэтому мы вольны сами решать, как это дерево должно выглядеть. Увы, изучая файлы к «Big Buck Bunny», мы не сможем увидеть в них структуру рабочего проекта — мы увидим только структуру законченного проекта. В ней уже нет папок для сценария, раскадровок и рендеров. И чтобы хоть как-то возместить этот пробел, прежде чем двигаться дальше, обратимся сперва к опыту бывалых людей — а это снова будет Roland Hess.
В своей книге «Animating with Blender. How to Create Short Animations from Start to Finish» он предлагает следующую структуру проекта:

Разберём, что здесь для чего нужно.
export – папка для видеофайлов с финальной или тестовой анимацией.
models – модели для всего, что появится в мультфильме — от персонажей до реквизита. Если и того, и другого много, то Roland рекомендует дополнительные подпапки для этих категорий. Позже мы увидим, как это реализовано в файлах к «Big Buck Bunny».
renders – финальные и тестовые рендеры. Причём, для каждого шота создаётся отдельная подпапка.
scenes – .blend-файлы с анимацией. Для каждого шота — отдельный файл.
script – папка для сценария. Особенно полезна тем, кто любит, чтобы он был. :)
sets – .blend-файлы, содержащие в себе все модели, составляющие место действия, то есть комната со всем, что в ней есть, луг или поляна в лесу с травой и деревьями. В таких файлах, как правило, нет никаких своих объектов — в них содержатся только ссылки на библиотеки с моделями.
sound – не буду переводить, догадайтесь сами. :)
storyboards – раскадровка. Опять же для тех, кто считает очень важным её создание.
storyreel – текущее состояние всего мультфильма, синхронизированного со звуком. В начале работы это всего лишь озвученная раскадровка, затем её сменит озвученный аниматик, а позже части аниматика будут постепенно заменяться отрендеренными фрагментами будущего мультфильма.
tests – тестовые .blend-файлы для проведения различных экспериментов и испробывания новых или старых фич в Blender.
textures – не хотелось бы вас разочаровывать, но это папка для текстур. :)
Итак, мы получили ориентир и теперь можем либо взять эту структуру себе на вооружение полностью, либо частично, либо вообще целиком отвергнуть. Посмотрим же теперь, как выглядит дерево законченного проекта в «Big Buck Bunny»:

Здесь всё немного не так, как предлагает Roland. Первое, что бросается в глаза, — отсутствует напрочь папка models. Вместо неё есть отдельные папки с моделями, которые лежат прямо в корне проекта. Это chars – персонажи, envs – окружение, mattes – задние фоны (как рисованные, так и .blend-файлы, создающие атмосферу с холмами), props – реквизит и sets – сборочные файлы для мест действий.
Следующее, что бросается в глаза, — в каждой из этих папок есть подпапка textures, куда сбрасываются текстуры конкретного типа. То есть те, что относятся к персонажам, — будут в папке с персонажем; те, что приготовлены для реквизита — в папке с реквизитом и т. д. В общем-то говоря, подход удобный, но всё же для рабочего проекта не мешало бы скинуть папки chars, envs, mattes и props в отдельную папку models, как рекомендует Roland, иначе наше корневое дерево будет слишком длинным.
Кстати, хотелось бы ещё заметить об одном тонком различии между envs и props, потому что, если взглянуть в .blend-файлы в этих папках, то на первый взгляд может показаться, что в них находятся модели одного типа, и не совсем ясно, чем они различаются. Так вот, envs и props (окружение и реквизит) — это с точки зрения моделлера одно и то же. И если бы мы создавали не анимацию, а большую модель для рендеринга одной картинки, то не стали бы их разделять. Различие между ними возникает тогда, когда с моделями начинает взаимодействовать персонаж, либо эти модели каким-то образом анимируются. Тогда всё, что остаётся неподвижным в кадре — это окружение, а всё, что анимируется и берётся в руки персонажем — реквизит.
Ещё одно фундаментальное различие между окружением и реквизитом заключается в том, что реквизит находится в сцене, как правило, в единственном экземпляре, а окружение размножается по всей сцене. То есть можно сделать одну модель камня, которая потом будет размножена на кучу разбросанных по сцене камней, и сделать другую модель для того, чтобы её брал в руки персонаж и убивал ею бабочку, или же он сам обрушивался на шиншилу. Тогда размноженные камни будут считаться окружением, и его оригинальная модель пойдёт в папку envs, а камень в качестве орудия убийства обзовётся реквизитом и покладётся в папку props.

Окружение

Реквизит
Папка scripts в «Big Buck Bunny» и папка script в структуре по версии Roland Hess – это также не одно и то же. Если у Roland-а в ней хранится файл со сценарием, то в «Big Buck Bunny» – скрипты на языке Python. Вот так. В английском языке для этого используется одно и то же слово-синоним, и сценарии к фильмам часто называют скриптами. Ну, а вы, если не будете использовать скрипты на Python или не станете писать сценарий к мультфильму, то можете у себя эту папку так и оставить с таким названием. А если и то, и другое — да, тогда придётся привлекать на помощь фантазию и изобретать различающиеся слова. :)
Также в папке chars есть одна загадочная подпапка pyconstraints. Это тоже скрипты на Python, только предназначенные для управления персонажами с помощью констрейнов. Честно говоря, трудно предположить, для чего они понадобились, но, учитывая, что создание сложного мультфильма профессионального качества редко обходится без привлечения программистов для решения всяких нетривиальных задач, то, по-видимому, это один из таких случаев, когда без программистов какую-то проблему решить не удалась.
Последнее, что нам осталось разобрать — это папка scenes. Здесь хранятся файлы с анимацией. Мультфильм разбит на сцены — их 13 штук, и для каждой сцены выделена отдельная папка, а в каждой папке для каждого шота выделен отдельный файл.
Шот (по англ. shot) — это отрезок видеозаписи от включения камеры до выключения. Если камера непрерывно что-то показывает 2 сек, то это будет двухсекундный шот, а если три часа, тогда трёхчасовой шот. Правда, в мультфильмах и кино редко бывают шоты длиной больше пяти минут. По-нашему они называются кадром (так же как и кадр для единичного снимка), но в компьютерную графику просочился термин «шот» и быстро закрепился как более удобный и не вызывающий путаницу с кадром.
Вообще говоря, не обязательно создавать отдельный файл для каждого шота. Можно создать в одной сцене несколько камер, проанимировать всё, что движется, переключаясь то на одну камеру, то на другую, и потом за один проход всё отрендерить. Но, тем не менее, все, кто сталкивался с созданием мультфильмов, настоятельно рекомендуют разбивать сцену на шоты. Отчасти это связано с тем, что разные шоты по разному композятся, и поэтому слишком сложно будет работать с Node Editor. Другая причина — более простой рендеринг, особенно, если файлы будут сдаваться на render-farm. Ну, и по части анимации одношотовые файлы становятся легче, быстрее загружаются, занимают меньше памяти, не замедляют работы и не «валят» Blender в критических ситуациях.
Например, если заглянуть в папку 12_peach, то мы увидим следующее:

В этой сцене в общей сложности 21 шот. Эпизод начинается с того, что летающая белка Фрэнк прыгает на ветку с персиком и заканчивается тем, как кролик Банни хватает его за горло.
Файлы здесь по большей части небольшого размера, иногда даже по 130-500 КБ, что достигается благодаря системе линкования. Файлы с шотами содержат в себе, основном, только ссылки на другие файлы с моделями, и основная находящаяся в них информация — это данные об анимации подключенных к ней объектов.
Нельзя также не заметить двух файлов с удивительными именами — 08_11_13.blend и 09_10.blend, к каждому из которых прилагается соответственно файл 08_11_13.txt и 09_10.txt. Это тот случай, когда один длинный шот разрезается монтажом на части и затем перебивкой показывается вперемешку с другими шотами. Для этого случая аниматоры «Big Buck Bunny» не стали создавать отдельные файлы, а разрешили шоту отрендериться за один раз, только указали в текстовых файлах диапазоны кадров, которые относятся к раздельным подшотам.
Файл 18_20.blend — это ещё один интересный случай. Почему-то аниматоры сделали два варианта падения Фрэнка на колья. В первом случае он состоит из двух шотов: 18.blend, в котором Фрэнк начинает падать и раскрывает свой кожаный парус, и 20.blend, котором он в конце падения хватается за ветку и начинает отползать по ней вверх. Вероятно, был ещё файл 19.blend, однако от него уже ничего не осталось, потому что потом, когда вся сцена уже была закончена, кому-то что-то, по-видимому, не понравилось (то ли аниматору, то ли режиссёру), и весь эпизод был переделан. Теперь все три шота были объединены в один непрерывный, в котором Фрэнк начинает падать, хватается за ветку и заползает вверх. Этот вариант и пошёл в финальный мультфильм. Таким образом, получилось, что в файле 18_20.blend содержатся три подшота, которые в конечном итоге по воле судьбы не стали перебиваться в монтаже никакими другими шотами.

В подпапке dvd содержатся .blend-файлы для создания оболочки к DVD с финальным мультфильмом, а в подпапке elements — один .blend-файл с анимированным выводом на экран всей библиотеки моделей. Вероятно, это предназначено для какой-то презентации.
Итак, если подытожить всё выше рассмотренное, то структура законченного проекта «Big Buck Bunny» состоит из следующего дерева папок:
chars – здесь собраны модели всех персонажей мультфильма — кролика Bunny, фиолетовой птицы и тройки грызунов.
envs – модели с библиотеками окружения — трава, цветы, камни, листья, деревья и т. д.
mattes – задние фоны — в их числе как просто рисунки облаков и холмов на горизонте, так и .blend-файлы, создающие панорамные виды.
props – реквизит — модели единичных объектов, которые будут анимироваться то ли при взаимодействии с персонажами, то ли самостоятельно, вроде падающей на шиншилу каменной глыбы.
scenes – пошотовые файлы с анимацией.
script – программы на языке Python.
sets – сборочные файлы с местами действий.
Файлы со всех папок собраны в одну большую иерархию, на вершине которой находятся анимационные файлы шотов из папки scenes. Всё остальное подключаются к ним через систему линкования. А вот как это делается, будет рассказано в следующий раз. :)
Для любителей же монстроподобных персонажей, суперфотореализма и мультфильма «Elephants Dream» предлагается пока домашнее задание: разобраться со структурой папок к проекту «Elephants Dream». :)

Рекомендую

К сожалению, отзывы закрыты.