3D Studio MAX: первые шаги. Урок 19. Динамика в сцене
Имитация динамики твердых и мягких тел
Одной из сложностей моделирования и анимации является необходимость учитывать обычные законы физики: трение, притяжение и т.д., без соблюдения которых реалистичности не добиться. Однако это совсем непросто — например, если требуется смоделировать свободно свисающую под собственной тяжестью ткань, придется долго и кропотливо работать на уровне вершин, распределяя их так, чтобы получающиеся складки выглядели реалистично. Еще сложнее в случае анимации: так, любое упругое тело (например, обычный резиновый мяч) при падении подпрыгивает, причем многократно и на разную высоту. Следовательно, получение анимации подобного падения методом ключевых кадров потребует создания нескольких ключей анимации, что придется сделать вручную, на глазок оценив временные интервалы между ключевыми кадрами и расстояния, на которые должен подниматься объект при подпрыгивании. Очевидно, что подобных движущихся объектов в любой сцене множество, да и движение их гораздо сложнее. Более того, помимо них имеется немало второстепенных объектов — создающих фон и на первый взгляд статичных, которые, тем не менее, для реалистичности также должны изменяться во времени, например провода на ветру чуть колышутся, свисающая с чердака веревочная лестница слегка колеблется, по водной поверхности бежит слабая рябь и т.п. Анимировать все их вручную — задача непосильная, тем более что нужно не просто анимировать, а анимировать с учетом реальных физических свойств данных объектов.
Для решения таких задач существует немало специализированного ПО, обеспечивающего просчет поведения объектов в реальных условиях. В 3D Studio MAX для этой цели применяется специальный модуль Reactor, позволяющий моделировать динамику твердых и мягких тел, тканей, жидкостей, гибких объектов и сложных составных конструкций. При просчете динамики учитываются такие физические свойства объектов, как масса, гибкость, вязкость, коэффициент трения, а также атмосферные явления (гравитация, ветер и другие назначенные силы), а моделирование движений объектов происходит в режиме реального времени, что позволяет контролировать ситуацию и сразу же корректировать настройки динамических параметров. Подобный просчет производится сравнительно быстро и при минимальных усилиях со стороны пользователя, так как отпадает необходимость вручную оживлять отдельные взаимодействующие между собой объекты сцены, а все ключевые кадры анимации создаются автоматически.
Модуль Reactor включает множество инструментов, которые можно разбить на три большие группы: коллекции (Collection), воздействия (Actions) и конструкции (Constraints). Коллекции содержат инструменты для моделирования динамики твердых (RigidBody) и мягких тел (SoftBody), тканей (Cloth), деформируемых сеток (DeformingMesh) и гибких тел (Rope). В списке воздействий представлены такие силовые воздействия, как Wind (Ветер), Motor (Мотор), Fracture (Излом), водная рябь (Water) и т.п. В группе конструкций объединены инструменты для работы со сложными составными объектами (то есть каким-то образом связанными между собой) — с их помощью можно просчитать, например, динамику открывания двери (которая висит на дверных петлях), вращения колес автомобиля (связанных с его кузовом) и т.д.
Все названные инструменты (за исключением инструмента Water, который расположен на закладке Reactor категории SpaceWarps) находятся в категории Helpers на закладке Reactor (рис. 1). Кроме того, все без исключения инструменты содержатся на панели инструментов Reactor, находящейся в левой части окна программы (рис. 2).
Рис. 1. Инструменты на закладке Reactor (категория Helpers)
Рис. 2. Панель инструментов Reactor
Настройка динамики при помощи модуля Reactor, как правило, предполагает выполнение следующих действий:
- назначение таким типам объектов, как ткани, мягкие и гибкие тела, соответствующих Reactor-модификаторов с последующей настройкой их параметров;
- создание иконок нужных Reactor-коллекций и включение их в состав объектов сцены для того, чтобы они участвовали в расчетах динамики;
- установку в свитке Properties (Свойства) модуля Reactor физических параметров для каждого из объектов сцены;
- анализ и просчет динамики.
Имитация динамики твердых и мягких тел
Твердые тела (RigidBody) имеют некоторую массу и трение, подвержены воздействию разнообразных сил (гравитации, ветра и т.д.) и при столкновении могут разрушаться. Мягкие тела (SoftBody) также обладают массой и трением, подвергаются силовым воздействиям и при столкновениях и иных внешних воздействиях деформируются. Для того чтобы объекты сцены стали восприниматься в расчетах динамики как твердые тела, необходимо создать коллекцию твердых тел RigidBodyCollection (сокращенно — RBCollection) и включить в нее объекты. С мягкими телами несколько сложнее — для учета их в динамических расчетах требуется назначить телам модификатор reactorSoftBody, создать коллекцию мягких тел SoftBodyCollection (сокращенно — SBCollection) и включить в нее объекты с модификаторами. Обратите внимание, что назначение модификатора reactorSoftBody предшествует включению объекта в коллекцию SBCollection, так как объект без данного модификатора добавить в коллекцию мягких тел просто невозможно.
Для примера создайте простую сцену из обычной плоскости с шаром (рис. 3). Предположим, резиновый шар должен упасть на плоскость (например, на пол), естественно деформироваться при падении и несколько раз подпрыгнуть — это означает, что плоскость представляет собой твердое тело, а шар — мягкое. Начнем с плоскости — создайте коллекцию твердых тел, щелкнув на кнопке CreateRigidBodyCollection (Создать коллекцию твердых тел) панели инструментов Reactor либо активировав инструмент RBCollection (закладка Reactor категории Helpers) и щелкнув в произвольном месте сцены (местоположение коллекции значения не имеет). Это приведет к появлению в окнах проекции иконки данной коллекции (рис. 4). Теперь следует включить в коллекцию ранее созданную плоскость. Для этого выделите иконку RBCollection, откройте панель Modify, щелкните на кнопке Add (Добавить) и в списке доступных объектов укажите плоскость (рис. 5), что приведет к появлению объекта Plane01 в списке твердых тел (рис. 6).
Рис. 3. Исходный вид сцены
Рис. 4. Появление иконки RBCollection
Рис. 5. Включение плоскости в коллекцию RBCollection
Рис. 6. Появление плоскости в коллекции RBCollection
Выделите шар и назначьте ему модификатор reactorSoftBody, выбрав его обычным образом из списка ModifierList. Не снимая выделения с шара, щелкните на кнопке CreateSoftBodyCollection (Создать коллекцию мягких тел) панели инструментов Reactor — это приведет не только к созданию коллекции мягких тел (SBCollection), но и к параллельному занесению в нее шара (рис. 7). Если же выделение с шара окажется снятым, то щелчок на инструменте CreateSoftBodyCollection лишь его активирует, а затем придется щелкнуть в одном из окон проекций для создания коллекции, открыть панель Modify и вручную добавить шар в список SBCollection.
Рис. 7. Появление шара в коллекции S BCollection
Теперь можно приступать к просчету анимации. Щелкните на кнопке Utilities (Сервис) командной панели и далее на кнопке reactor (Реактор), что приведет к раскрытию набора свитков, относящихся к модулю Reactor (рис. 8). Теперь, если все динамические параметры верны, достаточно щелкнуть на кнопке CreateAnimation (Создание анимации), и программа сначала просчитает динамику, а затем создаст анимацию. В противном случае она выдаст сообщение об ошибке, например такое, как представлено на рис. 9. В данном случае такое сообщение неминуемо появится, так как один из параметров настройки — плоскость, изображающая основание сцены, должна быть объявлена как вогнутый объект (что часто упускается из виду новичками) — мы сознательно не учли. Поэтому выделите плоскость, откройте свиток Properties (Свойства) и установите переключатель в группе SimulatuionGeometry (Моделируемая геометрия) в положение UseMesh (Использовать сетку), обеспечивающее один из вариантов формирования вогнутых объектов (рис. 10). После этого щелкните на кнопке CreateAnimation, а затем по окончании просчета обычным образом проиграйте анимацию — шар упадет на плоскость, затем несколько раз подпрыгнет, причем при каждом падении он будет деформироваться (рис. 11).
Рис. 8. Свитки модуля Reactor
Рис. 9. Ошибка, найденная программой в рабочей сцене
Рис. 10. Назначение плоскости вогнутым объектом
Рис. 11. Вид деформированного шара в одном из кадров анимации
Рассыпаем кубик Рубика
Попробуем воспользоваться возможностями модуля Reactor для того, чтобы создать анимацию рассыпания кубика Рубика на отдельные кубики, что вручную оказалось бы очень длительным процессом. Смоделируйте сцену с находящимся на плоскости кубиком Рубика — для этого вначале создайте плоскость и один кубик (рис. 12), выделите его и примените команду Tools=>Array (Инструменты=>Массив) с параметрами как на рис. 13. В результате вы получите примерно такой же трехмерный массив кубиков, как представлен на рис. 14, — это и будет наш кубик Рубика.
Рис. 12. Исходный вид сцены
Рис. 13. Настройка параметров команды Array
Рис. 14. Трехмерный массив кубиков
Выделите все элементы сцены и создайте коллекцию твердых тел, щелкнув на кнопке CreateRigidBodyCollection (Создать коллекцию твердых тел) панели инструментов Reactor, — в итоге коллекция будет создана и в нее автоматически будут включены все выделенные объекты сцены (рис. 15). Выделите плоскость, щелкните на кнопке Utilities (Сервис) командной панели и далее на кнопке reactor (Реактор), раскройте свиток Properties (Свойства) и установите переключатель в группе SimulatuionGeometry (Моделируемая геометрия) в положение UseMesh (Использовать сетку). В окне SelectObjects выделите все элементы кубика Рубика, а затем в свитке Properties установите для них подходящие значения параметров Mass (Масса тела), Elasticity (Эластичность) и Friction (Коэффициент трения) — рис. 16. Обратите внимание, что у плоскости масса остается равной нулю, так как она при анимации должна оставаться неподвижной, в то время как масса любого из кубиков должна быть выше нуля. Щелкните на кнопке CreateAnimation (Создание анимации), и анимация будет создана. Проиграйте ее, и вы увидите, как кубик Рубика рассыпается на отдельные кубики, часть которых даже упадет с плоскости (чтобы этого не происходило, масштабируйте плоскость), — рис. 17.
Рис. 15. Создание коллекции RBCollection на базе выделенных объектов
Рис. 16. Настройка физических параметров объектов массива
Рис. 17. Вид сцены в некоторых кадрах анимации