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
|
Послесловие.
Наиболее трудоемкой окажется именно удачная настройка этих двух параметров. Так же попробуйте изменить длину и ширину флага.
А теперь запаситесь терпением и вперед.
Содержание раздела