Реактивная сторона 3D Studio Max
Реактивная сторона 3D Studio Max
Работая в любом серьезном 3D-редакторе, нередко попадаешь в ситуацию, когда сцена выглядит "мертвой". Вроде бы и текстуры подобраны неплохо, и источники света правильно расставлены, а анимация все равно выглядит безжизненно. В реальной жизни все, что нас окружает, постоянно изменяется: шторы слабо двигаются, по озеру бежит мелкая рябь и т.д. Аниматору очень трудно воссоздать такую картину. Динамика движений в сцене должна подчиняться законам физики, иначе про реалистичность можно забыть. Из всего многообразия подобных задач можно выделить несколько основных: симуляция свойств материи, столкновение упругих тел (rigid bodies) и моделирование жидкостей. Алгоритм решения этих проблем настолько сложен, что его разработкой занимаются целые институты. Существует большое количество программного обеспечения, которое помогает 3D-художнику в этой области: от мелких скриптов до крупных самостоятельных программ вроде RealFlow от NextLimit. Каждое решение по-своему уникально, имеет свои преимущества и недостатки.
При моделировании сложных сцен есть смысл воспользоваться программными продуктами с большими возможностями. Одним из самых известных среди них является Reactor от Havok ( http://www.havok.com ). Начиная с пятой версии 3D Studio Max плагин Reactor интегрирован в программу.
Используя эту мощную утилиту при создании динамики в сценах 3D Studio MAX, можно решить задачи, в которых присутствуют упругие и гибкие тела, а также водные поверхности.
"Общение" с плагином начинается с того, что мы переходим в командную панель на закладку Utilities, нажимаем кнопку More и далее выбираем из списка утилит нужный нам Reactor. Для удобства можно к девяти основным утилитам, которые вынесены на командную панель в виде кнопок, добавить десятую — Reactor. Это облегчит нам работу в будущем, т.к. не нужно будет каждый раз выбирать его из списка. Если же вы пользуетесь 3D Studio Max R5, то наверняка заметили, что кнопка Reactor уже вынесена на командную панель (рис.1).
Создание сцены при помощи Reactor'а обычно происходит в 6 этапов:
1. Создается сцена в 3D Studio Max.
2. В свитке Properties утилиты Reactor устанавливаются физические параметры для каждого объекта, включенного в сцену.
3. Указывается, к какой группе принадлежит тот или иной объект.
4. Создаются конструкции из компонентов сцены.
5. Добавляются камеры и источники света.
6. Делается анализ и просчет.
Reactor умеет работать со следующими группами объектов: Rigid Bodies (твердые тела), Soft Bodies (гибкие тела), Deforming Meshes (деформируемые поверхности), Rope (веревка), Constraints (конструкции), Actions (воздействия) и Water (вода). Все эти группы находятся в категории Helpers и Space Warps командной панели Create в закладке Reactor. Дабы не обременять читателей скучными теоретическими выкладками, рассмотрим действие плагина на простых примерах.
Пусть нам требуется создать падение тел. Делаем Quad Patch (четырехугольный кусок Безье — он будет служить нам полом), а над ним на некотором расстоянии чайник. Попробуем заставить его упасть, а после падения несколько раз, подобно резиновому мячику, подпрыгнуть. Для этого необходимо создать следующие группы объектов: Soft Bodies Collection и Rigid Bodies Collection. Создаем в окне проекции иконку RB-Collection и включаем в список Quad Patch. Затем к чайнику применяем стандартный модификатор FFD (box) 4x4x4 и модификатор от утилиты под названием Reactor SoftBody. FFD нужен для того, чтобы при падении чайник правильно деформировался. Модификаторы от утилиты можно найти вот тут: Командная панель > закладка Modify > группа Object Space Modifiers > строчки reactor AttachToRB, reactor Cloth, reactor SoftBody, reactor Rope.
В свитке Properties указываем массу тела (mass — 1 kg), жесткость (stiffness — 0,18), коэффициент трения (friction — 0,5) и амортизацию тела (damping — 0,2). (Кстати говоря, одним из преимуществ и одновременно недостатков Reactor'а является огромное количество настроек. Зачастую в них легко запутаться даже опытному пользователю, поэтому, моделируя ту или иную ситуацию, удобно брать основные параметры из файлов примеров, входящих в поставку плагина).
После этого рисуем иконку Soft Bodies Collection и включаем в список Teapot (чайник). Теперь вернемся на закладку Utilities и нажмем в свитке Anima-tion&Export кнопку Perform Simulation. Если не отключена опция Analyze Before Simulation в свитке Advanced, то программа сначала проведет анализ задачи и, если ошибок не будет, начнет просчет. В противном случае она выдаст сообщение, например, о том, что тело не относится к группе RB-Collection, или другое. После обработки данных видим то, чего и добивались — чайник, падая, слегка деформируется — так, будто он резиновый, подпрыгивает и снова падает (рис.2).
Встроенная функция предпросмотра (Preview) в свитке Display настроек Reactor'a (закладка Utilities) позволит вам увидеть примерный просчет в реальном времени. Если нажать на Preview in Window (просмотр в оконном режиме), появляется окно с логотипом Havok, внутри которого будет аппаратно отрендерен первый кадр, по виду напоминающий кадр из компьютерной игры. Окно можно заставить проиграть анимацию, если вверху на ниспадающем окошке Physics выделить опцию Real Time, а в Simulation выбрать строчку Play/Pause. Здесь же можно указать прорисовку сетчатой оболочки для каждого объекта, по которой плагин просчитывает соударения.
Для ускорения вычислений в Reactor'е можно сделать оптимизацию. При столкновении двух тел просчет должен проходить с учетом геометрии объекта. Однако, если тело имеет форму, напоминающую куб, можно упростить модель объекта, приняв его форму за кубическую. По такому принципу любой объект, взаимодействующий с другими телами, можно оптимизировать. Сетчатая оболочка для каждого оптимизированного объекта, по которой плагин просчитывает соударения, будет напоминать объект в упаковочном целлофане. Все настройки, определяющие геометрию такой сетчатой оболочки, расположены в свитке Properties (закладка Utilities). Там же находятся и физические свойства тел — такие, как масса, коэффициент трения, эластичность.
Как можно наблюдать на нашем примере, изменение формы падающего тела просчитывается на основе деформации параллелепипеда, охватывающего наш чайник. Это и есть пример оптимизации сцены.
Очень хорошо продуман в Reactor'е процесс создания воды. Путем несложных операций можно легко смоделировать реалистичную поверхность. Насколько это просто, судите сами: делаем плоскость, которая будет играть роль воды. Затем в категории SpaceWarps выбираем Reactor и жмем кнопку Water. Полученную объемную деформацию нужно связать с нашей плоскостью. Для этого в Main Toolbar выбираем Связать с Объемной Деформацией (Bind to SpaceWarp), и вода готова. Теперь создайте какой-нибудь объект типа Rigid Body (Твердое тело). Для того, чтобы Reactor понял, что он имеет дело именно с Rigid Body, заносим название предмета в список Rigid Body Collection. Осталось указать массу объекта в закладке Properties утилиты Reactor и настроить SpaceWarp Water, чтобы она выглядела правдоподобно. Рассмотрим настройки Water более подробно:
Subdivsions X и Subdivisions Y — это параметры, определяющие разрешение SpaceWarp Water, то есть, чем больше их значение, тем более точно просчитывается поверхность.
Wave Speed — скорость волн.
Min Ripple и Max Ripple — определяют водную рябь.
Density — параметр для задания плотности жидкости.
Viscosity — вязкость. Если изменить это число, жидкость превратится из воды в клей.
Landscape — если задействовать эту функцию и выбрать какое-нибудь тело, которое относится к группе Rigid Body, то волны, наталкиваясь на него, будут отражаться.
Итак, мы сделали сцену, в которой есть Вода и Тело над ней. Просчитаем в утилите Reactor, как будет вести себя вода после того, как тело в нее упадет. Нажимаем кнопку Preview in Window и смотрим, что получилось. Если результат далек от желаемого, изменяем настройки и пробуем снова. В конце концов, нажимаем Perform Simulation и рендерим (рис.3).
Для того чтобы созданная сцена не казалась безжизненной, ее необходимо наполнить какими-нибудь действиями, создать Action. Reactor имеет несколько собственных вариантов Action: Wind (ветер), Motor (мотор) и Fracture (излом). Расположены они, как и различные Collection, в разделе Helpers в списке Reactor. С первыми двумя все понятно: здесь сразу бросается в глаза аналогия со стандартными SpaceWarps, которые имеют такие же имена. Особый интерес представляет тип воздействия Fracture. Его задача — облегчить моделирование сцены, где проходит процесс разрушения цельного объекта на составляющие. Если представить себе, как летящая с большой высоты табуретка разлетается на части, достигнув земли, это и будет приблизительно действие Fracture.
Попробуем быстро воссоздать ситуацию. Табурет сделаем из пяти параллелепипедов: четыре ножки и пятый под сиденье (обратите внимание, что элементы группировать не надо — Fracture не работает со сгруппированными телами). Создадим плоскость (землю) и занесем ее в Rigid Body Collection. Нарисуем в окне проекции иконку Fracture и, указав название нашей группы Rigid Body, включим в список те элементы, из которых состоит табуретка. Если в списке Fracture (свиток Properties) мы выделим элемент, то ниже появляется выбор из трех вариантов — Normal, Unbreakable и Keystone. В первом случае при некотором значении импульса элемент "отламывается". Unbreakable (неразрушимый) сделает эту часть целой. Последний тип Keystone придаст детали такую особенность, что, если импульс в момент удара будет достаточен для того, чтобы она была разрушена, то вслед за ней разламывается и все тело. Рядом с этими параметрами расположены и настройки, относящиеся непосредственно к импульсу соударения: Impulse — значение импульса и Energy Loss — величина потери энергии при ударе.
В 3D Studio Max довольно часто встречаются физические величины. На первый взгляд, это усложняет работу, потому что не всегда на глазок можно определить, скажем, коэффициент трения или ту же величину потерь энергии при ударе. А с другой стороны — появляется возможность точно описать физическую задачу.
Однако вернемся к сцене. Каждой части зададим какой-то вес — положим, 8 kg. Теперь укажем, какой способ разрушения в нашем случае — в момент удара или после оного. Предпросмотр и — просчет. Табуретка летит, падает и разбивается (рис.4).
Теперь пару слов о конструкциях (Constraints), предусмотренных разработчиками плагина. Если вам требуется создать движение нескольких объектов, связанных между собой, то подобную задачу можно решить, применяя различные формы конструкций. Существует несколько их видов:
Point-to-Рath Constraint — такая конструкция позволит телу свободно вращаться вокруг точки, движение которой будет определяться произвольной замкнутой кривой.
Point-to-Point Constraint — в этом случае одно тело будет вращаться относительно другого при условии, что они соединены выбранной общей точкой.
Point-to-Nail Constraint — отличается от Point-to-Point тем, что для ее создания требуется указать только один объект. При движении тело будет находиться все время на одинаковом расстоянии от выбранной точки.
Конструкции можно делать используя различные группы тел — Soft Bodies Collections, Rigid Bodies Collections, Rope Collections и т.д. Использование конструкций делает возможным воссоздание движений дверцы шкафа на петлях (Point-to-Nail Constraints), колебаний маятника, трепыхания шторы на ветру и многого другого.
Также при моделировании систем тел можно применять модификаторы Attach to Rigid Body и Soft Body. С их помощью привязываем данное тело к указанной группе. Например, полученным результатом в первом случае будет флюгер, а во втором — флаг, прикрепленный к палке.
Иногда требуется присутствие в сцене обычной веревки. Реактор позволяет быстро и просто ее смоделировать. Для этого необходимо выбрать кривую, которая соответствует форме веревки, и создать группу Rope Collection. Затем при помощи модификатора Reactor Rope превратим сплайн в настоящую веревку. Когда один конец веревки нужно закрепить, перед модификатором Reactor Rope применяем стандартный Spline Select и выделяем те вершины, которые мы желаем закрепить. А если нам нужна не веревка, а ткань, выполняем аналогичные действия, только вместо модификатора Reactor Rope применяем Reactor Cloth.
Сергей БОНДАРЕНКО,
Марина ДВОРАКОВСКАЯ, blackmore_s_night@yahoo.com
Работая в любом серьезном 3D-редакторе, нередко попадаешь в ситуацию, когда сцена выглядит "мертвой". Вроде бы и текстуры подобраны неплохо, и источники света правильно расставлены, а анимация все равно выглядит безжизненно. В реальной жизни все, что нас окружает, постоянно изменяется: шторы слабо двигаются, по озеру бежит мелкая рябь и т.д. Аниматору очень трудно воссоздать такую картину. Динамика движений в сцене должна подчиняться законам физики, иначе про реалистичность можно забыть. Из всего многообразия подобных задач можно выделить несколько основных: симуляция свойств материи, столкновение упругих тел (rigid bodies) и моделирование жидкостей. Алгоритм решения этих проблем настолько сложен, что его разработкой занимаются целые институты. Существует большое количество программного обеспечения, которое помогает 3D-художнику в этой области: от мелких скриптов до крупных самостоятельных программ вроде RealFlow от NextLimit. Каждое решение по-своему уникально, имеет свои преимущества и недостатки.
При моделировании сложных сцен есть смысл воспользоваться программными продуктами с большими возможностями. Одним из самых известных среди них является Reactor от Havok ( http://www.havok.com ). Начиная с пятой версии 3D Studio Max плагин Reactor интегрирован в программу.
Используя эту мощную утилиту при создании динамики в сценах 3D Studio MAX, можно решить задачи, в которых присутствуют упругие и гибкие тела, а также водные поверхности.
"Общение" с плагином начинается с того, что мы переходим в командную панель на закладку Utilities, нажимаем кнопку More и далее выбираем из списка утилит нужный нам Reactor. Для удобства можно к девяти основным утилитам, которые вынесены на командную панель в виде кнопок, добавить десятую — Reactor. Это облегчит нам работу в будущем, т.к. не нужно будет каждый раз выбирать его из списка. Если же вы пользуетесь 3D Studio Max R5, то наверняка заметили, что кнопка Reactor уже вынесена на командную панель (рис.1).
Создание сцены при помощи Reactor'а обычно происходит в 6 этапов:
1. Создается сцена в 3D Studio Max.
2. В свитке Properties утилиты Reactor устанавливаются физические параметры для каждого объекта, включенного в сцену.
3. Указывается, к какой группе принадлежит тот или иной объект.
4. Создаются конструкции из компонентов сцены.
5. Добавляются камеры и источники света.
6. Делается анализ и просчет.
Reactor умеет работать со следующими группами объектов: Rigid Bodies (твердые тела), Soft Bodies (гибкие тела), Deforming Meshes (деформируемые поверхности), Rope (веревка), Constraints (конструкции), Actions (воздействия) и Water (вода). Все эти группы находятся в категории Helpers и Space Warps командной панели Create в закладке Reactor. Дабы не обременять читателей скучными теоретическими выкладками, рассмотрим действие плагина на простых примерах.
Пусть нам требуется создать падение тел. Делаем Quad Patch (четырехугольный кусок Безье — он будет служить нам полом), а над ним на некотором расстоянии чайник. Попробуем заставить его упасть, а после падения несколько раз, подобно резиновому мячику, подпрыгнуть. Для этого необходимо создать следующие группы объектов: Soft Bodies Collection и Rigid Bodies Collection. Создаем в окне проекции иконку RB-Collection и включаем в список Quad Patch. Затем к чайнику применяем стандартный модификатор FFD (box) 4x4x4 и модификатор от утилиты под названием Reactor SoftBody. FFD нужен для того, чтобы при падении чайник правильно деформировался. Модификаторы от утилиты можно найти вот тут: Командная панель > закладка Modify > группа Object Space Modifiers > строчки reactor AttachToRB, reactor Cloth, reactor SoftBody, reactor Rope.
В свитке Properties указываем массу тела (mass — 1 kg), жесткость (stiffness — 0,18), коэффициент трения (friction — 0,5) и амортизацию тела (damping — 0,2). (Кстати говоря, одним из преимуществ и одновременно недостатков Reactor'а является огромное количество настроек. Зачастую в них легко запутаться даже опытному пользователю, поэтому, моделируя ту или иную ситуацию, удобно брать основные параметры из файлов примеров, входящих в поставку плагина).
После этого рисуем иконку Soft Bodies Collection и включаем в список Teapot (чайник). Теперь вернемся на закладку Utilities и нажмем в свитке Anima-tion&Export кнопку Perform Simulation. Если не отключена опция Analyze Before Simulation в свитке Advanced, то программа сначала проведет анализ задачи и, если ошибок не будет, начнет просчет. В противном случае она выдаст сообщение, например, о том, что тело не относится к группе RB-Collection, или другое. После обработки данных видим то, чего и добивались — чайник, падая, слегка деформируется — так, будто он резиновый, подпрыгивает и снова падает (рис.2).
Встроенная функция предпросмотра (Preview) в свитке Display настроек Reactor'a (закладка Utilities) позволит вам увидеть примерный просчет в реальном времени. Если нажать на Preview in Window (просмотр в оконном режиме), появляется окно с логотипом Havok, внутри которого будет аппаратно отрендерен первый кадр, по виду напоминающий кадр из компьютерной игры. Окно можно заставить проиграть анимацию, если вверху на ниспадающем окошке Physics выделить опцию Real Time, а в Simulation выбрать строчку Play/Pause. Здесь же можно указать прорисовку сетчатой оболочки для каждого объекта, по которой плагин просчитывает соударения.
Для ускорения вычислений в Reactor'е можно сделать оптимизацию. При столкновении двух тел просчет должен проходить с учетом геометрии объекта. Однако, если тело имеет форму, напоминающую куб, можно упростить модель объекта, приняв его форму за кубическую. По такому принципу любой объект, взаимодействующий с другими телами, можно оптимизировать. Сетчатая оболочка для каждого оптимизированного объекта, по которой плагин просчитывает соударения, будет напоминать объект в упаковочном целлофане. Все настройки, определяющие геометрию такой сетчатой оболочки, расположены в свитке Properties (закладка Utilities). Там же находятся и физические свойства тел — такие, как масса, коэффициент трения, эластичность.
Как можно наблюдать на нашем примере, изменение формы падающего тела просчитывается на основе деформации параллелепипеда, охватывающего наш чайник. Это и есть пример оптимизации сцены.
Очень хорошо продуман в Reactor'е процесс создания воды. Путем несложных операций можно легко смоделировать реалистичную поверхность. Насколько это просто, судите сами: делаем плоскость, которая будет играть роль воды. Затем в категории SpaceWarps выбираем Reactor и жмем кнопку Water. Полученную объемную деформацию нужно связать с нашей плоскостью. Для этого в Main Toolbar выбираем Связать с Объемной Деформацией (Bind to SpaceWarp), и вода готова. Теперь создайте какой-нибудь объект типа Rigid Body (Твердое тело). Для того, чтобы Reactor понял, что он имеет дело именно с Rigid Body, заносим название предмета в список Rigid Body Collection. Осталось указать массу объекта в закладке Properties утилиты Reactor и настроить SpaceWarp Water, чтобы она выглядела правдоподобно. Рассмотрим настройки Water более подробно:
Subdivsions X и Subdivisions Y — это параметры, определяющие разрешение SpaceWarp Water, то есть, чем больше их значение, тем более точно просчитывается поверхность.
Wave Speed — скорость волн.
Min Ripple и Max Ripple — определяют водную рябь.
Density — параметр для задания плотности жидкости.
Viscosity — вязкость. Если изменить это число, жидкость превратится из воды в клей.
Landscape — если задействовать эту функцию и выбрать какое-нибудь тело, которое относится к группе Rigid Body, то волны, наталкиваясь на него, будут отражаться.
Итак, мы сделали сцену, в которой есть Вода и Тело над ней. Просчитаем в утилите Reactor, как будет вести себя вода после того, как тело в нее упадет. Нажимаем кнопку Preview in Window и смотрим, что получилось. Если результат далек от желаемого, изменяем настройки и пробуем снова. В конце концов, нажимаем Perform Simulation и рендерим (рис.3).
Для того чтобы созданная сцена не казалась безжизненной, ее необходимо наполнить какими-нибудь действиями, создать Action. Reactor имеет несколько собственных вариантов Action: Wind (ветер), Motor (мотор) и Fracture (излом). Расположены они, как и различные Collection, в разделе Helpers в списке Reactor. С первыми двумя все понятно: здесь сразу бросается в глаза аналогия со стандартными SpaceWarps, которые имеют такие же имена. Особый интерес представляет тип воздействия Fracture. Его задача — облегчить моделирование сцены, где проходит процесс разрушения цельного объекта на составляющие. Если представить себе, как летящая с большой высоты табуретка разлетается на части, достигнув земли, это и будет приблизительно действие Fracture.
Попробуем быстро воссоздать ситуацию. Табурет сделаем из пяти параллелепипедов: четыре ножки и пятый под сиденье (обратите внимание, что элементы группировать не надо — Fracture не работает со сгруппированными телами). Создадим плоскость (землю) и занесем ее в Rigid Body Collection. Нарисуем в окне проекции иконку Fracture и, указав название нашей группы Rigid Body, включим в список те элементы, из которых состоит табуретка. Если в списке Fracture (свиток Properties) мы выделим элемент, то ниже появляется выбор из трех вариантов — Normal, Unbreakable и Keystone. В первом случае при некотором значении импульса элемент "отламывается". Unbreakable (неразрушимый) сделает эту часть целой. Последний тип Keystone придаст детали такую особенность, что, если импульс в момент удара будет достаточен для того, чтобы она была разрушена, то вслед за ней разламывается и все тело. Рядом с этими параметрами расположены и настройки, относящиеся непосредственно к импульсу соударения: Impulse — значение импульса и Energy Loss — величина потери энергии при ударе.
В 3D Studio Max довольно часто встречаются физические величины. На первый взгляд, это усложняет работу, потому что не всегда на глазок можно определить, скажем, коэффициент трения или ту же величину потерь энергии при ударе. А с другой стороны — появляется возможность точно описать физическую задачу.
Однако вернемся к сцене. Каждой части зададим какой-то вес — положим, 8 kg. Теперь укажем, какой способ разрушения в нашем случае — в момент удара или после оного. Предпросмотр и — просчет. Табуретка летит, падает и разбивается (рис.4).
Теперь пару слов о конструкциях (Constraints), предусмотренных разработчиками плагина. Если вам требуется создать движение нескольких объектов, связанных между собой, то подобную задачу можно решить, применяя различные формы конструкций. Существует несколько их видов:
Point-to-Рath Constraint — такая конструкция позволит телу свободно вращаться вокруг точки, движение которой будет определяться произвольной замкнутой кривой.
Point-to-Point Constraint — в этом случае одно тело будет вращаться относительно другого при условии, что они соединены выбранной общей точкой.
Point-to-Nail Constraint — отличается от Point-to-Point тем, что для ее создания требуется указать только один объект. При движении тело будет находиться все время на одинаковом расстоянии от выбранной точки.
Конструкции можно делать используя различные группы тел — Soft Bodies Collections, Rigid Bodies Collections, Rope Collections и т.д. Использование конструкций делает возможным воссоздание движений дверцы шкафа на петлях (Point-to-Nail Constraints), колебаний маятника, трепыхания шторы на ветру и многого другого.
Также при моделировании систем тел можно применять модификаторы Attach to Rigid Body и Soft Body. С их помощью привязываем данное тело к указанной группе. Например, полученным результатом в первом случае будет флюгер, а во втором — флаг, прикрепленный к палке.
Иногда требуется присутствие в сцене обычной веревки. Реактор позволяет быстро и просто ее смоделировать. Для этого необходимо выбрать кривую, которая соответствует форме веревки, и создать группу Rope Collection. Затем при помощи модификатора Reactor Rope превратим сплайн в настоящую веревку. Когда один конец веревки нужно закрепить, перед модификатором Reactor Rope применяем стандартный Spline Select и выделяем те вершины, которые мы желаем закрепить. А если нам нужна не веревка, а ткань, выполняем аналогичные действия, только вместо модификатора Reactor Rope применяем Reactor Cloth.
Сергей БОНДАРЕНКО,
Марина ДВОРАКОВСКАЯ, blackmore_s_night@yahoo.com
Компьютерная газета. Статья была опубликована в номере 03 за 2003 год в рубрике soft :: графика