Разрушение 3D объектов в Maya с помощью плагина Blast Code


АвторЗдравствуйте.
Меня зовут Владимир.
Начинал изучение 3D с 3D Max, потом узнал о Maya.
С тех пор для создания 3D работаю исключительно в этом пакете.
Сначала создавал статичные сцены для архитекторов, потом начал активно изучать анимационные возможности пакета. Визуализирую в основном с помощью Mental Ray.
При создании работ пользуюсь еще такими приложениями как Adobe Illustrator, Photoshop, Poser, Bryce, Real Flow.
Имею огромное желание применить свои навыки по 3D в каком-нибудь серьезном проекте.

Разрушение 3D объектов в Maya с помощью плагина Blast Code.

Этот урок я решил написать в связи с тем, что когда сам столкнулся с похожей проблемой, на известных мне ресурсах никакой информации не нашел и пришлось разбираться во всем самому. Пускай данный урок поможет другим в изучении данного плагина.

Я думаю перед многими трехмерщиками неоднократно ставилась задача разрушать 3D объекты. Лично я люблю Maya за то, что в ней можно сделать практически все стандартными инструментами. Но предположим нам нужно быстро взорвать сложный объект, при разрушении которого появляются различные трещинки, разломы, много осколков. Усложним задачу тем, что осколки должны взаимодействовать друг с другом, или с посторонними предметами. На выручку придет плагин Blast code от FerReel Animation Labs. Уникальность данного плагина заключается в том, что он позволяет разрушить объект по нарисованной заранее текстуре, или можно сказать сетке разрушения. И это только одно из его многочисленных достоинств. Из замеченных мной недостатков выделим такой – разрушаемый объект должен быть изначально смоделирован только на основе NURBS поверхностей. Еще хочу сказать, что данный материал будет легче освоить тем, кто имеет представление о частицах и динамике .

Мы рассмотрим работу плагина на примере фужера пробиваемого пулей. Я не претендую на оригинальность идеи - наверняка что-то похожее в сети есть.
При создании анимации использовались: Maya 7.0.1, BlastCode 1.2, Real Flow 4.1.

И так представим себе, что на столе стоит фужер с водой или еще с чем:). Его пробивает пуля. На входе пуля проделывает небольшое отверстие, на выходе разрывает же наш фужер по полной программе. Осколки разлетаются и падают на стол. Конечно в реальных условиях наверняка фужер не устоял бы на месте и улетел (разве что он был бы пустой и скорость пули очень велика). Но давайте этот момент проигнорируем и оставим все на своих местах.
И так. Разделим работу на несколько этапов. Первый – подготовка объекта, второй – настройка разрушения, третий – настройка динамики, четвертый – оптимизация сцены.

Этап первый – подготовка объекта.

1. Создаем новый проект и называем его например Glass. В папке с проектом создаем еще одну папку с названием BCData (позже сделаю разъяснение).

2. Рисуем профиль нашего будущего фужера, делаем revolve, переименовываем объект в Glass, удаляем историю.

image1

3. Выделяем во вьюпорте наш Glass, открываем BlastCode и нажимаем кнопку New Contlor во вкладке Control.

image2

Теперь Glass появился в списке Control Source, а сам фужер закрасился в зеленый цвет.

4. Далее опять выделяем во вьюпорте наш фужер и открываем в Blast Code вкладку Damage. Жмем кнопку CreateSlab.

image3

5. Теперь возвращаемся в Control, выделяем в списке Control Source наш Glass, а в списке что по ниже (Control Target Layer) – Blayer1. Далее в секции Target Visibility жмем All Off.

image4

Давйте рассмотрим что-же у нас вышло.
Откройте Outliner и посмотрите на получившуюся структуру.

image5

Если объяснить коротко, то после произведенных манипуляций, Blast Code на основе нашей Nurbs поверхности создал ее полигональную копию, которая состоит из основного разрушаемого объекта (Damage), первичных и вторичных осколков (Primary&Secondary debris). Это и будут те объекты с которыми пойдет наша дальнейшая работа.

Этап второй – настройка разрушения.

Не обращайте пока внимание на вид нашего фужера. Сначала мы будем работать с его упрощенной или если можно сказать грубой версией.
1. Раскройте в Outliner весь список и выделите Damage1.
2. Теперь в Attribute Editor найдите вкладку Slab1.
3. Изменим такие параметры:
Mesh Type – Simple . Это параметр отвечающий за настройку полигональной сетки объекта. В последствии мы заменим его на Hard Quads.

