MassFX - новая фишка 3ds Max

В 3ds Max 2012 появился новый движок для расчета твердотельной физики MassFX. Рассмотрим его поближе.

Введение

В выбранной для MassFX модели расчета все тела рассматриваются как твердотельные (Rigid Body), т.е. не подвергаются деформации в процессе просчета. Различают три вида таких тел.
Dynamic. Тела Dynamic rigid подобны объектам в реальном мире. Они попадают под действием гравитации, испытывают силы трения при взаимодействии с другими телами и могут быть сдвинуты другими телами. Физические свойства объекта спроецированы на расчетную среду и расчет ведется с учетом формы объекта. Тела с вогнутыми поверхонстями не поддерживаются (если объект расчета представить в виде одного тела, а не нескольких, но об этом ниже). В случае с вогнутой поверхностью реальная форма объекта приводится к какой-то идеализированной геометрической форме.
Kinematic. Тела Kinematic rigid подчиняются анимационным параметрам. Они не падают под действием силы гравитации. Эти тела могут двигать другие динамические объекты, но сами не могут быть сдвинуты другими телами. Геометрия объекта контролируется 3ds Max (с анимацией или без) для изменения геометрии объекта. Тела с вогнутыми поверхностями не поддерживаются.
Static. Тела Static rigid подобны телам Kinematic rigid за исключением того, что они не могут быть анимированы. Если тело Dynamic rigid, например, врежется в Static rigid то произодет взаимодействие, например отскок, но тело Static rigid никак не среагирует на взаимодействие. Тела Static rigid полезны для оптимизации производительности, а также потому, что с ними можно корректно просчитывать вогнутую поверхность.

Таким образом, следует различать геометрическую поверхность и физическую поверхность. Для физической поверхности создается отдельный объект, который можно изменять отдельно от геометрической модели. Например, если рассматривать стол, то с точки зрения геометрии это плоскость с четырьмя ножками, между ножками свободное пространство. Что-то может закатиться под стол. Если же представить стол как Rigid Body, то получится, грубо говоря, куб (помним, что не поддерживается вогнутая геометрия). И просчитать корректно мячик катящийся под столом не получится. Для таких случаев используют композитное представление объекта. Так, стол можно представить как 5 разных простых объектов - столешницы и четырех ножек, что позволяет производить более-менее корректный расчет в рамках модели Rigid Body.

От теории к практике

Создайте стандартный максовский чайник. Примените к нему модификатор MassFX Rigid Body используя панель модификаторов.

Density - плотность
Mass - масса.
Эти два параметра для физического объекта взаимосвязаны. Например стальной контакт на плате и стальная швартовочная тумба на причале имеют плотность порядка 7,85 г/см3, но, понятно, у крошечного контакта масса гораздо меньше. Объекты с большей массой более инерционны и спокойно могут сдвигать с места более легкие объекты на своем пути.

Чтобы заставить dynamic твердое тело упасть быстрее, можно попытаться увеличить его плотность или массу в свитке Physical Material, но желаемого результата не достигните. В идеализированном физическим мире (если исключить сопротивление воздуха) тела с разной массой падают одинаково быстро.
Заставить тело упасть быстрее можно следующими способами:
- увеличение силы тяжести (используя MassFX Tools Dialog) или
- переместить объект ближе к земле.
Перемещение объекта к земле может показаться очевидным и бесполезным, но это поднимает важный вопрос о единицах.
С чисто геометрической точки зрения башня высотой 10 метров на которую смотрит человек высотой 1,8 метра с расстояния 20 метров, будет казаться такой же как, и башня высотой 100 метров для 18-ти метрового великана с расстояния 200 метров. Однако кирпич падающий с верхушки высоченной 100 метровой башни будет падать намного дольше, чем кирпич с 10 метровой башни. Если смотреть на все это глазами гиганта, с точки зрения обычного человека, обязательно возникнет вопрос: почему падение такое долгое?
Если в результате анимации складывается ощущение, что удаленный предмет находится на луне, прежде чем проверить силу тяжести, поверьте размеры объектов. Как учат еще учителя в школе: "Когда дело доходит до физики, единицы измерения имеют значение!"
friction - трение
Трение определяет как легко тело скользит по другим поверхностям. Например тефлоновый кубик по тефлоновому столу со значение трения 0.05 (почти без трения) будет скользить очень долго, прежде чем остановится.
В MassFX доступны две настройки касающиеся трения:
* - Static Friction - трение покоя когда два тела неподвижны относительно друг-друга, т.е. если один из объектов наклонная поверхность, то это значение влияет на то, начнет ли скользить второй объект.
* - Dynamic Friction - трение в динамике, используется когда два объекта скользят друг относительно друга.
Необходимость такого разделения, возможно, станет понятна если попробовать толкать автомобиль или кровать: можно заметить, что для того, чтобы сдвинуть с места необходимо приложить больше усилий, чем требуется для поддержания движения. Для реалистичности расчета необходимо помнить, что обычно трение в динамике должно быть меньше, чем трение покоя.
Параметр Bounciness отвечает за упругость, т.е. как сильно объекты будут отталкиваться друг от друга при столкновении.

