Новый движок расчета физики в 3ds Max

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

 В данной же статье я хотел бы, так сказать, осуществить введение в MassFX for 3ds Max 2012. Приведенный ниже текст вряд ли будет откровением для специалистов в области 3D, но может оказаться полезным для любителей "поиграться" с 3ds Max, коих, уверен, среди читателей Хабра достаточное количество.

 Итак, поехали.

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

 Второе серьезное упрощение - не поддерживаются тела с вогнутой геометрией. Вернее поддерживаются не полностью. Что это означает на практике? Предположим, необходимо смоделировать сцену, в которой маленький мячик прокатывается под днищем автомобиля. В данном случае днище можно считать вогнутой поверхностью относительно колес, а поверхность рассчитываемого тела будет плоской и на уровне поверхности шин (грубо говоря, рассчитываться будет "шкаф без ножек"). Это означает, что виртуальный мячик отскочит от любой точки соприкосновения с автомобилем, даже если визуально он угодил между колесами. Существует способ обойти данное ограничение используя составной объект когда графическое тело представляется как совокупность более простых физических тел, например стол можно представить как 4 ножки и одну столешницу. Данный "финт ушами" позволяет корректно просчитывать сцену с теми же упомянутыми выше автомобилем и мячом.

 Чтобы создать физическую копию объекта необходимо к графическому телу применить модификатор MassFX Rigid Body из стека модификаторов.

 Различают три вида физических тел в MassFX: Dynamic, Kinematic и Static. Первые рассчитываются с учетом собственной массы, гравитации в системе, а также трения. Самый простой пример такого тела - мячик (вот только он не будет деформироваться). Тела Kinematic могут быть анимированы с помощью анимационных параметров, на них не действует гравитация, их не может сдвинуть с места тело типа Dynamic, но сами они могут "пнуть" Dynamic тела. Удобны для создания объектов, которые должны двигаться не по законам физики, а по заданной нами траектории. Тела Static единственные, которые поддерживают вогнутую геометрию, подобны телам Kinematic, но не могут быть анимированы. Позволяют экономить на расчетах. Например с помощью тела Static удобно моделировать неподвижный шкаф: мячик типа Dynamic корректно отскочит от такого шкафа.

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

 

Для указанных выше физических тел доступны такие параметры как плотность, масса, трение покоя, трение движения и упругость. Как и в реальном мире масса зависит от плотности через объем физического тела. Таким образом корректно рассчитывается поведение футбольного мяча и шара для боулинга. Трение разделено на два параметра, так как обычно трение покоя больше трения движения (что легче: сдвинуть автомобиль или поддерживать его качение?). Ну а упругость отвечает за отскок. Вот так вот все просто - ничего лишнего.
 Также в параметрах модификатора MassFX Rigid Body можно выбрать тип тела и то, как будет представляться его поверхность: примитивом, составным объектом, пользовательским и т.д. Например, как, думаю, понятно, для моделирования мяча достаточно выбрать примитив шар, а вот стол или стул лучше представить в виде составного объекта.

 Также при расчетах следует обращать внимание на единицы в которых произведено графическое моделирование. Всегда следует использовать реальные физические размеры. Например, можно бросать телевизор с окна пятого этажа, а можно с Останкинской башни. Время полета будет, понятно, разное. Но в виртуальном мире можно нарисовать дом высотой с Останкинскую башню, а машины под ней и пешеходов соответственно масштабировать. Но не забывайте, что MassFX пытается все рассчитать "как в жизни", поэтому не удивляйтесь, что в случае масштабирования телевизор будет лететь по времени столько, как будто бы падает не с пятого этажа, а с 85-го. Кстати, увеличение массы в таком случае не поможет, ведь в идеале масса не влияет на скорость падения, только значение гравитации.

 И в заключении краткого обзора хотелось бы отметить общую тенденцию развития твердотельного моделирования в Max'е как я ее вижу.

 Судя по всему, Autodesk пошла по пути проторенному еще в продукте Maya. В более ранних версиях Max'а для создания падающего тела надо было кучу движений: добавить гравитацию, поверхность, создать контейнер твердотельных объектов и т.д. В MassFX же достаточно применить один модификатор и нажать на кнопку расчета, и все! Приблизительно то же можно наблюдать в Autodesk Maya, что, безусловно, сокращает время на моделирование. А функциональность и производительность - это уже вопросы немного в другой плоскости.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=27242