Уроки Maya

       

Flag


Имитация развевающегося флага

Имитация развевающегося флага

с помощью модуля CLOTH в Maya 3.0

Уроки по иммитации развевающейся ткани или флага достаточно часто встречаются в Интернете. Но попыток сделать это с помощью модуля

Cloth

нам еще не встречалось. Поэтому мы хотели бы поделиться своим опытом, полученным при изучении сцен из примеров к модулю

Cloth

еще в

Maya 2.0

. Хотя сцена с развевающимся флагом входила в комплект поставки



Maya

, описания того как сделать эту сцену нам не встречалось.

Итак, приступим.

Шаг 1

.

Создайте новую сцену, а лучше всего проект под любым названием. Например:

flag

.

Убедитесь, что модуль

Cloth

у Вас подгружен. Для этого откройте окно

Window > Settings/Preferences > Plug-In Manager

и проверьте включен ли

plug-in CpClothPlugin.mll

. Если нет, то включите его.

Шаг 2.

Создайте

Polygonal Plane

с параметрами:

Width - 7

Height - 14

Subdiv.Width - 5

Subdiv.Height - 10

Переместите его на 7 единиц по оси Y и на 9 единиц по оси Z, также поверните на –90 градусов по оси X. Переименуйте в "

windSourse

".

Создайте

Polygonal Cylinder

с параметрами:

Radius - 0.1

Height - 12

Остальные параметры по умолчанию. Также переместите его на 6 единиц по оси Y и на 5 единиц по оси Z. Переименуйте во "

flagshtok

".

Создайте 4 кривые с

Curve Degree - 1 Linear

, так чтобы они пересекались в конечных и начальных точках (согласно требованиям модуля

Cloth

) и описывали прямоугольник с вершинами в точках:

1 вершина -

(0, 11, 4.5)

2 вершина -

(0, 11, -9)

3 вершина -

(0, 5, -9)

4 вершина -

(0, 5, 4.5)

Сгруппируйте эти кривые в группу "

curves_for_Flag

" и временно сделайте эту группу невидимой.

Шаг 3.

Выделите план

windSourse

и сделайте его источником частиц. Для этого, выделив

windSourse

, перейдите в Меню

Dynamics

, выберите

Particles > Emit from Object

. После этого у




windSourse


появится потомок



emitter1


. Выберите его и в



Channel Box


измените следующие параметры:



Emitter Type - Surface

Rate - 2

Scale Rate by Object - on

Speed - 0.05


Переименуйте



emitter1


в



emitterWind


.

Проиграйте анимацию и убедитесь что частицы двигаются в отрицательном направлении оси Z. Выделите созданные при этом частицы



particle1


переименуйте в "



particleWind


", вызовите



Attribute Editor


, откройте закладку



Per Particle (Array) Attributes


и, если отсутствует раздел



lifespanPP


, добавьте этот атрибут. Для этого выполните команду меню



Attributes > Add Atributes


, в появившемся окне выберите закладку



Particle


, найдите параметр



lifespanPP


и нажмите кнопку



Add


. Закройте окно



Add Attributes


.

В появившемся поле



lifespanPP


нажмите Правую Кнопку Мыши (ПрКМ) и удерживая ее в контекстном меню выберите



Creation Expression


. В появившемся окне



Expression Editor


в поле



Expression


наберите следующее:



particleWindShape.lifespanPP = 5;


и нажмите



Create


.

Затем переключите закладку



Particle


на



Runtime


и введите следующее:



vector $pos = particleWindShape.position;

if ( ($pos.y > 14) || ($pos.y < 3) || ($pos.z < -5) )

     {

     particleWindShape.lifespanPP = 0;

     }


нажмите кнопку



Create


.

Данный



Expression


будет уничтожать частицы если их позиция больше 14 единиц по оси Y, меньше 3 единиц по оси Y и меньше чем на –5 единиц по оси Z. В



Channel Box


измените параметр



Lifespan Mode


на



lifespanPP only


.

Проиграйте анимацию и убедитесь что частици испускаются из



windSourse


не ниже 3 единиц и не выше 14 удиниц по оси Y и двигаются в отрицательном направлении оси Z.



Шаг 4.


При выделенных частицах



particleWind


создайте два поля:



airField1

turbulenceField1


(Меню



Dynamics


, закладка



Fields


, разделы



Air


и





Turbulence


, а выделение частиц необходимо для автоматической привязки воздействия этих полей на частицы



particleWind


).

Выделите



airField1


и измените следующие параметры в



Channel Box


:





Magnitude - 7

Attenuation - 1

Max Distance - 20

Apply Per Vertex - off

Use Max Distance - on

Direction X - 0

Direction Y - 0

Direction Z - -1


Переименуйте



airField1


в



airField_Particles


.

Выделите



turbulenceField1


и измените следующие параметры в



Channel Box


:





Magnitude - 11

Attenuation - 1

Max Distance - -1

Apply Per Vertex - off

Use Max Distance - off


Щелкните в



Channel Box


на поле атрибута



Phaze Z


ПрКм и во всплывающем меню выберите



Expressions


, в появивщемся окне



Expression Editor


наберите следующее:



turbulenceField1.phaseZ = time;


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



Create


и закройте окно



Expression Editor


. Переименуйте



turbulenceField1


в



turbField_Particles


. Проиграйте анимацию, частицы



particleWind


должны двигаться хаотично, ускоряться и исчезать при достижении по оси Z координаты –5.



Шаг 5.


