3ds Max & Havok >> Shockwave 3D, или Дерни за веревочку!

"...Come crawling faster
obey your Master..."
Master Of Puppets © Metallica, 1986

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

В этом уроке на примере марионетки рассматривается использование модуля динамического моделирования reactor пакета 3ds max, а также экспорт сцен в Director и создание интерактивных презентаций в формате Shockwave 3D, одном из стандартов представления трехмерной графики в Интернете

Урок состоит из трех частей. Первая часть посвящена настройке и анимации модели марионетки с использованием модификатора reactor Rope, вторая - настройке сцены с использованием вспомогательных объектов reactor Dashpot и ее экспорту в формат Shockwave 3D, третья - созданию интерактивной презентации в Director

Часть 1. Использование модификатора reactor Rope

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

Начиная с шестой версии, в составе пакета 3ds max поставляется reactor 2. Нельзя не отметить, что вторая версия модуля динамики заметно отличается от предыдущей своими возможностями и удобством использования. Не является здесь исключением и модификатор reactor Rope, поэтому в этой части урока нам понадобится 3ds max 6 или более поздняя версия пакета

Для того чтобы объекты сцены участвовали в расчетах динамики, их необходимо включить в состав коллекций. Нам понадобятся Rigid Body Collection коллекция твердых тел и Rope Collection коллекция веревок

  • Создайте коллекцию твердых тел RBCollection01 (Create panel > Helpers > reactor > RBCollection)
  • Создайте коллекцию веревок RPCollection01 (Create panel > Helpers > reactor > RPCollection)
  • В свойствах объекта RBCollection01 добавьте объекты head, handle и floor в коллекцию

Для того чтобы на объект сцены действовала сила тяжести, его масса должна быть отличной от нуля

  • В свойствах объекта head (Utilities panel > Utilities rollout > reactor > Properties rollout > Physical Properties) укажите:
    - Mass: 10.0
  • Нажмите кнопку Preview in Window (Utilities panel > Utilities rollout > reactor > Preview and Animation rollout > Preview in Window)

На экране появится окно предварительного просмотра. Чтобы запустить расчет динамики, нажмите клавишу P на клавиатуре. Если все настроено правильно, голова марионетки упадет на пол. Перетаскиванием правой кнопкой мыши можно поднять голову и снова ее уронить

Теперь давайте настроем нить, соединяющую так называемое коромысло с головой марионетки. Для создания веревки в reactor к сплайновому объекту необходимо применить модификатор reactor Rope и добавить его в коллекцию веревок

  • Выберите сплайн rope_head и примените к нему модификатор reactor Rope (Modify panel > Modifier List > reactor Rope)
  • В свойствах модификатора reactor Rope укажите:
    - Rope Type: Constraint
  • В свойствах объекта RPCollection01 добавьте объект rope_head в коллекцию

Настало время прикрепить верхний конец нити к коромыслу

  • В свитке Constraints модификатора reactor Rope объекта rope_head добавьте ограничение Attach To Rigid Body

  • Перейдите на уровень Vertex в стеке модификаторов и выберите самую верхнюю вершину сплайна rope_head

  • В свитке Attach To Rigid Body укажите:
    - Rigid Body: handle
  • Точно также прикрепите нижний конец нити к голове и нажмите кнопку Preview in Window

Голова марионетки свободно покачивается на своей нити max8_ostrich_02.max. Если у Вас установлен 3ds max 5, Вы также имеете возможность добиться подобного эффекта, потратив некоторое время на изучение стека модификаторов объекта rope_head в файле max5_ostrich_02.max

Аналогично настройте остальные нити, шею и ноги марионетки. Не забудьте добавить объекты body, foot_left, foot_right в коллекцию RBCollection01, а объекты rope_body, rope_left, rope_right, neck, leg_left, leg_right - в коллекцию RPCollection01. Полностью готовые к анимации сцены в файлах max8_ostrich_03.max и max5_ostrich_03.max

Для того чтобы наша марионетка ожила, достаточно анимировать всего один объект handle

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

  • В свойствах объекта handle (Utilities panel > Utilities rollout > reactor > Properties rollout > Physical Properties) укажите:
    - Unyielding check box: on

Теперь в окне предварительного просмотра наша марионетка выполняет команду "Выйти из строя на два шага!"

Все готово для автоматического создания ключей анимации в 3ds max

  • Нажмите кнопку Create Animation (Utilities panel > Utilities rollout > reactor > Preview and Animation rollout > Create Animation)

Финальная сцена первой части урока в файлах max8_ostrich_05.max и max5_ostrich_05.max

Часть 2. Использование вспомогательных объектов reactor Dashpot и экспорт в формат Shockwave 3D

Особенностью модуля reactor 2 является отсутствие возможности экспорта настроек динамики сцены в файл формата Havok HKE (Havok Exporter) для последующего использования в Director. Поэтому в этой части урока используется 3ds max 5 с установленным модулем reactor 1. Кроме этого необходимо установить дополнительный модуль Shockwave 3D Exporter, которого нет в стандартной поставке 3ds max 5





