Render.ru

Нужна помощь по MEL для анимации

Рейтинг
20
#1
Делаю дипломный анимационный фильм, и, поскольку я режиссер, а не на тридэшник, трачу много времени на ковыряние в программе методом тыка.
Нужно сделать на MEL небольшую примочку для управления мимикой персонажа, и еще для одной штуки при рендере. Все максимально просто, но MEL для меня совсем неизвестный зверь. Буду благодарен, если подскажете хоть примерный алгоритм работы. Подробности в личке, пока не хочу светить проект.
 
Рейтинг
23
#2
не очень понятно что именно ты хочешь. Алгоритм работы прост:
1. Делаешь интерфейс для персонажа
2. Юзаешь его
:)
Интерфейсы бывают очень разными: простыми, сложными, мэловксими, питоновскими и т.д.
советую тебе начать с примерно такого кода:
window -t "My interface";
columnLayout;
text -l "text";
showWindow;

:)
Опиши подробнее что тебе нужно.
 
Рейтинг
20
#3
Ок :)
Ну к примеру у меня есть пять объектов, и я хочу сделать панельку, чтоб там было пять кнопок, а лучше ползунок, который в положении 1 делает первый объект визибл, остальные нет, во втором второй визибл, остальные нет, и т.д.
 
Рейтинг
23
#4
Выделяй объекты типа transform и запускай скрипт. Соблюдай очередность: первый объект, второй объект и т.д.
{
string $names[] = `ls -sl`;

proc setVisibility(string $namesStr,string $slider){
string $names[] = stringToStringArray($namesStr," ");
int $value = `floatSliderGrp -q -v $slider`;

for ($i=0;$i<`size $names`;$i++){
if (!`objExists $names[$i]`)error ("Cannot find "+$names[$i]+". Returned");
setAttr ($names[$i]+".v") false;
}//for
setAttr ($names[$value-1]+".v") true;
} // setVisibility
//--------------------------------------------------
int $szNames = `size $names`;
string $wnd = "wnd";

if (`windowPref -exists $wnd`) windowPref -remove $wnd;
if (`window -exists $wnd`) deleteUI -wnd $wnd;

window -h 60 -w 310 -t "Visibility changer" $wnd;
columnLayout -adj true;

string $slider = `floatSliderGrp
-cw 1 55
-label "Visibility"
-field true
-step 1
-pre 0
-minValue 1
-maxValue $szNames
-fieldMinValue 1 -fieldMaxValue 2
-value 1`;

floatSliderGrp -e -cc ("setVisibility(\""+stringArrayToString($names," ")+"\",\""+$slider+"\")") $slider;
showWindow $wnd;
}
 
Рейтинг
20
#5
Работает! Супер, спасибо! :)
А можно еще один идиотский вопрос: как это анимировать?
Я додумался до следующего: собрал все объекты в группу (их будет не три, а гораздо больше), и ставлю ключи на группу
Это правильно, или можно как-то ставить ключи прямо на слайдер?
 
Рейтинг
23
#6
нет. На слайдер ставить ключи нельзя. Ключи ставить можно только на атрибуты, следовательно тебе нужен атрибут, управляющий отображением нужного объекта, а сам атрибут должен управляться floatSliderGrp.

Алгоритм:
1. создать атрибут showObject.
2. Сделай, чтобы этот атрибут управлял атрибутами visibility у нужных объектов. Это проще всего сделать дривен кеем. Но если у тебя очень много объектов - будет немного напряжно.
3. Связать floatSliderGrp с атрибутом showObject. Или сразу использовать attrFieldSliderGrp.
/////////////////////////////////////////////////////////////////////////////////////////////////////////
Создай объект какой-нибудь, назови его locator1.
Выделяй скрываемые объекты по очереди как в прошлый раз.
//---------------------------------------------------------------------------------------------------------
{
$controlObject = "locator1";
$attr = "showObject";

string $names[]=`ls -sl`;
int $szNames = `size $names`;

if ($szNames==0)error "No objects selected";

addAttr -ln $attr -at long -min 1 -max $szNames -dv 1 -k true $controlObject;

for ($i=0;$i<$szNames;$i++){
if ($i==0){
setDrivenKeyframe -at "v" -v 1 -dv 1 -cd ($controlObject+"."+$attr) $names[$i];
setDrivenKeyframe -at "v" -v 0 -dv 2 -cd ($controlObject+"."+$attr) $names[$i];
} // $i==0
else if ($i==$szNames-1){
setDrivenKeyframe -at "v" -v 1 -dv $szNames -cd ($controlObject+"."+$attr) $names[$i];
setDrivenKeyframe -at "v" -v 0 -dv ($szNames-1) -cd ($controlObject+"."+$attr) $names[$i];
} //$i==$szNames-1
else{
setDrivenKeyframe -at "v" -v 1 -dv ($i+1) -cd ($controlObject+"."+$attr) $names[$i];
setDrivenKeyframe -at "v" -v 0 -dv $i -cd ($controlObject+"."+$attr) $names[$i];
setDrivenKeyframe -at "v" -v 0 -dv ($i+2) -cd ($controlObject+"."+$attr) $names[$i];
} // else

}

string $wnd = "wnd";

if (`windowPref -exists $wnd`) windowPref -remove $wnd;
if (`window -exists $wnd`) deleteUI -wnd $wnd;

window -h 60 -w 350 -t "Visibility changer" $wnd;
columnLayout -adj true;

attrFieldSliderGrp -cw 1 80 -at ($controlObject+"."+$attr);
showWindow $wnd;
}
////////////////////////////////////////
Теперь ты можешь ставить на слайдер ключи. Жми правой кнопкой мыши в поле ввода.
 
Сверху