Основы 3ds Max 2009

Имитация динамических взаимодействий в 3ds Max

Показывать лекцию целиком

Создавая анимацию вручную, учесть все эти факторы практически невозможно, ведь речь идет о сложных физических взаимодействиях, которые мы каждый день видим вокруг себя. Наблюдая за мячиком, который отскочил от стенки и катится по земле, или за скатертью, которую стелят на стол, мы не задумываемся над тем, насколько сложно воссоздать подобные сцены средствами трехмерной графики. Сколько раз должен мячик отскочить, прежде чем покатится? Где он должен остановиться? В каких местах должна заломиться скатерть после того, как она покроет стол? На все эти вопросы непросто найти ответы.

К счастью, анимацию подобных сцен в 3ds Max вручную создавать не нужно. В программе есть специальный модуль reactor, предназначенный для просчета физических взаимодействий. С его помощью можно решить следующие задачи:

  • соударение твердых тел;
  • деформация мягких тел;
  • разламывание на осколки;
  • имитация поведения ткани;
  • физически правильная имитация водной поверхности;
  • просчет взаимодействий тел, состоящих в конструкциях, например дверей на петлях.
  • Создание сцены при помощи модуля reactor можно условно разделить на несколько этапов.

  • Создание объектов сцены.
  • Объединение объектов в так называемые коллекции - группы тел с одинаковыми свойствами.
  • Установка физических параметров каждого объекта, который принимает участие во взаимодействии, при помощи свитка настроек Properties (Свойства) утилиты reactor.
  • Создание конструкций из компонентов сцены (если таковые имеются). Это необязательный этап.
  • Анализ и просчет готовой сцены.
  • Модуль reactor работает со следующими типами объектов: ).

    (рис 9.1) Панель инструментов reactor

    Чтобы включить объект в ту или иную коллекцию, нужно добавить в сцену вспомогательный объект, обозначающий наличие в сцене определенной коллекции, и в его настройках составить перечень объектов для этой коллекции.

    Например, если моделируется анимация падающих тел, то в сцене необходимо создать вспомогательный объект Rigid Body Collection (Коллекция твердых тел) и в его настройках составить список всех падающих тел, а также плоскости, на которую они будут падать. При этом все падающие объекты, кроме плоскости, должны иметь массу, отличную от нуля. Иначе они повиснут в воздухе.

    Определение границ соударения объектов

    Просчет соударения тел reactor выполняет по сложным математическим формулам. Нередко просчет сложной сцены занимает много времени. В программе имеется большое количество способов, позволяющих упростить задачу, в данном случае - ускорить просчет анимации. Все они построены на использовании определенного типа поверхности для просчета соударений тел. Например, если вы создаете анимацию падающего на землю пульта дистанционного управления, то не имеет смысла учитывать выпуклости на его поверхности, образованные кнопками. Удобнее просчитать соударения по оболочке с формой параллелепипеда. Форму этой оболочки можно также задать как сферическую, повторяющую поверхность тела по заданному образцу или оптимизированную (в этом случае ее вид напоминает объект в упаковочном целлофане).

    Все твердые тела, с которыми работает reactor, условно делятся на выпуклые ( Convex ) и вогнутые ( Concave ). Объект считается выпуклым, если можно провести прямую линию между двумя любыми точками в середине объекта и при этом линия не будет выходить за его пределы. Если вы сомневаетесь в том, является ли объект выпуклым или вогнутым, выделите его и нажмите кнопку Test Convexity (Тест на выпуклость) в свитке настроек Utils (Утилиты) утилиты reactor.

    На просчет взаимодействий выпуклых объектов требуется меньше времени, чем на просчет взаимодействий вогнутых, поэтому, если сцена позволяет, часто вогнутые объекта просчитываются как выпуклые.

    Указать прорисовку сетчатой поверхности для каждого объекта, по которой модуль reactor просчитает взаимодействия, можно в свитке Properties (Параметры) настроек утилиты reactor. Рассмотрим все способы оптимизации.

    В области ).

    (рис 9.2) Выбор способа оптимизации при просчете соударений

    Доступны следующие варианты оптимизации.

  • Bounding Box (Габаритный контейнер) - вокруг объекта будет создан параллелепипед, по форме которого будут происходить соударения. Этот способ подходит для таких объектов, как пульт ДУ, плоская расческа для волос или видеокассета, но не годится для таких объектов, как падающая монета или пластиковая бутылка.
  • Bounding Sphere (Габаритная сфера) - в этом случае вокруг объекта будет создана сфера, по форме которой будут происходить соударения. Этот способ подходит для таких объектов, как батарейка, жестяная банка и т. д.
  • Mesh Convex Hull (Оболочка выпуклого объекта) - данный способ применяется по умолчанию. При его выборе для вычислений используется неоптимизированная оболочка объекта. Если речь идет о вогнутом объекте, то при выборе этого способа по вершинам его геометрии строится оболочка, благодаря чему объект становится как бы упакованным в целлофан. Просчет происходит по этой "целлофановой" оболочке.
  • Proxy Convex Hull (Упрощенная оболочка выпуклого объекта) - для объекта создается копия, которую вы можете оптимизировать, уменьшая количество полигонов. При этом оптимизированная форма объекта будет похожа на исходный объект, и при вычислении взаимодействия тела reactor не будет использовать высокополигональную оболочку оригинальной модели. Вместо нее в вычислениях будет задействована упрощенная форма объекта. Поведение объекта с упрощенной формой после просчета анимации немного отличается от того результата, который можно получить, просчитав движения высокополигонального объекта. Однако эта погрешность минимальна и практически незаметна, а вычисления занимают гораздо меньше времени. По данной причине в большинстве случаев мы рекомендуем применять именно этот способ просчета. Способ оптимизации Proxy Convex Hull (Упрощенная оболочка выпуклого объекта) особенно удобно использовать, если в сцене присутствует несколько одинаковых объектов со сложной геометрией. Для них можно создать одну упрощенную модель, с которой и будет работать reactor. Если для каждого объекта применять неоптимизированную оболочку, то программе необходимо "держать в памяти" геометрию каждого из объектов.
  • Concave Mesh (Использовать оболочку вогнутого объекта) - способ, при котором будет получен наиболее точный расчет для вогнутых объектов. При выборе этого способа для вычислений будет применяться неоптимизированная оболочка вогнутого объекта. Этот способ необходимо, в частности, использовать, если во взаимодействии в качестве твердого тела принимает участие стандартный примитив Plane (Плоскость) (не путать с объектом reactor Plane (Плоскость reactor)). Для выпуклых объектов этот способ вычислений применять не рекомендуется, и reactor выдает предупреждение об этом.
  • Proxy Concave Mesh (Упрощенная оболочка вогнутого объекта) - этот способ напоминает Proxy Convex Hull (Упрощенная оболочка выпуклого объекта), однако в данном случае мы имеем дело с вогнутыми объектами.
  • Not Shared (Разные способы) - это положение переключателя становится активным, когда в сцене выделено несколько объектов, которые участвуют во взаимодействии и для которых выбраны разные способы оптимизации. Вручную задать данный способ нельзя.
  • При выборе настроек для объектов, которые будут принимать участие в соударении, очень важно правильно указать способ оптимизации. Если это не сделать, то результаты вычислений могут оказаться неверными, и объекты будут взаимодействовать некорректно.

    Выбор движка просчета динамических взаимодействий

    При работе с модулем reactor пользователи могут выбирать движок просчета динамических взаимодействий: ).

    (рис 9.3) Выбор движка просчета динамических взаимодействий

    Выбирать подходящий движок нужно, исходя из поставленных задач: первая версия имеет больше возможностей и поддерживает все функции reactor, а Havok 3 работает только с твердыми телами, но зато обеспечивает более высокую скорость и точность просчета. Если попытаться использовать движок Havok 3 в сценах, где есть неподдерживаемые типы объектов (например, вода), то программа просто проигнорирует их и исключит из взаимодействия.

    При выборе движка Havok 3 в свитке Havok 3 World (Глобальный) настроек утилиты reactor появляется новая область параметров Simulation (Взаимодействие), в которой можно задать один из способов просчета динамических взаимодействий. При варианте Discrete (Дискретный) программа проверяет наличие столкновений только в начале и в конце каждого шага просчета анимации, а при варианте Continuous (Постоянный) проверка происходит постоянно. Для Havok 1 используется первый способ, а для Havok 3 по умолчанию установлен способ Continuous (Постоянный).

    Окно Real-Time Preview

    Перед тем, как выполнять окончательный просчет анимации, можно использовать окно Real-Time Preview (Просмотр в реальном времени). В нем можно увидеть, как будут вести себя трехмерные объекты во взаимодействии.

    Окно Real-Time Preview (Просмотр в реальном времени) можно вызвать, нажав кнопку Preview in Window (Предварительный просмотр в окне) в свитке Preview Animation (Предварительный просмотр и анимация) настроек утилиты reactor.

    При его вызове появится окно, внутри которого будет автоматически визуализирован первый кадр (рис 9.4). Чтобы воспроизвести анимацию, нужно в меню Simulation (Имитация) выбрать строку Play/Pause (Воспроизвести/Пауза) или просто нажать клавишу P. В данном окне также можно указать прорисовку сетчатой поверхности для каждого объекта, по которой модуль будет просчитывать взаимодействия. В нижней части окна отображается время анимации.

    (рис 9.4) Окно Real-Time Preview (Просмотр в реальном времени)

    В этом окне отображаются не все объекты сцены, а только те, которые принимают участие во взаимодействии.

    Столкновение с последующим разрушением

    Чтобы дать вам представление о принципе работы модуля reactor 2, рассмотрим пример создания с его помощью сцены столкновения с последующим разрушением. Несмотря на то, что reactor создает анимацию, имитируя физическую модель, в некоторых случаях и он оказывается бессилен. Например, если необходимо смоделировать разбивающийся стеклянный предмет, reactor не сможет предугадать, какую форму примут осколки.

    Однако эту задачу можно решить, упростив условия разрушения. Чтобы разбить объект с помощью модуля reactor, необходимо предварительно разделить оболочку объекта на осколки, после чего указать в настройках реактора, какие именно элементы являются осколками.

    Создайте простую сцену, в которой тяжелый брусок падает на чайник и отбивает ему носик. Выполните объект ).

    (рис 9.5) Первый объект сцены - чайник без носика

    Клонируйте этот объект, выполнив команду Edit>Clone (Правка>Клонировать). Выберите вариант клонирования Copy (Независимая копия объекта). Не меняя координаты второго чайника, отключите все его элементы, а носик, наоборот, включите, установив флажок Spout (Носик).

    Создайте плоскость, на которую упадут брусок и осколок. Для этого нажмите кнопку Create Plane (Создать плоскость) на панели инструментов reactor.

    Добавьте в сцену брусок, используя стандартный примитив ).

    (рис 9.6) Размещение бруска в сцене

    Воспользуйтесь сочетанием клавиш Ctrl+A, чтобы выделить все объекты в сцене. На панели инструментов reactor нажмите кнопку Create Rigid Body Collection (Создать группу твердых тел), чтобы составить коллекцию твердых тел, участвующих во взаимодействии.

    Выделите объекты, которые составляют разрушающийся объект, то есть носик и чайник без носика. Нажмите кнопку ).

    (рис 9.7) Добавление объекта Fracture в сцену

    Перейдите на вкладку Utilities (Утилиты) командной панели и откройте настройки утилиты reactor. Поочередно выделяя объекты, задайте массу носика и бруска, изменив значение параметра Mass (Масса тела) в свитке Properties (Свойства). Для носика установите массу равной 0,2, а для бруска - 2. Если не задать массу носика, то брусок повиснет на нем, и разлом не произойдет.

    Нажмите кнопку ). После этого можно выполнить просчет, нажав кнопку Create Animation (Создание анимации).

    (рис 9.8) Предварительный просмотр сцены в окне Real-Time Preview

    Модуль Cloth

    Моделирование поведения ткани представляет собой непростую цепочку вычислений, которую производит программа. Задача усложняется, когда приходится моделировать одежду трехмерных персонажей: поскольку анимационные герои постоянно находятся в движении, одежда на них должна изменять свою форму в каждом кадре.

    Модуль Cloth дает возможность пользователям 3ds Max моделировать одежду персонажа. При наличии выкройки модуль Cloth позволяет "надеть" на персонаж одежду и просчитать поведение ткани на объекте.

    С помощью модуля Cloth можно решить два типа задач: "пошив" одежды с использованием сплайновых выкроек и моделирование поведения объектов, наделенных свойствами ткани.

    Создание одежды для персонажей

    Самый сложный этап в процессе моделирования одежды - это создание выкройки. Если вы никогда не имели дело с шитьем, то представить, как будет выглядеть выкройка того или иного элемента гардероба, довольно сложно.

    Выкройка лежит в основе любой одежды. От того, насколько правильно были сняты мерки и точно выполнены расчеты модельера, зависит, будет ли одежда хорошо смотреться на человеке. Существует определенный набор базовых выкроек, на основе которых создаются разнообразные модели платьев, юбок, брюк и т. д. Разработка выкройки - довольно сложный процесс, требующий большого терпения и внимательности. Размеры выкройки должны подчиняться определенным формулам с поправкой на конкретную фигуру.

    Чтобы работать с модулем Cloth, вам придется освоить ремесло портного. Скорее всего, перед созданием трехмерной выкройки вам нужно будет посмотреть журналы, посвященные швейному делу, в которых публикуют разнообразные выкройки. Помните, что у вас есть огромное преимущество перед обычными портными, ведь персонаж, для кого вы собираетесь шить одежду, невероятно покладист - он готов к примерке тогда, когда вам это удобно, он не будет вертеться, пока вы будете снимать размеры и примерять детали выкройки, и не обидится, если созданные вами штаны будут слишком малы или невероятно велики.

    Процесс "пошива" одежды при помощи модуля Cloth выглядит следующим образом.

    При помощи Editable Spline (Редактируемый сплайн) создается выкройка. На полученный сплайн воздействуют модификатором Garment Maker (Создатель одежды). Этот модификатор конвертирует кривые в редактируемые оболочки, которые можно использовать как ткань.

    Параметр ) отвечает за плотность размещения полигонов. Чем больше значение этого параметра, тем более реалистично будет имитироваться поведение ткани и тем больше времени понадобится программе на просчет.

    (рис 9.9) Настройки модификатора Garment Maker (Создатель одежды)

    Работая с модификатором Garment Maker (Создатель одежды), необходимо подобрать положение деталей выкройки относительно трехмерного персонажа, разместив каждую из них в нужном месте, а затем соединить их схематическими швами.

    Размещение выкройки вокруг персонажа можно производить как вручную, так и в автоматическом режиме. Во втором случае можно установить на разных частях тела модели опорные точки, которые будут служить для программы ориентиром при выборе положения той или иной детали выкройки. Затем, переключившись на уровень Panels (Вставки), можно указать положение каждой детали, используя кнопки Left Arm (Левая рука), Right Arm (Правая рука), Front Center (По цетру спереди), Back Center (По центру сзади) и др. Параметры области Deformation (Деформация) позволяют свернуть некоторые части выкройки, например рукава.

    Примечание. Как правило, после работы автоматического инструмента выравнивания положение деталей выкройки приходится дополнительно корректировать вручную.

    После того как детали выкройки будут размещены вокруг персонажа, необходимо соединить их швами. Это можно делать или в режиме редактирования Seams (Швы), или в режиме редактирования Curves (Кривые). Разница заключается в том, что в режиме Curves (Кривые) детали выкройки отображаются в исходном виде, а в режиме Seams (Швы) - так, как они были размещены вокруг персонажа. Обычно для начинающих пользователей лучше подходит режим Seams (Швы), так как создание швов в нем более наглядно.

    Для создания швов необходимо поочередно выделять сплайны и нажимать кнопку Create Seam (Создать шов). При этом необходимо помнить, что шов может быть создан только между двумя сплайнами. Если шов перекрутился, нажмите кнопку Reverse Seam (Перевернуть шов)

    К готовой выкройке со швами применяется модификатор ) можно задать свойства гибких и твердых тел в сцене. Выкройка - это гибкое тело, а персонаж, для которого создается одежда - твердое. Чтобы определить параметры объектов сцены, нужно нажать кнопку Object Properties (Свойства объекта) свитка Object (Объект), после чего появится окно Object Properties (Свойства объекта).

    (рис 9.10) Настройки модификатора Cloth (Одежда)

    Одна из интересных возможностей модуля Cloth - определение степени прилипания ткани к поверхности объекта. За это отвечает параметр Cling (Прилипнуть), который находится в окне Object Properties (Свойства объекта) настроек ткани. Чем больше его значение, тем сильнее ткань прилипает к поверхности объекта, с которым она взаимодействует. Просчет симуляции поведения ткани с такими свойствами выглядит вполне правдоподобно - при воздействии на "прилипающую" ткань сторонней силой (например, ветром), она постепенно отрывается от поверхности объекта, к которому прилипла. На практике эту настройку также очень удобно использовать в сценах, где ранее необходимо было указывать высокий коэффициент трения ткани с объектами, например если нужно создать афишу, которая отклеивается от стены, или покрывало на мольберте, которое постепенно спадает.

    Модуль Cloth имеет свой собственный тип объекта Collision Object (Объект столкновения). Особенностью этого объекта является то, что он взаимодействует только с объектом Cloth (Одежда). Объект Collision Object (Объект столкновения) имеет очень гибкие настройки, которые нужно подбирать в зависимости от конкретных типов взаимодействующих объектов.

    Примечание. Настройка параметров объекта Collision Object (Объект столкновения) очень важна. Если подобрать неправильные значения, то после просчета может оказаться, что тело "проходит" сквозь ткань.

    В настройках модификатора Cloth (Одежда) можно установить свойства ткани. Как известно, ткани бывают различные, и в зависимости от того, какими свойствами они обладают, ведут они себя также по-разному. Пользователь может создать тип ткани самостоятельно и сохранить его в файле с расширением STI. Для моделирования можно также применять большую библиотеку заготовок, в которой представлены разные типы ткани - от резины до шелка и хлопка.

    Для "пошива" одежды используется кнопка Simulate Local (Имитировать локально) в области Simulation (Имитация) настроек модификатора. После ее нажатия одежда ложится по фигуре персонажа, согласно установленным швам. Чтобы избавиться от схематических швов и завершить пошив предмета одежды, необходимо снять флажок Use Sewing Springs (Использовать нити) в свитке Simulation Parameters (Параметры имитации) и повторить операцию Simulate Local (Имитировать локально).

    При анимации ткани очень важно знать, насколько она натянута. Без этого трудно спрогнозировать ее поведение при симуляции. Одна из полезных возможностей модуля Cloth - визуальное отображение напряжения ткани в окне проекции. Натянутые, ослабленные и нейтральные участки окрашиваются разными цветами, наподобие того, как это происходит при мягком выделении (рис 9.11). Эта возможность включается параметром Tension (Натянутость) в свитке настроек Simulation Parameters (Параметры поведения). При увеличении его значения цветовой переход между участками с разной напряженностью становится более плавным.

    (рис 9.11) Благодаря параметру Tension (Натянутость) в окне проекции можно визуально наблюдать, насколько натянута ткань

    Имитация ткани

    Кроме создания одежды для персонажей, модуль Cloth позволяет просчитывать поведение ткани. Как и другой встроенный в 3ds Max модуль для просчета динамики - reactor - Cloth дает возможность имитировать взаимодействия между объектами, созданными из ткани, и твердыми телами.

    Внимание. В отличие от reactor, модуль Cloth не позволяет просчитывать взаимодействие между твердыми телами.

    Чтобы назначить объекту свойства ткани, необходимо выделить его в сцене и применить к нему модификатор Cloth (Ткань). Далее в окне Object Properties (Параметры объекта) нужно нажать кнопку Add Objects (Добавить объекты) и в окне Add Objects to Cloth Simulation (Добавить объекты в сцену симуляции поведения ткани) выделить объект, с которым будет взаимодействовать ткань.

    Затем в окне Object Properties (Параметры объекта) необходимо выбрать объект, который будет наделен функциями ткани, и установить переключатель в положение Сloth (Ткань). Для объекта взаимодействия следует выбрать тип Сollision Object (Объект столкновения), установив переключатель в данное положение.

    Для просчета сцены необходимо нажать кнопку Simulate (Создать симуляцию поведения) в свитке Object (Объект) настроек модификатора Cloth (Одежда).

    Среди других параметров модуля Cloth (Одежда) можно отметить кнопку Cloth Forces (Силы воздействия на ткань), которая помогает просчитать сцену с учетом внешних факторов, например ветра.

    Вернуться к учебному плану