Щелкните Левой Кнопкой Мыши (ЛКМ) в любом окне видов для отмены выделения. Создайте непривязанное к чему-либо



radialField (Dynamics > Fields > Radial)


. Измените в



Channel Box


следующие параметры:





Magnitude - 250

Attenuation - 0.33

Max Distance - 3.3

Apply Per Vertex - on

Use Max Distance - on


Переименуйте



radialField1


в "



radialField_Wind


". Теперь необходимо выполнить несколько связей. Мы предпочитаем использовать для этого



Hypershade


и его



Work Area


. Но можно настроить связи и не прибегая к его помощи.

Во-первых вызовите окно



Connection Editor (Window > General Editors > Connection Editor)


.

Во-вторых вызовите окно



Outliner (Window > Outliner)


и в меню



Display


включите



Shapes


. В поле



Outliner


найдите и выделите



particleWindShape


. Перейдите в окно



Connection Editor


и нажмите кнопку





Reload Left


. Затем в



Outliner


выберите



radialField_Wind


, перейдите опять в окно



Connection Editor


и нажмите кнопку



Reload Right


. В меню



Left Side Filters


окна



Connection Editor


включите



Show Hidden


и затем аналогично в меню



Right Side Filters


окна



Connection Editor


включите



Show Hidden


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



Connection Editor


найдите и выделите параметр



Centroid


, затем найдите и выделите в правом окне параметр



Translate


. Таким образом Вы установили связь между параметрами:



particleWindShape.centroid > radialFieldWind.translate


Аналогично создайте связи:



particleWindShape.cachedWorldCentroid >

     > radialFieldWind.ownerCentroid

particleWindShape.cachedWorldPosition >

     > radialFieldWind.ownerPosData

particleWindShape.cachedWorldVelocity >

     > radialFieldWind.ownerVelData

particleWindShape.auxiliariesOwned >

     > radialFieldWind.owner




Проиграйте анимацию. Поcле первого кадра иконка



radialFieldWind


должна находиться в центре частиц



particleWind


и совершать небольшое хаотическое движение. Теперь можете отменить режим



Shapes


в



Outliner


.

Выделите



windSourse, particleWind, radialFieldWind, airField_Particles, turbField_Particles


и сгруппируйте их в группу "



wind_Group


" (это только для удобства работу, можно не выполнять этого).



Шаг 6.


В



Outliner


выделите группу "



curves_for_Flag


" и сделайте ее видимой. Затем выделите все 4 кривые в группе "



curves_for_Flag


", перейдиле в меню



Cloth


и создайте



Garment (Cloth > Create Garment)


. При этом будет автоматически создана и панель



panel1


. Выделите



panel1


и переименуйте на "



panel_Flag


". Теперь



Channel Box


в разделе



INPUTS > cpDefaultProperty


измените следующие параметры:







U Bend Resistance - 3.3

V Bend Resistance - 3.3

U Bend Rate - 0

V Bend Rate - 0

U Stretch Resistance - 210

V Stretch Resistance - 210

Shear Resistance - 99

U Scale - 1

V Scale - 1

Density - 0.007

Thickness - 0.2

Thickness Forse - 3

Cloth Friction - 0.1

Cloth Damping - 0.01

Air Damping - 0.05

Static Friction - 0.6

Dynamic Friction - 0.1


Затем в разделе



OUTPUTS > cpStitcher


измените параметр:



Base Resolution - 150


В разделе



OUTPUTS > cpSolver


измените параметры:



Start Frame - 0

Frame Samples - 1

Relax Frame Length - 0




Шаг 7.


Выделите созданный модулем меш



cloth1


. В любом окне видов нажмите ПрКМ и удерживая ее из



Pop-up


меню выберите



Vertex


, выделите 2 верхние и 2 нижние, ближайшие к



flagshtok


вершины, затем, удерживая клавишу "



Shift


", выделите сам



flagshtok


и выберите



Cloth > Constrains > Transform


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



cloth1


спадает вниз и повисает на флагштоке.



Аналогично при выбранном



cloth1


из



Pop-up


меню выберите



Vertex


, выделите все вершины и, удерживая "



Shift


", выделите



radialField_Wind


и выберите



Cloth > Constrains > Field


. Данная операция создаст воздействие поля



radialField_Wind


на



cloth1


.

Выберите частицы



particleWind


, удерживая "



Shift


" выделите



Cloth1


и выполните



Dynamics > Particles > Make Collide


. Выделите



particleWind


и в



Channel Box


в закладке



INPUTS > geoConnector2


измените параметры:



Tessellation Factor - 200

Resilience - 0.5

Friction - 0.1


Переименуйте



cloth1


на "



flag


".



Шаг 8.


Выберите



Cloth > Simulation > Delete Cache


и проиграйте анимацию. В зависимости от ресурсов Вашей машины расчет



Cache


может занять от 30 секунд до 3 минут для 300 кадров анимации.



Шаг 9.




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



panel_Flag


в



Channel Box > OUTPUTS > cpSolver1


. Наиболее действенными будут изменения параметров



Solver Scale


в пределах



1-50


и



Gravity1


в пределах



-100


-



-900


. На одним из наших компьютеров удачными оказались значения:



Time Step Size - 0.02

Solver Scale - 21

Gravity1 -  -330


А при проверке данного урока на второй машине подошли значения



Solver Scale - 17

Gravity1 -  -100




Послесловие.


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

А теперь запаситесь терпением и вперед.


Содержание раздела