3D Studio MAX: первые шаги. Урок 19. Динамика в сцене
Имитация динамики твердых и мягких тел
Набрасываем покрывало
Воспользуемся просчетом динамики в Reactor при моделировании обычного покрывала, которое набросим на кровать. Начнем с кровати — смоделируйте сцену с плоскостью (она будет играть роль пола), тремя объектами ChamferBox (один из них будет матрасом, а два других — подушками) и прямоугольным сплайном с назначенным модификатором Extrude (полученный на его основе объект сыграет роль корпуса кровати) — рис. 36.
Рис. 36. Исходный вид сцены
Создайте вторую плоскость (первая используется для имитации пола) с большим числом разбиений по обеим осям, выровняйте ее по матрасу, а затем немного над ним приподнимите (рис. 37). Обратите внимание, что длина и ширина данной плоскости должны быть немного больше соответствующих параметров матраса, чтобы запланированное покрывало спускалось с кровати. Назначьте плоскости двусторонний материал. В окне SelectObjects выделите все объекты сцены, кроме только что созданной плоскости, и щелкните на кнопке CreateRigidBodyCollection панели инструментов Reactor — будет создана коллекция твердых тел, и все выделенные объекты автоматически будут в нее занесены (рис. 38). Создайте коллекцию тканей, активировав инструмент CreateClothCollection и щелкнув в произвольном месте любого из окон проекций. Выделите вторую плоскость, назначьте ей модификатор reactorCloth и в настройках модификатора установите флажок AvoidSelf-Intersections (Избегать внутренних пересечений), что позволит получить трехмерную поверхность ткани, не пересекающей саму себя при деформации (рис. 39). Включите плоскость в CLCollection. После этого последовательно щелкните на кнопках Utilities и Reactor, раскройте свиток Preview&Animation, затем нажмите на кнопку PreviewinWindow (Предварительный просмотр в окне), на клавишу p и внимательно понаблюдайте за деформацией плоскости. Остановите формирование кадров анимации на понравившемся кадре нажатием клавиши p, примените команду MAX=>UpdateMAX и закройте окно Reactor — плоскость деформируется (рис. 40) и станет реалистично имитировать ткань (рис. 41).
Рис. 37. Появление плоскости
Рис. 38. Формирование коллекции твердых тел
Рис. 39. Настройка параметров модификатора reactorCloth
Рис. 40. Вид преобразованной плоскости в окнах проекций
Рис. 41. Покрывало на кровати
Вешаем полотенце
Усложним задачу — попробуем смоделировать висящее на вешалке полотенце, то есть ткань, закрепленную одним концом и свободно свисающую другим. Создайте сцену с очень большим кубом и узким цилиндром. Куб превратите в стены и пол комнаты, конвертировав его в редактируемый полигональный объект и удалив две передние грани, а у цилиндра отрегулируйте размеры и поместите его на стене в качестве вешалки для полотенца (рис. 42). Создайте Path-плоскость с числом сегментов по длине и ширине равным 4 (рис. 43).
Рис. 42. Исходный вид сцены
Рис. 43. Появление Path-плоскости
Создайте две коллекции — коллекцию твердых тел (RBCollection) и коллекцию тканей (ClCollection). Добавьте все объекты, кроме Path-плоскости, в RBCollection. Выделите Path-плоскость и назначьте ей модификатор reactorCloth с флажком AvoidSelf-Intersections. Внесите плоскость в коллекцию тканей и назначьте ей двусторонний материал. Выделите в окне проекции Path-плоскость, откройте вкладку Modify, выделите модификатор reactorCloth и для того, чтобы получить доступ к редактированию плоскости на уровне вершин, щелкните на квадратике со знаком «+» рядом с именем модификатора. В окне проекции Front выделите левую верхнюю вершину и на панели Modify в свитке Constraints (Ограничения) щелкните на кнопке FixVertices (Зафиксировать вершины) — рис. 44, в результате чего выделенная вершина окажется вне зоны действия модуля Reactor (то есть будет как бы закреплена в некоторой точке).
Рис. 44. Фиксирование одной из вершин Path-плоскости
Щелкните на кнопке Utilities, раскройте список свитков модуля Reactor, откройте свиток Preview&Animation и включите режим предварительного просмотра кадров анимации (кнопка PreviewinWindow). Нажмите клавишу p для начала просчета динамики и остановитесь на наиболее привлекательном кадре, еще раз нажав клавишу p. Для преобразования плоскости к понравившемуся виду воспользуйтесь командой MAX=>UpdateMAX и закройте окно Reactor — плоскость деформируется. Разверните ее нужным образом и переместите к вешалке, а затем снабдите полученное полотенце петелькой, которую можно получить из дугообразного визуализированного сплайна. Возможный результат представлен на рис. 45.
Рис. 45. Полотенце на вешалке
Вешаем шторы
Несколько изменим ситуацию — смоделируем колеблющуюся на ветру штору, то есть прямоугольный кусок ткани, закрепленной с одной из четырех сторон и подвергающийся воздействию ветра. Создайте сцену с очень большим кубом. Превратите куб в стены и пол комнаты, конвертировав его в редактируемый полигональный объект и удалив две передние грани. Затем создайте обычный примитив Box по размеру предполагаемого окна и, применив булеву операцию вычитания, сформируйте в одной из стен проем под окно. Вставьте в данный проем подходящий по параметру оконный примитив. А над окном установите карниз для крепления штор — в простейшем случае его роль может сыграть обычный цилиндр малого диаметра с ограничителями в виде шаров (рис. 46). Создайте плоскость с большим числом разбиений по обеим осям и расположите ее на месте предполагаемой шторы (рис. 47).
Рис. 46. Исходный вид сцены
Рис. 47. Появление плоскости
Выделите все элементы сцены, за исключением плоскости, и создайте коллекцию твердых тел, щелкнув на кнопке CreateRigidBodyCollection панели инструментов Reactor, — в итоге коллекция будет создана и в нее автоматически будут включены все выделенные объекты сцены (рис. 48). Создайте силовое воздействие Wind, щелкнув на кнопке CreateWind (Создать ветер), а затем в произвольном месте окна проекции Left. Сориентируйте положение иконки ветра так, чтобы стрелка, которая определяет направление ветра, была направлена на окно снаружи (рис. 49). Настройте параметры воздействия ветра в соответствии с рис. 50.
Рис. 48. Включение объектов сцены в коллекцию RBCollection
Рис. 49. Определение направления воздействия ветра
Рис. 50. Настройка параметров воздействия ветра
Выделите плоскость и назначьте ей модификатор reactorCloth с флажком AvoidSelf-Intersections. Создайте коллекцию тканей (ClCollection) и внесите в нее плоскость, назначьте плоскости двусторонний материал. Выделите плоскость, откройте вкладку Modify, подсветите строку модификатора reactorCloth, переключитесь на уровень редактирования вершин, выделите два верхних ряда вершин и щелкните на кнопке FixVertices (рис. 51) — выделенные вершины зафиксируются. Учитывая, что штора по замыслу должна быть тюлевой, а значит, очень легкой, гибкой и неплотной, уменьшите значения таких параметров материала, как масса (Mass), плотность (RelDensity) и гибкость (Bend), — рис. 52.
Рис. 51. Фиксирование верхних вершин плоскости
Рис. 52. Корректировка параметров материала
Щелкните на кнопках Utilities и Reactor, выделите примитив Box и объявите его вогнутым объектом — для этого откройте свиток Properties и установите переключатель в группе SimulatuionGeometry в положение UseMesh. Щелкните на кнопке CreateAnimation (Создание анимации), а затем по окончании просчета обычным образом проиграйте анимацию — плоскость превратится в настоящую штору, которая под воздействием ветра будет колыхаться (рис. 53).
Рис. 53. Вид сцены в некоторых кадрах анимации
Имитация гибких тел
Для имитации гибких объектов, таких как веревки, канаты и т.п., в Reactor используются Rope-тела, отличительной особенностью которых является умение изгибаться самым немыслимым образом. Подобные тела моделируются на основе сплайнов: вначале сплайны требуется нормализовать, затем назначить им модификатор reactorRope, а на последнем этапе создается коллекция гибких тел (или, как часто говорят, коллекция веревок) RopeCollection (сокращенно — RPCollection), в которую и включаются сплайны с модификатором. Если гибкое тело с одного или более концов должно быть закреплено, то дополнительно также может потребоваться создание коллекции деформируемых сеток DeformingMeshCollection (сокращенно — DMCollection) либо рассмотренной выше коллекции твердых тел и внесение в соответствующую коллекцию объекта, на котором должен крепиться конец гибкого тела с последующим закреплением вершин последнего.
Для примера создайте простую сцену из плоскости, двух вытянутых цилиндров и Line-сплайна, соединяющего их между собой (рис. 54). Выделите сплайн и нормализуйте его, применив команду Modifiers=>Patch/SplineEditing=>NormalizeSpline (Модификаторы=>Редактирование кусков/сплайнов=>Нормализовать сплайн), и в свитке Parameters модификатора NormalizeSpline (Нормализовать сплайн) введите для параметра SegLength (Длина сегментов) значение 4 — в итоге сплайн окажется разбит на равные по длине сегменты (рис. 55). Выделите плоскость и включите ее в коллекцию твердых тел, щелкнув на кнопке CreateRigidBodyCollection.
Рис. 54. Исходный вид сцены
Рис. 55. Нормализация сплайна
Создайте еще две коллекции — DMCollection (Коллекция деформируемых сеток) и RPCollection (Коллекция веревок), — каждый раз вначале щелкая на соответствующей кнопке панели Reactor , а затем в любом месте любого из окон проекций, так как размещение иконок данных коллекций значения не имеет (рис. 56). Выделите сплайн и назначьте ему модификатор reactorRope, а затем включите сплайн в коллекцию веревок, а оба цилиндра — в коллекцию деформируемых сеток. Выделите сплайн, переключитесь в режим редактирования его вершин на уровне модификатора reactorRope, выделите две самые правые вершины и в свитке Constraints (Ограничения) панели Modify щелкните на кнопке AttachToDefMesh (Присоединить к деформируемым сеткам) — это приведет к появлению в поле списка строки AttachToDefMesh (рис. 57). Щелкните на данной строке — раскроется свиток AttachToDefMesh (Присоединить к деформируемым сеткам), в котором необходимо щелкнуть на кнопке None (кнопка подсветится), а затем указать правый цилиндр в окне проекции, в результате чего в свитке появится имя данного объекта (рис. 58). Аналогичную операцию проведите для закрепления двух самых левых вершин на левом цилиндре — при корректном закреплении при подсвечивании первой строки AttachToDefMesh будут выделяться правые вершины, а при выделении второй — левые (рис. 59).
Рис. 56. Появление иконок коллекций DMCollection и RPCollection
Рис. 57. Привязка правой вершины сплайна
Рис. 58. Изменение вида свитка AttachToDefMesh
Рис. 59. Автоматическое выделение вершин при подсвечивании строк AttachToDefMesh
Щелкните на кнопках Utilities и Reactor, откройте свиток Properties, выделите плоскость и объявите ее вогнутым объектом (флажок UseMesh в группе SimulatuionGeometry). Раскройте свиток Preview&Animation, щелкните на кнопке PreviewinWindow, а затем нажмите на клавишу p и понаблюдайте за формированием кадров анимации. Как видно из рис. 60, созданный нами гибкий объект больше походит на широкую ленту, нежели на веревку, что, правда, несложно изменить, отрегулировав для него параметр Thickness (Толщина) — рис. 61. Что же касается особенностей его деформации, то это зависит от настроек параметров Mass (Масса), Airresistence (Сопротивление воздуха), Friction (Трение) и RopeType (Тип веревки).
Рис. 60. Предварительный просмотр кадров анимации в окне Reactor
Рис. 61. Результат корректировки толщины веревки