- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF125:Blender
Материал из Linuxformat.
- Blender Нетривиальные приемы 3D-моделирования для жаждущих большего, чем основы
Содержание |
Blender: Содвинем бокалы
Blender |
---|
Blender продвинутый |
---|
|
- Часть 3: Наша серия уроков подходит к своему логическому концу. По этому поводу можно и бокал шампанского налить, считает ее автор Андрей Прахов.
На прошлых занятиях мы с вами сервировали небольшой столик для романтического ужина. Расставлены фужеры, горят свечи, льется мягкий свет, но чего-то не хватает! Правильно: весь вечер сидеть и любоваться на пустые бокалы – это занятие не для нас. Так давайте наполним их вином!
Немного теории
Blender, как и любой другой мощный инструмент трехмерного моделирования, умеет работать с физикой жидкостей. Данная возможность появилась относительно недавно, если говорить не о времени, а о номерах версий программы. Следствием этого является слабая документированность. Пара-тройка примеров – вот и все, на что вы можете рассчитывать на официальном сайте. Но и этого достаточно, чтобы разобраться в имеющихся настройках. Другой вопрос в том, что в процессе имитации может участвовать не всякий объект, и некоторая доработка «напильником», а иногда и «танцы с бубнами» будут вам обеспечены. Но хватит о грустном: в конце концов, предназначение этой статьи и есть в «подстилании соломки» ищущим знания.
Так как эта часть урока отводится теоретическому вступлению в физику жидкостей, то забудьте на время об имеющемся проекте «Романтический ужин», а просто вчитывайтесь и иногда экспериментируйте в новой сцене.
Основополагающим краеугольным камнем физики жидкости в Blender является понятие «домен» [Domain]. Этим термином обозначается некоторая область сцены, в пределах которой будут производится необходимые расчеты. Все, что не попадает в домен, в процессе имитации участвовать не будет. Это правило распространяется и на те объекты, которые оказались в домене некоторой своей частью. Например, если наш фужер поставить на условной границе домена и «наполнить» жидкостью, то она остановится ровно по границе. В качестве домена может выступать любой Mesh-объект, но так как физика жидкостей работает только с ограничивающим параллелепипедом [bounding box], то логично использовать примитив Cube.
Еще одним обязательным компонентом является объект-источник [Fluid]. Здесь никаких ограничений на формы объекта нет: единственно, он должен быть из группы Mesh.
Рассмотрим, как взаимодействуют оба компонента. При запуске просчета объект-домен принимает форму объекта-источника и постепенно перетекает на первоначальное место своего расположения. Сложно представить? Тогда немного попрактикуемся. Создайте новый проект и переключитесь в окно просмотра Camera (0 на цифровой клавиатуре). Уже имеющийся в центре куб послужит нам в качестве домена. Отмасштабируйте его до желаемого размера. Теперь добавьте в сцену сферу и разместите ее так, чтобы она находилась внутри куба. Для удобства манипулирования переключитесь в режим Wireframe клавишей Z.
Отлично, теперь приступаем к настройке физики. Выделите Cube и нажмите уже известную вам кнопку Physics Buttons (LXF124). На сей раз нас интересует панель Fluid с единственной пока одноименной кнопочкой. Включите ее.
Появятся восемь дополнительных кнопок, позволяющих указать режим имитации для выделенного объекта. Естественно, нас интересует кнопка Domain (рис. 1).
Так как это основные настройки физики жидкости, рассмотрим их подробнее.
Первое, что бросается в глаза – это крупная кнопка с названием Bake [Выпечка]. Не думайте, что достаточно настроить физику жидкостей, нажать заветные Alt+A – и Blender резво начнет анимацию действия в сцене. В отличие от уже рассмотренных ранее частиц и физики мягких тел, просчет жидкостей необходимо выполнить заранее. Именно эта кнопка активирует так называемую «выпечку мешей». Перед ней необходимо подготовить место для кэша, указав путь в поле Path. По умолчанию Blender использует каталог /tmp.
На окончательное качество картинки влияют следующие настройки:
- Resolution Здесь поле Res позволяет выбрать необходимое разрешение для рендера, а поле Prev-Res – для окна программы. Конечно, желательно использовать несколько большее значение Res, чем предлагаемое по умолчанию. Внимание: даже незначительное увеличение выходного разрешения на какой-нибудь десяток единиц приведет к серьезной нагрузке на систему; к тому же излишне высокое разрешение негативно сказывается
на качестве имитации!
- Disp.-Qual Выбор режима качества для окна программы и рендера, соответственно.
Пока оставьте настройки домена по умолчанию.
Теперь займемся объектом-источником. Выделите сферу, откройте панель Fluid и нажмите кнопку Fluid. Опций здесь минимум, но они чрезвычайно важны для настройки течения. Группа кнопок Volume Init позволяет определить, как жидкость будет обтекать имеющийся объект в домене:
- Volume По умолчанию активна именно она. Жидкость обтекает вокруг объекта.
- Shell Если объект имеет полую форму (к примеру, чашка), включите эту кнопку.
- Both Режим, объединяющий первые два.
По умолчанию, жидкость всегда стремится вниз по координате Z. Если нужно иное направление, то измените переменные в группе Initial Velocity.
В нашем случае, оставьте все как есть. Выделите еще раз объект-домен и нажмите кнопку Bake (рис. 2).
Выбираем тип жидкости
Жидкость жидкости рознь: к примеру, масло характеризуется повышенной вязкостью. Не зная физических свойств нужной жидкости, очень сложно добиться ее качественной имитации. К счастью, разработчики программы подготовили несколько заготовок, которые можно найти, если нажать кнопочку AD (Advanced) на панели Fluid. По умолчанию Blender предлагает использовать воду (water).
Дорабатываем сцену
Как видите, работа с жидкостями не вызывает особых проблем. Но возникает вопрос, какой смысл во всей этой системе, если изначально домен может иметь только форму куба? Ответ прост: помимо рассмотренных двух компонентов, в процессе имитации могут участвовать и другие объекты с иными настройками физики. С ними мы познакомимся при доработке нашей главной сцены. Конечно, она не предполагает быть анимационной, но полученные знания, надеюсь, вам впоследствии пригодятся. В создаваемой сцене мы наполним шампанским имеющиеся два бокала. В качестве источника на этот раз используем сферу, немного сплюснутую по координате Z. Такие сферы необходимо будет расположить непосредственно в чашечках обоих бокалов. Но перед настройкой физики необходимо доработать сами модели.
Как уже говорилось ранее, механизм физики жидкостей очень чувствителен к качеству структуры объектов в домене. Особенно это касается полых моделей. В первой статье мы рассмотрели один из способов создания бокала с помощью кривых NURBS. То, что получилось в итоге, выглядит красиво, но для участия в процессе имитации не годится.
Давайте разберемся, что произошло. Выделите бокал, затем нажмите кнопку Z для перехода в режим Wireframe и обратите внимание на исказившиеся формы модели. В структуре появились пустоты, напрочь исчезло дно. Если такую модель использовать далее, то жидкость просто выльется «на пол». В то же время, объект в режиме редактирования и заливки (Solid) выглядит абсолютно нормальным. Интересно, что эта «особенность» программы не влияет на результат отрисовки.
Разгадка неоднозначного поведения Blender заключается в неправильной конвертации из NURBS в Mesh. Именно на этом этапе происходит разрыв структуры. Есть только одно средство для борьбы с этой ошибкой: использовать меньшее разрешение NURBS.
Выделите модель (формата NURBS!) и нажмите F9 для открытия панелей редактирования. В опциях закладки Curve Tools имеются два окошка: Resol U и V. Именно они отвечают за количество ребер в структуре объекта. Необходимо, пошагово уменьшая значения полей, пробовать конвертировать объект в Mesh. Дефект структуры может проявится не сразу, поэтому после конвертации попробуйте перейти в режим редактирования и обратно. В моем случае, оптимальным выбором значений стало U = 3, V = 2. Естественно, конвертацию необходимо производить только в режиме просмотра Wireframe, чтобы сразу заметить разрывы и «откатить» назад. Все остальные действия по доработке бокала остаются неизменными (LXF123).
Основное правило при работе с полыми объектами гласит: все нормали вершин должны смотреть наружу. Это является обязательным условием для правильной работы физики жидкости. По умолчанию, любой примитив, создаваемый программой, всегда имеет нормали, повернутые наружу. Но так как мы дублировали чашечку бокала для имитации толщины стенок, то нормали копии смотрят вовнутрь. В этом несложно убедиться, если заставить Blender показать на экране нормали объекта (рис. 3).
Выделите бокал и войдите в режим правки. Нажмите F9 для открытия панелей редактирования. Во вкладке Mesh Tools More нажмите кнопку Draw Vnormals, и программа прорисует нормали всех вершин объекта. Для изменения направления нормалей воспользуйтесь пунктом меню Mesh > Normals > Recalculate Outside любого окна 3D View при выделенной структуры объекта. Обязательно посмотрите, что получилось. Иногда программа «пропускает» некоторые вершины. В этом случае придется изменять направление нормалей вручную.
Вот и все, доработка бокала закончена.
Настраиваем физику
Все остальные действия лучше проводить в режиме Wireframe, для полного контроля над происходящим.
Сейчас нам нужно добавить домен, разместить объект-источник, настроить физику. Выделите бокал и с помощью функции Snap окна 3D View (Object > Snap > Cursor Selection), переместите курсор в середину объекта. Добавьте куб и сферу, как показано на рис. 4.
Выполним настройку физики за несколько шагов:
- Сфера Так как этот объект является источником, включите кнопку Fluid. Теперь его можно убрать в любой свободный слой, для исключения из результата обработки сцены (клавиша m).
- Бокал Здесь нам понадобиться функция Obstacle. Именно она позволяет объектам взаимодействовать с жидкостью в качестве препятствий. Модель бокала является полой, поэтому включите добавочную кнопку Shell.
- Куб Естественно, он является доменом. Активируйте соответствующую кнопку.
Настройте по своему усмотрению путь для кэша и смело жмите кнопку Bake (рис. 5).
Работаем с материалом
То, что у нас получилось, очень мало смахивает на вкусное шампанское. Не будем проводить аналогии с другим неаппетитным содержимым, а просто доработаем материал.
Создайте для объекта-домена новый материал с базовым цветом R = 1.000, G = 1.000, B = 0. Затем откройте панель Shaders. В качестве диффузного шейдера оставьте имеющийся по умолчанию Lambert. Увеличьте для него параметр Ref до 1.000. Отражающим шейдером будет Wardiso, дающий резкий, яркий отблеск. Установите следующие значения: Spec = 1.600, RMS = 0.077. В принципе, для этого материала нужно включить кнопку TraShadow ради качественной прорисовки тени, но это сильно скажется на времени обработки. Активируйте по желанию.
Теперь займемся преломлением и отражением. Откройте вкладку Mirror Transp и включите кнопку Ray Transp. В качестве коэффициента преломления для обычной воды при комнатной температуре подойдет значение 1.33 (IOR). Прозрачность, параметр Fresnel, установите в 2.5. Желательно несколько увеличить глубину просчета Depth. Я установил значение 5. Также нужно немного настроить зеркальность. Включите кнопку Ray Mirror и установите следующие значения: RayMir = 0.5, Fresnel = 2.0.
Если на данном этапе вы попробуете обработать сцену, то получите нечто, напоминающее подкрашенную водичку. Правильно, настоящее шампанское не может быть без пузырьков... ну разве что выдохшееся. По-хорошему, воздушные пузырьки нужно моделировать с помощью частиц. Этот способ оптимален для анимационной сцены. Но ведь у нас она статичная!
Пойдем несколько иным путем, гораздо менее затратным по времени, но по качеству не уступающим моделированию частиц, а именно: воспользуемся технологией Normal Map и процедурной текстурой.
Добавьте новую текстуру в первый слот материала. В качестве ее типа укажите процедуру Voronoi. Большую часть параметров можно оставить по умолчанию, за исключением масштаба. Нам необходимо минимально возможное разрешение, поэтому сбросьте данные в окошке Size на ноль.
Выделите объект-домен, нажмите TAB, а затем U для установки текстурных координат (контекстное меню UV Calculation > Unwrap). Это необходимо для правильного проецирования текстуры. Откройте панель Map Input и включите кнопку UV. В последнем случае мы заставили Blender использовать текстурные координаты объекта.
Настройки Normal Map доступны в панели Map To. Дважды нажмите кнопку Nor. Она должна стать желтого цвета, что сигнализирует о включении инверсионного режима наложения карты нормалей. Глубину выдавливания желательно поставить поменьше, к примеру, Nor = 1 (рис. 6).
Модель бутылки
Моделирование такого объекта не должно вызвать у вас никаких затруднений. В предыдущих статьях уже описывались два способа, поэтому выберите наиболее понравившийся. Здесь же постараемся сделать результат более реалистичным.
Допустим, что наша бутылка сделана из темно-зеленого стекла с фирменной этикеткой какой-нибудь винодельческой фирмы. Предположим, что вы уже создали модель и готовы приступить к ее «раскраске».
Добавьте новый материал со следующим основным цветом: R = 0.151, G = 0.343, B = 0.096. В панели Shaders выберите Fresnel и Wardiso. Самостоятельно добейтесь яркой поверхности материала с жестким отблеском. В настройках прозрачности Ray Transp установите IOR равным 2.00. Значение параметра Fresnel нужно подобрать так, чтобы стекло стало полупрозрачным: к примеру, попробуйте 1.5.
Теперь займемся наложением этикетки на бутылку. На прилагаемом к журналу диске уже имеется необходимая картинка в формате PNG. Если вы захотите использовать свою, то учтите два правила:
- Разрешение картинки должно быть достаточно большим.
- Изображение должно быть с альфа-каналом в местах фона. Соответственно, формат файла должен поддерживать альфа-канал (PNG, Targa, TIFF...).
Перенесите модель в пустой слой для удобства работы с ней и откройте в соседнем окне UV/Image Editor. Загрузите текстуру в свободный слот материала (тип Image). Проследите, чтобы в панели настройки картинки Map Image была включена кнопка Use Alpha. Кроме того, необходимо изменить настройки рендера окон 3D-View для отображения в них текстур. В меню Game главного окна программы выберите пункт Texture Face Materials.
Нам необходимо включить развертку UV-координат для модели. Выделите объект в 3D-окне и нажмите кнопку Tab. Отметьте всю структуру объекта (клавиша A) и нажмите U для вызова контекстного меню UV Calculation. Выберите пункт Reset. Если теперь поменять тип прорисовки окна на Textured (меню Draw Type), то Blender станет отображать загруженные текстуры.
Итак, мы создали для модели текстурные координаты. Теперь займемся собственно проецированием картинки. Войдите в режим редактирования объектов и в окне UV/Image Editor выберите из списка уже загруженный файл. Выделите на объекте те полигоны, которые необходимо «залить» этикеткой, и выберите Unwrap в меню UV Calculation. Как видите, в окне UV/Image Editor появилось это же выделение. Теперь, используя стандартные возможности манипуляции (те же самые, что и для трехмерных объектов), разверните и отмасштабируйте заливку на картинке. Возникает логичный вопрос: а что же делать с остальной неиспользуемой частью бутылки? Все просто: выделите ее, примените Unwrap и разместите эту область на свободной от этикетки картинке, т.е. на фоне (рис. 7).
Используйте фоновое изображение
Если у вас наметанный взгляд и вы в детстве с легкостью рисовали натюрморты с оригинала, то следующий текст можете смело пропустить. Всем остальным при моделировании советую использовать возможность вывода картинки в качестве фона в окнах программы. В этом случае становится проще «накидать» каркас объекта по уже имеющемуся рисунку.
Для управления фоновым изображением необходимо выбрать пункт меню View > Background Image любого окна 3D View. В открывшейся плавающей панели можно загрузить собственно файл и настроить прозрачность и масштаб. Заметьте, что фоновое изображение доступно только для стандартных режимов просмотра (Front, Side, Top, Camera). Удобно, что при масштабировании сцены в окне изменяется и размер картинки. При окончательной обработке сцены фон не учитывается.
Эта панель способна на большее, нежели просто управление статичной картинкой. К примеру, вы можете использовать в качестве фона видеофайл.
Готовимся к обработке
Для обработки такой сложной сцены с несколькими физическими имитациями нужно учитывать определенные правила. Во-первых, удалите все кэши, созданные программой. В некоторых случаях это обеспечит отсутствие ошибок. Установите счетчик кадров анимации на ноль. После окончательного просчета можно будет выбрать наиболее интересный кадр. Обработку физики следует начинать с просчета жидкостей. Как обычно, выделите домен и нажмите кнопку Bake. Только после этого можно нажать Alt+A для создания кэша частиц и физики мягких тел. Установите желаемый кадр, перейдите на панель рендера, выберите подходящий тип из заготовок – к примеру, PAL. Жмите кнопку Render и наслаждайтесь результатом (рис. 8)! LXF