Из-за того, что не поддерживается экспорт сплайнов в формат Shockwave 3D, мы заменим их на цепочки объектов reactor Rigid Bodies, связанных между собой объектами reactor Dashpot

  • Создайте две копии Cylinder01 и Cylinder02 объекта CylinderGray и расположите их вдоль сплайна rope_head

  • Создайте три вспомогательных объекта Point01, Point02, Point03 (Create panel > Helpers > Standard > Object Type rollout > Point)
  • Создайте три объекта reactor Dashpot (Create panel > Helpers > reactor > Object Type rollout > Dashpot)

В результате должно получиться, что-то похожее на max5_puppet_02.max

  • В свойствах объекта Dashpot01 укажите:
    - Body A: handle
    - Body B check box: on
    - Body B: Cylinder01
    - Point: Point01
  • В свойствах объекта Dashpot02 укажите:
    - Body A: Cylinder01
    - Body B check box: on
    - Body B: Cylinder02
    - Point: Point02

  • В свойствах объекта Dashpot03 укажите:
    - Body A: Cylinder02
    - Body B check box: on
    - Body B: head
    - Point: Point03

  • В свойствах объекта RBCollection01 добавьте объекты Cylinder01 и Cylinder02 в коллекцию твердых тел
  • В свойствах объектов Cylinder01 и Cylinder02 укажите:
    - Mass: 0.1

Первая "нить" готова, файл max5_puppet_03.max

Создавать оставшиеся три нити, шею и ноги подобным образом было бы довольно скучно и утомительно. И здесь нам поможет MAXScript - замечательное средство пакета 3ds max, одним из применений которого является автоматизация повторяющихся последовательностей действий над объектами сцены. Написание скриптов само по себе заслуживает быть темой отдельного урока, поэтому скажу только, что мною был написан скрипт RopeDashpoter, который мы будем использовать далее

  • Еще раз загрузите сцену max5_puppet_01.max
  • Выполните скрипт dg_ropedash.mse (Utilities panel > Utilities rollout > MAXScript > MAXScript rollout > Run)
  • Выберите RopeDashpoter из списка Utilities
  • В свойствах RopeDashpoter укажите:
    - Rope Path: rope_head
    - Link Object: CylinderGray
    - Count: 3
    - HK Mass: 0.1

  • Нажмите кнопку CLONE

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

  • В свойствах rope_headDashpot01 укажите:
    - Body A: handle

  • В свойствах rope_headDashpot04 укажите:
    - Body B: head

  • В свойствах объекта RBCollection01 добавьте объекты rope_headLink01, rope_headLink02 и rope_headLink03 в коллекцию

Несмотря на то, что мы увеличили количество звеньев, создание "нити" с использованием скрипта отняло заметно меньше времени и усилий, файл max5_puppet_04.max. Как говорила мудрая птичка из одного мультфильма, лучше день потерять, а потом за пять минут долететь ;)

Создав оставшиеся три нити, шею и ноги аналогичным способом, мы получим сцену, готовую к экспорту в Director, файл max5_puppet_05.max

  • Нажмите кнопку Export to File, укажите имя puppet.hke и экспортируйте настройки динамики сцены (Utilities panel > Utilities rollout > reactor > Animation and Export rollout > Export to File)
  • Выполните экспорт сцены в формат Shockwave 3D в файл puppet.w3d (File menu > Export > Select File To Export dialog > Save As Type > Shockwave 3D Scene Export (*.W3D))

Итоговые файлы второй части puppet.hke и puppet.w3d

Часть 3. Создание интерактивной презентации в Director

Чтобы иметь возможность использовать все настройки динамики сцены, которые мы подготовили во второй части, нам понадобится Havok Xtra - полностью интегрированный движок моделирования физики твердых тел для Director

Havok Xtra обеспечивает поддержку импорта Havok HKE (Havok Exporter) файлов в Director, что позволяет создавать и настраивать физические сцены в пакетах 3D моделирования, таких как 3ds max, без необходимости дополнительного программирования Lingo скриптов

  • Загрузите Windows версию Havok Xtra и распакуйте файлы control.cst и setup.cst в папку Director MX\Libs\Havok

  • Запустите Director и импортируйте файлы puppet.hke и puppet.w3d (File menu > Import)
  • Откройте библиотеку Havok Setup (Code > Library > Havok > Setup)
  • Перетяните мышью скрипт Havok Physics (HKE) из окна Code:Library в окно Cast:Internal
  • Откройте библиотеку Havok Control (Code > Library > Havok > Control) и перетяните скрипт Move Model в окно Cast:Internal

  • Откройте библиотеку 3D Triggers (Code > Library > 3D > Triggers) и перетяните скрипт Mouse Left в окно Cast:Internal
  • Перетяните Shockwave 3D сцену puppet.w3d из окна Cast:Internal в окно Stage
  • Перетяните скрипт Havok Physics (HKE) из окна Cast:Internal в окно Stage, в появившемся окне укажите Substeps: 50 и нажмите кнопку ОК
  • Перетяните скрипт Move Model из окна Cast:Internal в окно Stage и в появившемся окне нажмите кнопку ОК
  • Перетяните скрипт Mouse Left из окна Cast:Internal в окно Stage и в появившемся окне нажмите кнопку ОК
  • Нажмите кнопку Play в окне Stage
  • Выберите пункт Publish в меню File

