Сегодня
мы поговорим о Reactor’е (он же Havok)
Для того чтобы детально
изучить эту мощную утилиту, придется потратить уйму времени,
экспериментируя с настройками сцены и наблюдая за происходящими
изменениями. Мы же на основании конкретных примеров постараемся
показать принцип ее работы.
«Общение» с плагином
начинается с того, что мы переходим в командную панель на закладку
Utilities , нажимаем кнопку More и выбираем из списка утилит
нужный нам Reactor. Для удобства к кнопкам, вынесенным на командную
панель (Command Panel) и представляющим девять основных утилит,
можно добавить десятую — отвечающую за Reactor. В будущем это
облегчит нам работу, так как не нужно будет каждый раз «добывать»
плагин из списка.
Создание сцены с помощью
Reactor’а обычно включает шесть этапов.
1. Создается сцена в 3D Studio
MAX.
2. Для каждого объекта, включенного
в сцену, в свитке Properties утилиты Reactor, устанавливаются
физические параметры.
3. Указывается, к какой группе
принадлежит тот или иной объект.
4. Из компонентов сцены формируются
конструкции.
5. Добавляются камеры и источники
света.
6. Делается анализ и
просчет.
Reactor умеет работать со
следующими группами объектов: Rigid Bodies («Твердые тела»),
Soft Bodies («Гибкие тела»), Deforming Meshes («Деформируемые
поверхности»), Rope («Веревка»), Constraints («Конструкции»),
Actions («Воздействия») и Water («Вода»). Все они находятся в
Helpers и Space Warps командной панели Create закладки Reactor. Но
не будем обременять читателя этими скучными перечислениями, перейдем
от слов к делу.
Допустим, нам надо
«уронить» некое тело. Делаем Quad Patch (четырехугольный
кусок Безье, который будет служить нам полом), а над ним на
некотором расстоянии чайник. Попробуем заставить его упасть, а после
несколько раз, подобно резиновому мячику, подпрыгнуть. Для этого
формируем следующие группы объектов: Soft Bodies Collection и Rigid
Bodies Collection. Создаем в окне проекции иконку RB-Collection и
включаем в список Quad Patch. Затем к нашему страдальцу-чайнику
применяем стандартный модификатор FFD (box) 4x4x4 и модификатор от
утилиты под названием Reactor SoftBody. В свитке Properties
указываем массу тела (mass — 1 kg), жесткость
(stiffness — 0.18), коэффициент трения (friction — 0.5) и
амортизацию тела (damping — 0.2). После этого рисуем иконку
Soft Bodies Collection и включаем в список Teapot («Заварочный
чайник»).
Теперь вернемся к
закладке Utilities и нажмем в свитке Animation&Export
кнопку Perform Simulation. Если в свитке Advanced не отключена опция
Analyze Before Simulation, программа сначала проведет анализ задачи
и, только если не обнаружит ошибок, начнет просчет. В противном
случае она выдаст сообщение, например, о том, что тело не относится
к группе RB-Collection или нечто в этом же духе.
|
В завершении
получаем то, чего и добивались, — чайник, падая, слегка
деформируется, будто он резиновый, затем подпрыгивает и вновь
падает (рис. 1). Встроенная функция предпросмотра
(Preview) в закладке Display позволит увидеть примерный
просчет в реальном времени. Если нажать на Preview in
Window («Предпросмотр в окне»), появляется окно с
логотипом Havok, внутри которого будет отрендерен первый кадр,
по виду напоминающий кадр из компьютерной
игры. | Если вверху в ниспадающем окошке Physics
выделить опцию Real Time, а в Simulation — строчку Play/Pause,
в окне будет воспроизводиться анимация. Здесь же для каждого объекта
можно указать прорисовку сетчатой оболочки, по которой плагин
просчитывает соударения (рис. 2). Вы уже, наверное, заметили,
что изменение формы падающего тела просчитывается на основе
деформации параллелепипеда, охватывающего наш чайник. Reactor
просчитывает соударения, опираясь на заданную сетчатую оболочку,
которая может принимать форму сферы, параллелепипеда (как в нашем
случае), повторять поверхность тела по заданному образцу или быть
оптимизированной (в этом случае ее вид напоминает объект в
упаковочном целлофане). Выбор одного из таких способов упрощает
вычисления для сложных моделей.
Очень хорошо продуман в
Reactor’е процесс создания воды. Путем несложных операций можно
легко сотворить реалистичную поверхность. Насколько это просто,
судите сами. Итак, делаем плоскость, которая будет играть роль воды.
Затем в разделе SpaceWarps командной панели Create выбираем
Reactor и жмем кнопку Water.
Полученный
SpaceWarp нужно связать с нашей плоскостью, для чего в Main
Toolbar выбираем Bind to SpaceWarp («Связать с
пространственной деформацией») — и вода готова.
Теперь создайте
какой-нибудь объект типа Rigid Body («Твердое тело»).
Чтобы Reactor понял, что он имеет дело именно с Rigid Body,
заносим название предмета в список Rigid Body Collection.
Осталось указать массу объекта в закладке Properties утилиты
Reactor и настроить SpaceWarp Water, чтобы вода выглядела
правдоподобно. |
| Рассмотрим настройки Water более подробно:
•
Subdivsions X и Subdivisions Y — параметры,
определяющие разрешение SpaceWarp Water, то есть чем больше их
значение, тем точнее просчитывается поверхность;
• Wave Speed
— скорость волн :-), как говорится,
no comment;
• Min Ripple и Max
Ripple — с их помощью определяется водная рябь;
• Density —
параметр для задания плотности жидкости; кто забыл или никогда не
знал физику, объясняю «чисто плотность — это чисто масса на
чисто объем» :-);
• Viscosity
— вязкость; позволяет превратить жидкость из воды в
клей;
• Landscape
— если задействована эта функция и выбрано какое-нибудь тело,
относящееся к группе Rigid Body, то волны, наталкиваясь на него,
будут отражаться.
Итак, мы создали сцену, в
которой есть вода и тело над ней. Теперь давайте в утилите Reactor
просчитаем, что произойдет с водной поверхностью после того, как
предмет в нее плюхнется :-). Нажимаем кнопку Preview in
Window и смотрим, что мы тут наваяли. Если полученный результат
далек от желаемого (а на первых порах такое случается часто),
начинаем заново и так пока не достигнем совершенства. После этого
жмите Perform Simulation и на рендер (рис. 3)!
Для того чтобы
получившаяся сцена не казалась безжизненной, ее необходимо наполнить
какими-нибудь действиями, создать Action. Reactor имеет несколько
собственных вариантов Action: Wind («Ветер»), Motor («Мотор»)
и Fracture («Излом»). Расположены они, как и другие Collection в
разделе Helpers, в списке Reactor. С первыми двумя все
понятно — сразу бросается в глаза аналогия с «родными»
SpaceWarps, имеющими такие же имена.
|
Задача
Fracture — облегчить моделирование сцены, изображающей
процесс разделения цельного объекта на отдельные составляющие.
Чтобы понять, как действует Fracture, представьте себе летящую
с девятого этажа :-) табуретку, которая, достигнув земли,
разлетается на части (рис. 4). Что ж, попробуем
воссоздать ситуацию. Сделаем табурет из пяти параллелепипедов,
четыре ножки и пятый под сидение (кстати, элементы
группировать не надо — Fracture не работает со
сгруппированными телами). Создадим плоскость (землю) и занесем
ее в Rigid Body Collection . Нарисуем в окне проекции
иконку Fracture и, указав название нашей группы, а именно
Rigid Body, включим в список элементы, из которых состоит
табуретка. | Если в списке Fracture (свиток Properties)
выделить элемент, то ниже появляется выбор из трех вариантов —
Normal , Unbreakable и Keystone. В первом случае при
некотором значении импульса элемент «отламывается». Unbreakable
(«Неразрушимый») оставит эту часть целой. Последний тип Keystone
отвечает за то, что если импульс в момент удара настолько сильный,
что разрушит деталь, то затем разломается и все тело.
Здесь же расположены
настройки, относящиеся непосредственно к импульсу соударения:
Impulse — значение импульса и Energy Loss —
величина потери энергии при ударе. В MAX’е довольно часто
встречаются параметры, соответствующие реальным физическим
величинам. На первый взгляд, это усложняет работу, потому что не
всегда «на глазок» можно определить, скажем, коэффициент трения или
же величину потери энергии при ударе. А с другой стороны, появляется
возможность точно описать физическую задачу.
Однако вернемся к сцене.
Зададим предмету вес, предположим, 8 кг (моя табуретка —
какую хочу, такую и сделал :-)!). Теперь укажем, какой способ
разрушения «применять» в нашем случае — в момент удара или
после него. Делаем предпросмотр и, наконец, просчет. Табуретка
летит, падает и разбивается.
Наконец, пару слов о
конструкциях (constraints) плагина. Они созданы для того,
чтобы сымитировать движение нескольких связанных друг с другом
объектов. Существуют несколько видов конструкций:
• Point-to-Рath
Constraint — такая конструкция заставит тело свободно
вращаться вокруг точки, движение которой будет определяться
произвольной замкнутой кривой;
•
Point-to-Point Constraint — в этом случае одно
тело будет вращаться относительно другого при условии, что они
соединены в выбранной точке;
• Point-to-Nail
Constraint — отличается от Point-to-Point тем, что
нужно указывать только один объект. При движении тело будет
находиться все время на одинаковом расстоянии от выбранной
точки. |
| Конструкции можно создавать, используя различные группы тел:
Soft Bodies Collections , Rigid Bodies Collections, Rope
Collections и так далее. Если вы добавили в сцену Constraints,
воссоздание движений дверцы шкафа на петлях (Point-to-Nail
Constraints), колебаний маятника, «трепыхания» шторы на ветру и
многого другого перестает быть проблемой.
Также при моделировании
систем тел можно применять модификаторы Attach to Rigid Body
и Soft Body, с помощью которых привязывать определенное тело к
указанной группе. В первом случае вы получите флюгер, а во
втором — прикрепленный к палке флаг.
Если вам понадобилась в
сцене обычная веревка, Reactor вам поможет. Прежде всего выберите
кривую, соответствующую форме веревки, и создайте группу Rope
Collection . Затем с помощью модификатора Reactor Rope превратим
сплайн в настоящую веревку. Если один ее конец нужно закрепить,
прежде чем применять модификатор Reactor Rope воспользуйтесь
стандартным Spline Select, предварительно выделив вершины, которые
надо закрепить.
А если нужна ткань?
Выполняем аналогичные действия, только вместо модификатора Reactor
Rope обращаемся к Reactor Cloth .
|