- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF123:Blender
Материал из Linuxformat.
- Blender Нетривиальные приемы 3D-моделирования для жаждущих большего, чем основы
Содержание |
Blender: Ужин при свечах
Blender |
---|
Blender продвинутый |
---|
|
Часть 1: Осень – пора холодных темных вечеров, которые веселее проводить за романтическим ужином. Андрей Прахов ваяет сезонный натюрморт.
Создание реалистичных трехмерных моделей и сцен – задача сложная, затратная по времени и требующая достаточно высокого уровня владения инструментом. В прошлых выпусках LXF (86/87–91, см. ссылки) мы познакомились с редактором Blender и на основе нескольких несложных уроков овладели начальными знаниями. Поэтому в рамках данной серии статей мы не станем останавливаться на некоторых «азбучных» моментах.
На протяжении нескольких уроков мы будем создавать сцену-натюрморт под условным названием «Романтический ужин». Пара бокалов вина, свечи, бархатная скатерть – вот главные составляющие, которые нам предстоит изобразить. Для реализации этой задумки потребуются понимание работы трассировщика лучей, редактирование кривых NURBS, специальная настройка шейдеров, теней и окружения. Все это мы должны освоить благодаря данным урокам.
Заготовка для бокала
Начнем работу над сценой с создания модели бокала. Сначала нужно определиться, какой тип примитива необходим для ее реализации. Blender имеет богатый набор заготовок, которые условно можно разбить на две большие группы:
- Mesh (куб, плоскость, сфера и др.). Представляет собой геометрические фигуры, формат которых является незыблемым с точки зрения хранения данных. Вершины, ребра, многоугольники составляют некоторую построенную решетку, описываемую точными координатами в пространстве объекта.
- Кривые и поверхности (Безье, NURBS). Заготовки, основанные на использовании специальных математических формул. При редактировании объекта такого типа программа оперирует не массивом координат вершин, а просчитывает форму, опираясь на эти формулы.
В принципе, необходимую модель можно создать на основе примитива любой группы. Вот только неправильный выбор негативно скажется на времени выполнения.
Mesh-объекты позволяют редактировать любой элемент решетки по отдельности. В связи с этим достигается некоторая гибкость, но модель все же получается угловатой. Разумеется, способы создания у Mesh плавных изгибов есть, и немного скрасить переходы между многоугольниками все же возможно. Для этой цели чаще всего используется разбиение объекта на более мелкие элементы командой Subdivide или применяется инструмент Multires. Само моделирование оптимально выполнять при включенном режиме пропорционального редактирования (горячая клавиша O в режиме Edit Mode). Общее сглаживание выполняется стандартным образом – активацией кнопки Set Smooth на панели Editing (F9). Вот только работа над подобной моделью указанным способом становится более кропотливой.
Обычно использование стандартного сглаживания с помощью функции Smooth приводит к хорошим результатам. Но сделайте небольшой эксперимент. Установите цилиндр на плоскости. Настройте свет и отрисуйте сцену. Все нормально? Отлично! Теперь заставьте камеру перемещаться вдоль цилиндра так, чтобы он всегда находился в фокусе (функция Track to Constraint), и обработайте сцену как анимацию. Скорее всего, вы заметите на поверхности цилиндра артефакты, создаваемые неправильной обработкой теней. Можно немного улучшить результат, увеличив количество многоугольников объекта. Но правильнее всего использовать механизм Auto Smooth. Откройте панель Mesh (F9) и просто нажмите кнопку с одноименным названием. Принцип ее работы заключается в том, что сглаживание происходит, если угол между двумя многоугольниками меньше значения, указанного в поле Degr. После этого проблемы со светотенями исчезнут. Проверьте!
Работа с кривыми основана на изменении местоположения ключевых точек, все остальное достраивает программа. В итоге, модели созданные с их помощью, будут иметь плавные изгибы и формы. Естественно, что чаша весов склоняется в пользу группы кривых.
Для создания модели бокала можно воспользоваться умением Blender накладывать поверхности между указанными границами. В этом случае роль границ будут играть объекты типа NURBS Circle группы Surface (ADD > Surface > NURBS Circle). Наша задача состоит в том, чтобы указать форму будущего бокала набором окружностей (рис. 1).
Сделайте заготовку, руководствуясь рис. 1. Возможно, у вас возникнет вопрос: для чего нужно дублирование окружностей на ее концах? Дело в том, что крайние примитивы служат своего рода границами для создания поверхности и визуально не просматриваются. Чтобы нарисовать каркас максимально быстро, воспользуйтесь дублированием первой окружности (Shift+D) и разнесением примитивов по координате Z (клавиши G и Z).
У вас должно получиться нечто вроде указанного на рис. 1. Однако прежде чем создать поверхность, необходимо объединить примитивы в один объект. Выделите их (можно использовать рамку выделения, вызываемую клавишей B) и нажмите Ctrl+J. Завершающим штрихом станет прорисовка поверхностей. Делается это буквально двумя нажатиями клавиш: Tab для перехода в режим редактирования и F для создания поверхности. При необходимости дополнительно доработайте форму объекта. Вот и все – первый этап завершен (рис. 2).
Дорабатываем модель
Все бы хорошо, если бы не один существенный недостаток. При рассмотрении модели сверху можно увидеть, что дна-то нет! Выпуклая чашечка плавно переходит в полую ножку. Если залить такой бокал жидкостью, пусть и виртуальной, она позорно выльется наружу. А по плану у нас как раз предполагается фужер с вином. К тому же, бокалов с равномерной толщиной стекла в природе не бывает. Обычно чашечка становится значительно толще к ножке и утончается к краям. Для создания необходимого объема можно использовать фокус с дублированием элементов каркаса чашечки. Конечно, физически пространство между копиями многоугольников останется пустым, но визуально это никак не отображается.
Итак, прозвучало слово «каркас». Все последующие манипуляции мы будем проводить не с NURBS, а с обычным Mesh-объектом. Перевести объект в другой формат очень просто. Перейдите в режим объекта (Tab) и нажмите Alt+C. В появившемся меню нужно выбрать пункт Mesh.
Задача состоит в следующем. Находясь в режиме редактирования, необходимо выделить чашечку бокала так, чтобы нижний край отметки пришелся на уровень дна. Примерное положение – это стык чашечки и ножки. Лучше всего производить выделение в окне просмотра Front (клавиша 1 на добавочной цифровой клавиатуре). Теперь нажмите Shift+D и, не сдвигая мышь, щелкните левой кнопкой. Выделение автоматически переместится на копию структуры. Немного сожмите его вовнутрь до желаемой толщины при помощи масштабирования (рис. 3).
Между тем, дна у чашечки все еще нет, вдобавок сверху получился вид бокала в бокале. К счастью, все это поправимо. Сначала создадим дно. Для этого нужно отметить вершины нижнего края внутренней чашечки и объединить их в одну точку. Снимите общее выделение и нажмите Z для перехода в режим отображения Wireframe (так вы сможете увидеть все элементы объекта). Выделите край и нажмите W для вызова меню редактирования. Выберите пункт Merge. Вот так мы получили замкнутое дно (рис. 4).
Последнее, что необходимо сделать – это совместить верхние края чашки. Выделите внутренний край, поднимите его до уровня внешнего (G и Z) и отмасштабируйте так, чтобы края совпали (S). Если у вас есть желание, то вполне можно совместить вершины по принципу, описанному выше (рис. 5). Вот так, достаточно быстро у нас получился неплохой бокал. Окончательным штрихом будет служить стандартное сглаживание, которое нужно включить на панели Link and Materials (F9) кнопкой Set Smooth.
Добавим реалистичности
Теперь начинается самое интересное: объект не только приобретает нужные очертания, но и начинает играть естественными цветами. Начнем с самого простого, а именно с настройки отражающих шейдеров.
Создайте новый материал для модели и выберите базовым цветом белый. Как вы знаете (LXF109, 111, 113/114), Blender предлагает две группы шейдеров – диффузные и бликовые. Первый мы трогать не будем, а второй немного подкорректируем. Для хрусталя, а его мы и должны получить в итоге, характерен жесткий блик. Предлагаемый программой шейдер CookTorr не годится из-за своей излишней мягкости. Перейдите на панель Shaders (F5) и замените CookTorr на WardIso. Эта функция оптимальна для металлических поверхностей, а путем небольшой настройки можно добиться и хрустального блеска. Установите для шейдера следующие параметры:
- Spec = 2.00;
- RMS = 0.029.
Теперь у нас имеется достаточно яркий, жесткий отблеск поверхности. На этом настройка шейдеров завершена. Пора приступать к работе над прозрачностью и преломлением.
Все эти функции доступны на вкладке Mirror Transp окна Material Buttons. Давайте сначала познакомимся с трассировщиком лучей.
Принцип его работы достаточно прост. Представьте, что от камеры исходит луч, который путешествует по сцене и при столкновении с объектом принимает цвет в зависимости от настроек его материала. Если встреченная поверхность имеет зеркальные свойства, то происходит отражение и блуждание луча по сцене до тех пор, пока не встретится не отражающий объект. В этом случае, первый объект наследует все цвета окружающей среды.
Будем считать, с теорией покончено – пора переходить к делу. Нас интересуют только прозрачность и преломление, поэтому включите кнопку Ray Transp на панели Mirror Transp. Из всего обширного богатства функций этой панели достаточно изменить лишь две: IOR и Fresnel. В первом случае регулируется показатель преломления, а во втором – прозрачность.
Любой прозрачный материал в природе имеет свой коэффициент преломления (IOR), показывающий, во сколько раз скорость света в данной среде меньше, чем в вакууме. Так, для льда он будет равняться 1,309, для воды – от 1,333, а нужный нам хрусталь имеет значение 2,000. Подобные таблицы IOR можно найти в интернете. Советую, при необходимости, пользоваться таблицей значений, имеющейся на сайте http://blender.org. Итак, установите значение IOR равным 2.000.
Путем настроек параметров IOR и Fresnel можно добиться требуемой степени прозрачности и преломления. Но есть еще такое понятие, как матовость (органическое стекло, запотевший бокал и т. д.). Использовать его ничуть не сложнее. За уровень матовости отвечает параметр Gloss панели Mirror Transp.
Ничего не получилось? Правильно, ведь преломление мы настроили, а прозрачность еще не достаточна. За нее отвечает параметр Fresnel. По моему личному опыту, оптимальным является значение 3.
И, наконец-то, нужно настроить глубину просчета трассировщика. Любой трехмерный редактор имеет ограничение на эту величину. Понятно, что световой луч может блуждать по сцене бесконечно или почти бесконечно. А ведь задача просчета трассировки, наверное, самая тяжелая для системы. По умолчанию Blender предлагает значение 2. Но этого явно недостаточно для качественной картинки, поэтому установите для параметра Depth значение 10.
Вот теперь вы можете попробовать отрисовать картинку (рис. 6).
Последние штрихи
Результат выглядит неплохо, но явно требует доработки. Настройки света, тени, окружения помогут вытянуть картинку на более высокий уровень.
Добавьте под модель бокала плоскость и создайте для нее материал с подходящим цветом – скажем, бордовым. Если теперь попробовать обработать сцену, вы увидите практически черную тень. А как же так – ведь бокал прозрачный, и тень должна быть разнородной? Все очень просто: рендер программы не учитывает работу трассировщика лучей. Откройте панель материалов плоскости и на вкладке Shaders включите кнопку TraShadow. Также можно активировать параметр Cubic, который придаст диффузному шейдеру некоторую мягкость.
Тень после таких изменений выглядит достаточно хорошо, но слишком резкие края портят всю картинку. Выделите источник света и откройте закладку Shadow and Spot панели Lamp Buttons. Уставите значение параметра Samples в 10 и проследите, чтобы кнопка Ray Shadow была включена.
Еще один момент, требующий доработки – ужасный цвет фона по умолчанию. Лучше всего использовать небольшой градиент, так как при преломлении света в бокале появится симпатичная игра оттенков. Это также можно настроить в World Buttons. Все необходимые настройки доступны на панелях Preview и World.
Градиент фона получается путем смешивания двух составляющих: горизонта и зенита. Изменить каждый из них можно на панели World параметрами HoR (GB) и ZeR (GB), соответственно. Установите цвет зенита черным, а горизонта – R=0.460; G=0.680; B=0.919.
За режим смешивания отвечают кнопки на панели Preview:
- Blend. Создание градиента от основания до верха картинки. Местоположение и ориентация камеры не учитываются.
- PaPer. Почти как Blend, но учитывается поворот камеры. Заметьте, что дополнительно в качестве фона может быть выбрана текстура. Включение этой кнопки обеспечит корректный расчет ее координат.
- Real. Создается двойной градиентный переход по схеме Зенит+Горизонт+Зенит. Учитывается расположение и поворот камеры.
Кнопки Paper и Real могут использоваться одновременно. В этом случае получается двойной градиентный переход, как при одной нажатой кнопке Real, но при ротации камеры цвет горизонта всегда остается посередине.
В нашем случае можно активировать все три кнопки.
Наконец, поработаем с освещением. Его в сцене явно недостаточно, но наличие дополнительных источников в данном случае не обязательно. Blender умеет работать с так называемым светом окружения. Откройте панель World Buttons и на закладке Amb Occ включите кнопку Ambient Occlusion. Вот и все – любуйтесь на полученный результат (рис. 7).
Используем Multires
Если вы внимательно посмотрите на окончательный результат отрисовки сцены, то заметите угловатые переходы внутри чашечки бокала. Они вызваны тем, что разрешение Mesh-структуры недостаточно для визуализации гладкой поверхности. Исправить недостаток поможет инструмент Multires (рис. 8).
Его назначение состоит в контролируемом изменении количества элементов объекта. Это значит, что любые правки, сделанные данным инструментом, являются временными и управляются пользователем. Рассмотрим работу с ним на примере нашего бокала.
Откройте вкладку Multires на панели редактирования (F9). Нажмите кнопку Add Level. Появятся дополнительные поля, а объект визуально увеличит количество многоугольников. В принципе, если сделанные изменения вас не устраивают, можно добавить еще пару уровней. Но, внимание! Это катастрофически сказывается на время обработки сцены, ведь у нас еще рассчитывается трассировка лучей.
Для удобства использования рассмотрим три основных параметра: Level, Edges, Render. Параметр Level устанавливает режим разрешения для редактирования объекта. Таким образом, вы можете переключать объект в более низкое разрешение, подкорректировать что-то, а потом перейти обратно в высокое. Все сделанные изменения сохранятся.
Параметр Edges регулирует количество элементов для отображения в окне программы. На результате отрисовки это не сказывается, но на скорость работы влияет значительно. Параметр Render указывает уровень детализации, который будет учитываться при обработке конечного результата.
Заметьте, что использовать Multires удастся только с Mesh и определенной формой объектов. Попробуйте, к примеру, применить его к обычному кубу.