Mesh Thickness (0.100) Это толщина получившейся оболочки. Теперь наш фужер приобрел более правильную форму. Но даже после этого можно наблюдать некоторые дефекты модели. Все наладиться после изменения параметра Mesh Type на Hard Quads.

image6

Дальше ищем и настраиваем такие параметры.
Slab Fracture Definition -> Fracture Option -> Fracture File
Fracture File: sourceimages\lesson6_cracks_lores.iff

image7

Таким образом мы указали, что наш объект будет разрушен по нарисованной текстуре.
В качестве текстуры используем файл из примеров самого Blast Code (C:\Program Files\BlastCode1.2\examples\sourceimages\ lesson6_cracks_lores.iff)

Вы так же можете подготовить такой файл самостоятельно. Все зависит от Вашей фантазии.
(Можно достичь хорошего результата если вместо Fracture File выбрать Fracture Map и назначить процедурную карту Leather. Create Render Node ->Textures ->3D Textures ->Leather. Только в настройках Leather необходимо будет изменить цвета на черно-белые и поэкспериментировать с размерами ячеек.

image8


Будем считать это лирическим отступлением. Продолжим.

Раскрываем вкладку Simple Mesh и включаем Crack Flag.
Crack Threshold (0.100)
Crack Upper Amount (0.600)

image9

Следующая вкладка Primary Debris Attributes:

Debris Tensile (0.100)

Debris Random Rotation (0.250)
Debris Random Trajectory (0.250)
Debris Random Velocity (0.350)

image10

следующая Secondary Debris Attributes:

Sec Debris snap Amt (12)

Sec Debris Width (0.1) (Размер мелких осколков можно немного увеличить по Вашему усмотрению)

Sec Debris Rand Traj (1.0)
Sec Debris Rand Vel (0.5)

image11

С настройками сетки разрушения закончили. Вы конечно же можете поэкспериментировать с параметрами самостоятельно, но лучше это сделать после полной настройки, так как сейчас вы не увидите никаких особых изменений.

Настраиваем детонаторы (далее Bomb Locator).
Как мы уже говорили в начале урока у нас будет два детонатора. Один для создания входного отверстия от пули, другой для разрушения фужера на выходе.

Открываем Blast Code, раскрываем вкладку Explosive и жмем на кнопку Locator Explosive. Теперь нам нужно указать на какой из объектов в сцене он будет действовать (у нас объект один – Glass). Для этого выделяем Explosive1 и в списке пониже делаем клик на объекте Glass.

image12

Таким же образом создаем еще один локатор и назначаем ему опять же взаимодействие с Glass.

Далее во вьюпорте размещаем наши локаторы по усмотрению. Получилось примерно следующее.

image13

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

Настроим локаторы. Только обратите внимание, что в Outliner наш BombLocator соответствует Explosive в Attribute Editor.
Еще раз определимся: BombLocator1 – для отверстия на входе, а BombLocator2 – основной детонатор для разрушения фужера на выходе.
Открываем Attribute Editor, выделяем BombLocator1, находим вкладку Explosive1 .
Изменяем такие параметры:
включаем Deform Flag, остальное выключаем.

Magnitude (5.0)
Size (1.1)
Velocity (30.0)

Start (1.0)
Включаем Use Origin Flag и указываем направление взрыва по осям:

Origin (-100.000) (0.000) (0.000)

image14

Для BombLocator2 – настройки такие:

Magnitude (5.0)
Size (5.0)
Velocity (30.0)

Start (1.0)
Origin (-100.000) (0.000) (0.000)

Поставьте в настройках анимации 150 кадров и скорость 24fps. Запустите анимацию и увидите результат.
Если Вы все сделали правильно у Вас получиться примерно такая картина.


image15

Можно еще более интересно настроить разрушение. Перед тем как объект взорвется пускай он сначала даст трещины.
Для этого настроим Object Explosive.
Откройте Blast Code и перейдите на вкладку Explosive.
Выберите Explosive1, нажмите Select Explosive, затем Object Explosive и свяжите новый Explosive3 с Glass.

image16

Выделите Explosive3 и нажмите на Select Explosive.
В Attribute Editor у Вас появиться Explosive3.

Настройки такие:
Включаем Crack Flag, остальное выключаем.
Magnitude (7.0)
Size (10.0)
Start (1.0) Изменяйте параметр Start во всех Explosive по своему усмотрению.

image17


Выделите в Outliner объекты Damage, PrimaryDebris, SecondaryDebris и назначьте им материал Blinn.

Со взрывом все.

Третий этап – настройка динамики.

Здесь есть несколько нюансов которые нельзя игнорировать.
Во первых создатели Blast Code рекомендуют почаще нажимать Save, особенно после создания новых Rigid Bodies.
Во вторых для корректности дальнейших просчетов необходимо периодически перезапускать Maya. Именно Maya.
Так как перезапуск только сцены может не принести желаемого результата.
И в третьих – не рекомендуется создавать слишком много Rigid Bodies (Слишком много –это больше сотни).
От себя скажу такое. Эта цифра зависит только от мощности Вашего компьютера.
После удаления избыточных данных Вы сможете поставить любую скорость воспроизведения анимации, но при просчете динамики ставьте в настройках (1)fps, а то и меньше.
Приступим.

Создадим поверхность на которой стоит наш фужер - Polygon Plane. Переименуем в Plane, отрегулируем размеры, снимем с него выделение и добавим в сцену Gravity cо стандартными параметрами.
Далее открываем Blast Code, вкладка Particle. Внизу жмем кнопку Update List. Выделяем DebrisParticleShape1 и gravityField1. Нажимаем Attach Field.

image18

После запуска анимации Вы увидите, что осколки падают вниз, но проваливаются сквозь нашу плоскость.
Вернитесь на стартовый фрейм.

Настроим Plane.
Выделяем нашу плоскость, в Blast Code во вкладке Particle жмем Update List. Выделяем во вьюпорте Plane, а в Blast Code жмем New Collision.
Затем выделяем появившийся PlaneShape в списке Collisions, выделяем DebrisParticleShape1 в списке Particles и жмем на Attach Collision. Не пропустите этот момент.

image19

Далее выделяем во вьюпорте наш Plane и назначаем ему Create Passive Rigid Body (вкладка Soft/Rigid Bodies в Maya). Перезагружаем Maya.
Запускаем сцену заново. Воспроизводим анимацию и останавливаемся после того как все осколки отделяться от фужера.

В Blast Code переходим на вкладку Control, выделяем в Control Source наш Glass, а в Control Target Layer – Blayer1.
Жмем на Update Rigid Bodies, затем на Rigid Solver.

image20

Теперь перейдите в Blast Code на вкладку Rigid Body.
Нажмите Update List. Затем в списке Solvers выделите S2_rigidSolver, а в списке Rigid Bodies – все строки DebrisRigidBody, а так же снизу GravityField1. Нажмите Attach Field.

image21

И еще один очень важный момент. Выделите Plane, откройте Attribute Editor и найдите вкладку RigidBody1. Раскройте свиток Perfomance Attributes и измените значение Collision Layer на (-1).

image22

Перезагружаем Maya и открываем нашу сцену. Теперь мы видим, что все осколки отталкиваются от поверхности Plane, и друг от друга. Если вдруг некоторые осколки продолжают проваливаться сквозь Plane или не взаимодействуют между собой – повторите предыдущие действия:
остановите анимацию в том месте где заметили ошибки, в Blast Code перейдите на вкладку Control, выделите в Control Source наш Glass,а в Control Target Layer – Blayer1.

Жмем на кнопку Update Rigid Bodies, затем на кнопку Rigid Solver. Дальше перейдите в Blast Code на вкладку Rigid Body.
Нажмите Update List. Затем в списке Solvers выделите S2_rigidSolver, а в списке Rigid Bodies – все строки DebrisRigidBody, а так же снизу GravityField1. Нажмите Attach Field.
На вкладке Particle выделите еще раз DebrisParticleShape1 и PlaneShape. Нажмите Attach Collisions.
Перезапустите Maya.
Теперь когда все нормально работает, откройте вкладку Slab1 и измените Mesh Type (Simple) на (Hard Quads). Столкновения станут более правильными и аккуратными. Да и фужер наш преобразиться.

Четвертый этап – удаляем избыточные данные и записываем результат наших действий в специальный файл.

1. Расположите ползунок таймера анимации в самом начале. Выберите оптимальную скорость для корректного просчета динамики.
2. Откройте в BlastCode вкладку Control. В самом низу есть секция Blast Data Handler.
3. Нажмите кнопку Path и укажите папку BCData, которую мы создали в самом начале урока. Нажмите Set BlastDataHandler Path.

image23

4.Выделите в Control Source наш Glass, нажмите кнопку Record, затем воспроизведите анимацию.
5. Остановите анимацию на последнем кадре и самое главное - НЕ ВОЗВРАЩАЯСЬ НА СТАРТОВЫЙ ФРЕЙМ нажмите в Blast Code кнопку Play.

image24

6. Еще раз воспроизведите анимацию вперед-назад и Вы увидите, что все работает намного быстрее и компьютер не тратит ресурсы на вычисление. Это значит что все сделано правильно и данные записаны в файл BlastData.blt
7. Откройте в Blast Code вкладку Misc и свиток Delete Blast Code Engine. Нажмите кнопку Delete Blast Code Engine, только имейте ввиду, что после этого откат назад и редактирование динамики невозможны.

image25

Вот и все. Даже несмотря на возможную сложность просчета, наша анимация стала очень подвижна. Теперь можете дорабатывать сцену для последующей визуализации.

Несколько советов напоследок.

  1. Если Вы воспроизведете этот урок, то увидите что осколки не отталкиваются от ножки фужера, а проникают насквозь. Это происходит потому что мы не преобразовали фужер в Passive Rigid Body. Но тут есть один нюанс. На нулевом кадре анимации, наш Damage1 имеет одну структуру, а уже на кадре №1 и далее совсем другую. Поэтому, чтобы не было ошибок, не определяйте Damage1 как Passive Rigid Body, а сделайте следующее. Создайте его копию (в таком виде когда от него отделились осколки), сохраните в отдельный файл, удалите все лишнее, верните в сцену под другим названием. Затем уже этот объект сделайте Passive Rigid Body, и в Render Stats (Attribute Editor) снимите галочку Primary Visibility.
  2. Если Вы захотите продолжить работу с анимацией в Real Flow – имейте ввиду, что эта программа работает корректно только с полигонами преобразованными в Triangulate. Такое преобразование можно сделать в конце настройки Вашей сцены.
  3. Хотя сцена делалась в Maya7.0.1 (BlastCode1.2), пользоваться ею можно и в других версиях Maya. Что бы это было возможно установите новую версию Maya bcplayer (downloads На официальном сайте www.blastcode.com). У кого есть возможность пользуйтесь BlastCode 1.5.
  4. Не забывайте всем пассивным телам назначать значение Collision Layer (-1).

Готовая анимация здесь: www.beatle.ukrwest.net/glass.rar

Вот пожалуй и все. И пускай разные взрывы с разрушениями будут происходить у Вас только в виртуальной реальности.
beatle

423 0 850 27
28
2006-12-01
Тоже самое что на оф сайте кроме кожи
2006-12-01
Ага... Не хорошо получается тогда однако.
2006-12-01
то есть, те же яйцы?
2006-12-01
Урок написан не для тех кто и так все знает, а в основном для тех кто понятия не имеет об этом Blast Code. А информацию я действительно брал из мануалов самого производителя и этого не скрываю.
2006-12-01
Да нормально всё.... многим действительно удобнее и понятнее будет имено здесь прочитать и имено на русском
2006-12-03
Урок хороший.
2006-12-03
"перевод" хелпа тоже нужен... оценки хорошие.
2006-12-08
Хороший урок)....а ты не мог бы дать ссылочки на RealFlow и Blast Code?.....ICQ 252943410
2006-12-13
По моему очень даж не плохой урок. Я уже давно хотел плнять как именно это делать
2006-12-13
Спасибо всем за отзывы. Очень приятно, что урок кому-то полезен. Значит работал не зря. Еще раз спасибо.
2006-12-20
Прикольно. Но, физика... Стакан намертво приклеен к полу, в нем минимум ртуть, разлет осколков при попадании пули в него кончно же был бы иной. А как примерно тоже самое сделать в максе?
2006-12-20
ZjjZ Согласен. С физикой не все в порядке в том плане, что фужер в анимации остался на месте, а разлетелись только осколки. Но в этом уроке делался акцент на Blast Code, а не на реалистичности поведения самого фужера (о чем в начале урока я и упоминал). А как сделать это в Максе, я думаю лучше обращаться в форум по Максу. Скажу честно - в Максе я подобных задач не решал.
2006-12-20
Толку от урока если плагина нету....народ если кто то уже его нашол и запустил дайте ссылку плиз. icq 486 770 453
2006-12-20
Quartz. Кто ищет, тот всегда найдет. А толк о т урока будет, если уж заинтересовало.
2006-12-20
молодца хороший урок !
2006-12-20
(А толк о т урока будет, если уж заинтересовало.) Та урок всё супер...плагин злой)))
2006-12-21
Огромное Спасибо beatle 8-))) Прошол урок, всё настроил всё пашет..вот это сижу и думаю что бы еще подорвать)
2006-12-21
А мона как то настраивать точность вращений в самом БС? А то некоторые куски во круг плоскости вращаются! Как бы от своего центра масс.
2006-12-21
Получив большое к-во писем с вопросами по плагину и проанализировав их, решил написать об основных ошибках, которые допускаются при его использовании. Читайте внимательно урок. Даже некоторые на первый взгляд незначительные рекомендации могут на самом деле оказаться очень важными моментами. В основном возникают вопросы по "неправильному поведению" осколков. И так. Если осколки проваливаются сквозь назначеное Вами PassiveRigidBody значит возможны следующие варианты: 1. Для PassiveRigidBody не изменен параметр Collision Layer . Он должен быть именно (-1), а не 0. 2. Возможно не все осколки преобразованы в DebrisRigidBody. Для этого повторите этот фрагмент урока: В Blast Code переходим на вкладку Control, выделяем в Control Source наш Glass, а в Control Target Layer – Blayer1. Жмем на Update Rigid Bodies, затем на Rigid Solver. Эту процедуру желательно проделать именно тогда, когда некоторые осколки "застряли" в Plane. 3. После каждого назначения Rigid Bodies обязательно перезапускайте Maya. 4. Во время прсчета динамики воспроизводите анимацию очень медленно и лучше не вручную, а укажите скорость например 0,2 кадра в секунду и жмите Play. 5. Имейте ввиду, что иногда проблема может быть и не в Ваших неправильных действиях, а в самой Maya или Blast Code. Например не работает CreateSlab, и т.п. Вероятно глюк Maya или BC. Помогает переустановка плагина или сброс всех настроек в Maya. Ну вот наверное и все. Спасибо всем за отзывы.
2006-12-22
Народ проста выставляйте играть каждый кадр...
2006-12-31
класс
2007-01-06
Перевод не перевод качество, класс))
2007-07-02
В мануале написано колизия возможна либо через particle либо через rigid body а что тут в уроке я вообще запутался сначла одно потом другое, и что за чем с перезагрузками маи ? неужели всё так каряво
2008-07-31
Народ проблема немогу скачать конечный проект если кто может намыльте vasili_123@ayhoo.com не получается *В Blast Code переходим на вкладку Control, выделяем в Control Source наш Glass, а в Control Target Layer – Blayer1. Жмем на [i][b]Update Rigid Bodies[/b][/i], затем на Rigid Solver.* просто нет стоит Update Rigid Bodies и потом даже после выделения после нажатия Rigid Solver во вкладке Rigid Body ничего не появляется просто тупик но ещё во вкладке Rigid Body стоит Slab1 что за незнаю немогу найти вобще тупик может кто подскажет что делать или что я не правильно делаю?? или плаг какойто не тот...
2008-07-31
наверное у меня не мегатон будем искать....
2008-08-06
как жаль что здесь нет ответов:( нашел BlastCode 1.2 получился урок хорош если комуто хочется большего качайте с www.blastcode.com видео туторы....:)
2009-03-22
Нормульный урок, только загвоздка. Сделал всё точно по уроку, но в середине проблема - осколки прикасаясь к поверхности пола отскакивают и улетают в небо!!!! Ну и где-то там падают, гравитация же на месте. Обыскал много настроек - ноль эффекта. Подскажи пожалуйста что за такое проишествие? (Maya 2009, BC 1.6)
2010-03-06
крутой плагиночек. попробую. готовая анимация не качается.
RENDER.RU