Многих матерых 3DS Max-моделлеров наверняка интересовал или интересует вопрос имитации сложных физических явлений при помощи «реактора». Одни пытаются «смоделировать» картину падения авиалайнера, вторые забавляются c расчетом динамики простых геометрических тел — падение мяча на землю, перемещение конструкций по наклонным плоскостям и т.д. Ну и, наконец, третьи, с головой погрузившись в 3DS Max, пытаются разобраться с загадочным «реактором» — понять предназначение данного инструмента, а также изучить азы просчета динамики в 3D-сценах. Однако в связи с отсутствием полноценной документации на русском (с английским дружат далеко не все) многие «максисты» забрасывают изучение столь интересной и крайне неоднозначной темы.
Данная статья была написана специально для того, чтобы вы могли повысить свой уровень владения 3DS Max — составить целостное представление о динамике тел в «Максе» и научиться работать с «реактором» на конкретных примерах.
Азы
Прежде чем приступить к имитации каких-либо физических взаимодействий между объектами сцены с помощью модуля Reactor, давайте попробуем составить полноценное определение «реактора». Наш авторский вариант. Reactor — это такой незаменимый инструмент, предназначенный исключительно для просчета динамики в сценах и моделирования сложных физических задач. Т.е. с помощью «реактора» можно сделать небольшое интерактивное видео, наглядно иллюстрирующее крушение лайнера, автомобильную катастрофу, падение какого-либо строения или, скажем, течение жидкости.
От теории — к практике. Давайте попробуем обыграть сценку падения одного геометрического тела (например, сферы) на поверхность другого. Первым делом необходимо создать поверхность, на которую будет падать некоторый объект. Для этого выполните команду Create/Standard Primitives/Box и в свитке Keyboard Entry поля инструментов установите параметрам Length (длина), Width (ширина) и Height (высота) значения 300, 300 и -10 соответственно (прим. — при необходимости вы можете задать и другие значения перечисленным атрибутам, ответственным за размеры объекта). После этого щелкните по кнопке Create для завершения формирования примитива.
Теперь добавим на сцену сферу, которая и будет являться телом падения. Выберите пункт меню Create/Standard Primitives/Sphere и в поле Keyboard Entry задайте атрибуту Radius (радиус сферы) значение равное 20.
Итак, заготовка создана. Самое время присвоить определенные физические свойства сфере (телу падения) и боксу (поверхности, на которую будет падать сфера). Начнем, пожалуй, со второго объекта — коробки. В поле инструментов перейдите во вкладку Create/Helpers, а затем выберите из раскрывающегося списка строку reactor. В свитке Object Type щелкните по кнопке RB Collection (коллекция твердых тел) и создайте объект на одном из видов. Далее в поле объектов загляните в свиток RB Collection Properties и щелкните левой кнопкой мышки сначала по кнопке Pick, а затем — по созданному ранее боксу или коробке на сцене. Если вы все сделаете правильно, то увидите, что в списке Rigid Bodies поля RB Collection Properties появится новая запись вида Box01. Описанной цепочкой действий мы указали на то, что бокс является твердым телом — неким стационарным объектом типа земли.
Далее, чтобы передать свойство «мягкости», подвижности второму объекту сцены — сфере, выполните следующие действия. Первым делом выделите сферу, перейдите во вкладку Modify поля объектов и примените к примитиву модификатор reactor SoftBody из списка Modifier List.
Затем по аналогии с созданием объекта типа RB Collection поместите на сцену элемент SB Collection (коллекция мягких тел). Наконец, загляните в свиток SB Collection Properties в поле объектов, нажмите кнопку Pick и щелкните левой кнопкой мышки по сфере в одном из проекционных окон.
С формальностями покончено, осталось лишь запустить «трехмерный реактор» и посмотреть, что же у нас вышло на данный момент. В поле инструментов загляните во вкладку Utilities (кнопочка с изображением молотка) и в свитке Utilities кликните по кнопке Reactor. Затем раскройте свиток Preview&Animation и щелкните по кнопке Create Animation для просчета анимации падения сферы на поверхность (бокс). Просмотрев созданную анимацию, нетрудно заметить, что сфера совершает свободное падение по великому ньютоновскому закону, но в силу каких-то непредвиденных обстоятельств так и не соприкасается с нашей коробкой — зависает в воздухе неподалеку от стационарной поверхности. Только не надо вот так сразу биться головой об стену, пытаться выпрыгнуть из окна (даже, если это первый этаж) или выкинуть из него свою персоналку. Отставить панику. Что? Кто-то решил устранить проблему переустановкой «Макса»? Бросьте, найти выход из сложившейся ситуации вовсе не сложно. Просто постарайтесь придерживаться следующего алгоритма. Выделите сферу на одном из видов и перейдите в список Properties поля объектов. Вашему взору откроется множество параметров, наиболее значимые из которых — Mass (масса тела), Stiffness (упругость), Damping и, наконец, Friction (трение). Задайте параметрам Mass, Stiffness, Damping и Friction значения 5, 4, 0 и 0 соответственно. При желании вы можете поэкспериментировать с настройкой данных атрибутов. Так, скажем, интересного результата можно добиться, выкрутив значения параметров Damping и Friction на максимум (то есть на 1) — данное действие приведет к активации сил трения, а следовательно, к затуханию колебаний (высоты подпрыгивания тела) сферы по вертикали.
Далее в очередной раз загляните во вкладку Utilities поля инструментов и в свитке Utilities кликните по кнопке Reactor. После этого в поле Preview&Animation кликните по кнопке Preview in Window. В открывшемся окне нажмите клавишу P на клавиатуре, чтобы проиграть просчитанную «реактором» анимацию падения сферы на поверхность бокса.
Что? Шар падает на коробку, но не подпрыгивает вверх? Это досадное недоразумение легко и просто устранить. Для этого в поле параметров реактора необходимо перейти в свиток World и свести к минимуму, например к 0,2, значение атрибута Col. Tolerance.
Развал сараев
Нередко при демонстрации столкновения объектов требуется показать, как один элемент на очень большой скорости соприкасается с поверхностью другого (примеры таких систем: авиалайнер и здание, автомобиль и стена, кувшин и пол) и принимает какие-то деформации — слегка изменяет свою форму или вовсе разлетается на множество мелких фрагментов. Решить поставленную задачу можно ровно двумя способами — создав сложную покадровую анимацию или же воспользовавшись физическим модулем Reactor.
Первый вариант реализации отнимает довольно много времени и сил: ведь здесь все нужно просчитывать вручную на протяжении не одного часа. Поэтому мы расскажем, как показать разрушение объектов при соприкосновении с помощью «реактора» на примере падения бокса на поверхность другого геометрического тела и дальнейшего разрушения коробки.
Итак, приступим. Добавьте на сцену коробку или так называемый бокс (пункт меню Create/Standard Primitives/Box). После этого кликните по созданному примитиву правой клавишей мышки и в выпадающем меню выберите пункт Convert to editable poly, чтобы сконвертировать элемент в редактируемый полигональный объект. Далее мысленно прикиньте, на сколько частей будет разбита коробка, и при помощи Cut из списка Edit Geometry в поле объектов выполните распилку каркаса на задуманное число фрагментов.
Активируйте режим редактирования полигонов (клавиша 4 на клавиатуре), выделите произвольную часть куба и щелкните по кнопке Detach в свитке Edit Geometry на панели в правой части редактора. Внимание, внимание! Обязательно убедитесь в том, что в открывшемся окне в качестве способа отсоединения элемента не выбран ни один из следующих — Detach to Element и Detach as Clone.
Выбранный фрагмент будет отсоединен от основной конструкции. Если вы попробуете переместить обособленную часть бокса, то увидите, что внутри коробки образовалась пустота. Для устранения дефекта необходимо создать ряд внутренних полигонов. Первым делом кликните по неиспользуемой части бокса правой кнопкой мышки и в контекстном меню выберите пункт Hide Unselected. Вы увидите, что выбранный фрагмент будет скрыт или спрятан. Затем снова перейдите в режим работы с полигонами (клавиша 4) и щелкните по кнопке Create в свитке Edit Geometry. Далее на одном из видов выполните серию кликов по вершинам бокса (прим. — при этом учтите, что по которой вершине вы щелкнули в начале, необходимо кликнуть и в конце). Дельная рекомендация — при создании новых полигонов старайтесь не выбирать более 3-4 вершин. По аналогии создайте внутренние полигоны для остальных частей коробки.
Итак, тело падения есть. Осталось лишь создать геометрическое тело, на которое будет падать первый объект — бокс. Выберите пункт меню Create/Standard Primitives/Plane, установите произвольные размеры плоскости и щелкните по кнопке Create для завершения формирования примитива.
Основная работа выполнена — осталось лишь присвоить объектам сцены определенные физические свойства. В поле инструментов перейдите во вкладку Create/Helpers, а затем выберите из раскрывающегося списка строку reactor. В свитке Object Type щелкните по кнопке RB Collection (коллекция твердых тел) и создайте объект в одном из окон проекций. Далее в поле объектов загляните в свиток RB Collection Properties и щелкните левой кнопкой мышки сначала по кнопке Pick, а затем — по коробке и плоскости на сцене.
Аналогичным образом поместите на сцену объект типа Fracture и выполните привязку к нему объектов, составляющих коробку, т.к. именно бокс должен при падении разлететься вдребезги по нашему коварному замыслу.
Заключительный этап — настройка параметров «реактора». Перейдите во вкладку Utilities на панели в правой части 3DS Max (кнопочка с изображением молотка) и в свитке Utilities кликните по кнопке Reactor. Выделите плоскость (Plane) и в свитке Properties реактора поставьте галку напротив пункта Use Mesh. Затем поочередно выделите каждую часть коробки и установите для нее произвольное значение параметра Mass (масса). Напомним, что данный атрибут определяет скорость падения тела.
Затем раскройте свиток Preview&Animation и щелкните по кнопке Create Animation для просчета и просмотра анимации падения куба на плоскость. Если вы все сделали правильно, то увидите, что при соприкосновении с поверхностью плоскости бокс развалится на несколько составных частей, каждая из которых самостоятельно продолжит движение.
|