Итоговый файл третьей части puppet.dir

P.S.: "NVIDIA и Havok объявили о намерении продемонстрировать первое в индустрии решение по созданию физических эффектов, которое полностью работает на графическом процессоре, на Конференции Разработчиков Игр (GDC) в Сан-Хосе, Калифорния (с 21 по 24 марта)

Результатом долговременного инженерного сотрудничества Havok и NVIDIA стало данное новое ПО от Havok, названное Havok FX, которое эмулирует детализированные физические явления в компьютерных играх при работе на графических процессорах, таких как NVIDIA GeForce 7 или 6, а также в многопроцессорном режиме NVIDIA SLI. Первая версия Havok FX в данный момент доступна только для некоторых разработчиков, а широкая доступность ожидается летом 2006 года

Продукция Havok была использована при создании более 150 игр, включая Halo 2, Perfect Dark Zero, Age of Empires III, Marvel Nemesis и Mercenaries. Поэтому не исключено, что и новую разработку ждет большое будущее" © whatis.ru, iXBT

454 0 850 18
25
2006-05-06
Если дашь ссылку на macromedia director, то проголосую на 5.
2006-05-06
Если дашь ссылку на macromedia director, то проголосую на 5.
2006-05-06
Помоему здесь нече особого нет, я попытался отправить свой урок, но меня культурно попустили, обьяснивши это тем что "на сайте уроков для новичков достаточно, а професиональных- наоборот, мало", а в этом уроке нет ниче особого, и его взяли!!! Каждый человек прочитав хелп или еще чё нибудь по реактору может свободно токое замутить!
2006-05-07
урок ниочем. просто тутор.
2006-05-07
забавный урок... авот только практического применения не вижу. оценки средние... стараляся всётаки :)
2006-05-07
Good! Interesting! With brain! GIW!
2006-05-07
Пожалуста дай ссылочку дай на прогу!!!!!!
2006-05-10
Интересно, но в принципе неприменимо....
2006-05-10
Урок очень даже неплохой. Но я бы не стал использовать стандартные директорские триггеры которые слишком универсальны для какой либо конкретной задачи и поэтому 99 процентов программного кода в них всегда лишние. А это лишние десятки килобайт, что не есть гуд. Хотя конечно для человека непросвещенного написать самому что то типа мини движка очень затруднительно. Мне кажется что нужно было указать на сей недостаток стандартных акшонов и триггеров.
2006-05-10
Хороший урок. Видно человек идет в ногу со временем.Sah@rch не согласен что это урок для новичков.
2006-05-10
to skif, Cubus... если действительно интересно, примеры применения здесь: http://director-online.com/havok/demos/demo-cardemo.html http://director-online.com/havok/demos/demo-pool.html
2006-05-10
to Михаил Куркубет... я как раз и хотел показать, как "создавать и настраивать физические сцены... без необходимости дополнительного программирования Lingo скриптов"... похоже, на этом сайте не так уж и много "CG-художников технологов" © рендер.ру ;)
2006-05-10
d|g Пример с марионеткой выбран не очень удачно. Не интересно безцельно дергать страуса за веревочки. Вот если бы ты из пушки замок бомбил и тот бы разваливался... В общем актуальность хромает. Если есть еще какие нить твои работы связанные с шоквэйв3д, дай линк, иногда занимаюсь примерно тем же.
2006-05-11
to Михаил Куркубет... по поводу пушек и замков, мне всегда было интереснее что-нибудь создавать, чем разрушать =) в любом случае, большое спасибо за Ваши конструктирвные отзывы!
2006-05-11
А по-моему неплохо!!!
2006-06-08
не актуально!
2006-06-13
Имо урок интересен именно подходом. Кто вам мешает заменить страуса на все-любое и сделать мини-игру?(а это очень сейчас популярно- легкие игры на основе физики). И уж какую презентацию можно сделать с такой физикой - только бы фантазии на канала интернета хватило. Достаточно актуально для слишкок уж затянувшейся интеграции реалтаймового 3Д на просторы интернета. Спасибо.
2006-06-13
Совсем даже неплохо!!! Больше интересных уроков!!! Слава 3D Max'у!!!
2006-06-27
Shockwave 3D-матч: Украина - Швейцария 0:0 (3:0 по пенальти): http://news.bbc.co.uk/hi/russian/in_depth/2006/worldcup/virtual/newsid_5114000/5114224.stm всех болельщиков с победой!!! ;)
2006-06-28
А если макс 8, а не 5, то вообще никак нельзя экспорт физики сделать?
2006-08-02
Просто нужно найти для способа нужное применение.
2006-09-11
Узнал много нового.
2006-09-12
Интересный способ.
2006-09-12
Побольше бы таких интересных уроков.
2006-10-25
Как развлечение - нормальный способ.
RENDER.RU