Примечание: для удобства работы можно отобразить плавающую панель MassFX. Для этого щелкните правой кнопкой мышки на свободном месте панели инструментов и выберите пункт MassFX Toolbar как показано на рисунке ниже.

Отобразится следующая панель:

Передвиньте созданный чайник по оси Y и переверните его. Выполните Animation --> Simulation - MassFX --> Simulation --> Start Simulation или нажмите предпоследнюю кнопку на плавающей панели инструментов.
Чайник должен упасть на "поверхность" которая находится на уровне 0 по оси Y. Для возврата первоначальной позиции нажмите кнопку Reset Simulation. Поэкспериментируйте с параметрами трения и упругости и посмотрите как их изменение повлияет на поведение чайника.

Корректировка физической поверхности тела
Как упоминалось выше, для обхода ограничений физическая поверхность может представляться несколькими физическими объектами.
Раздел Select a Mesh to Modify в свитке Physical Meshes позволяет создавать дополнительные физические поверхности. Как правило в таком подходе возникает необходимость в случае с вогнутыми геометрическими поверхностями (вспомните стол) для объекта типа Dynamic rigid, и самый простой способ - использование составной физической поверхности. Настройки Mesh Type позволяют изменять тип физической поверхности используемой для моделирования поведения графической поверхности. Есть несколько типов физической поверхности.
Сфера, куб и капсула.
Это самые простые примитивы. Можно регулировать параметры: радиус, длина, ширина, высота, чтобы управлять размером примитива после создания. Если в процессе моделирования изменялись размеры геометрической поверхности, то необязательно вручную подбирать параметры размеров для физической поверхности, достаточно еще раз перевыбрать необходимый тип физической поверхности, и программа автоматически подберет необходимые размеры.
При расчете сферы затрачивается менее всего ресурсов, затем идет куб и капсула. Эти объекты менее ресурсоемкие при расчете, чем остальные.
Convex Hull
Этот тип физической поверхности используется по умолчанию для всех rigid bodies потому, что может быть применен к любому объекту и примерно напоминает исходную графическую форму. По умолчанию задано 32 вершины, есть возможность подгонять размер под графическую форму. Для увеличения производительности можно уменьшить число вершин, однако это может повлиять на реалистичность расчета. Параметр Inflation позволяет сделать физическую оболочку больше графической. Можно вручную подогнать вершины физической оболочки под форму графической после нажатия на кнопку "Convert to Custom".
Composite (составной)
С помощью данного типа представления физического тела легче всего реализовать вогнутые поверхности. Автоматически создаются различные физические примитивы, чтобы приблизить составленный из них объект к геометрической форме. Но данный метод представления довольно ресурсоемкий и применять его оправдано в тех случаях когда требуется достаточно реалистичный расчет.
Замечание: после выбора данного типа физической поверхности необходимо нажать кнопку Generate в свитке Physical Mesh Parameters для автоматической генерации подобъектов. Если объект сложный, то придется подождать пока не исчезнет надпись "Calculating ... Please wait". По окончанию будет выведена статистика по созданным подобъектам.
Original
Для создания физической поверхности используются вершины графической поверхности. Если графическая поверхность имеет вогнутости, использование Original волшебным образом не обеспечит поддержку расчета вогнутых поверхностей для dynamic или kinematic представлений. Но данный тип обеспечивает лучшую производительность для Static rigid представления, для которых поддерживается вогнутая поверхность. Но, все же, для точного расчета лучше использовать Composite тип.
Custom
Данный тип позволяет в качестве физической поверхности определить какой-то объект в сцене, т.е. скопировать его как физическую поверхность. Объекты с вогнутой поверхностью копировать нельзя. Установите тип "Custom", нажмите кнопку Pick Source Object во вкладке Physical Mesh Parameters и выберите в сцене объект который хотите использовать как образец для физической поверхности. На кнопке должно отобразиться имя выделенного объекта.
Замечание: физическая поверхность создается на месте исходного объекта, поэтому вначале необходимо совместить графические объекты, либо сделать это после с физическим представлением.
После копирования можно удалить исходный объект. Если исходный объект не удален, геометрия на нем изменилась, то можно обновить физическую копию используя Update From Source Object.