1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Maya", создана пользователем maximby, 23 фев 2010.

Модераторы: Dark™, Skif
  1. maximby

    maximby Активный участник

    С нами с:
    15.03.2001
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    17
    Делаю дипломный анимационный фильм, и, поскольку я режиссер, а не на тридэшник, трачу много времени на ковыряние в программе методом тыка.
    Нужно сделать на MEL небольшую примочку для управления мимикой персонажа, и еще для одной штуки при рендере. Все максимально просто, но MEL для меня совсем неизвестный зверь. Буду благодарен, если подскажете хоть примерный алгоритм работы. Подробности в личке, пока не хочу светить проект.
     
  2. minstrel

    minstrel Знаток

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

    :)
    Опиши подробнее что тебе нужно.
     
  3. maximby

    maximby Активный участник

    С нами с:
    15.03.2001
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    17
    Ок :)
    Ну к примеру у меня есть пять объектов, и я хочу сделать панельку, чтоб там было пять кнопок, а лучше ползунок, который в положении 1 делает первый объект визибл, остальные нет, во втором второй визибл, остальные нет, и т.д.
     
  4. minstrel

    minstrel Знаток

    С нами с:
    10.01.2009
    Сообщения:
    120
    Симпатии:
    1
    Баллы:
    26
    Выделяй объекты типа 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;
    }
     
  5. maximby

    maximby Активный участник

    С нами с:
    15.03.2001
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    17
    Работает! Супер, спасибо! :)
    А можно еще один идиотский вопрос: как это анимировать?
    Я додумался до следующего: собрал все объекты в группу (их будет не три, а гораздо больше), и ставлю ключи на группу
    Это правильно, или можно как-то ставить ключи прямо на слайдер?
     
  6. minstrel

    minstrel Знаток

    С нами с:
    10.01.2009
    Сообщения:
    120
    Симпатии:
    1
    Баллы:
    26
    нет. На слайдер ставить ключи нельзя. Ключи ставить можно только на атрибуты, следовательно тебе нужен атрибут, управляющий отображением нужного объекта, а сам атрибут должен управляться 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;
    }
    ////////////////////////////////////////
    Теперь ты можешь ставить на слайдер ключи. Жми правой кнопкой мыши в поле ввода.
     
  7. maximby

    maximby Активный участник

    С нами с:
    15.03.2001
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    17
    Отлично
    Большое спасибо!
     
Модераторы: Dark™, Skif

Поделиться этой страницей