Maya - Как разгруппировать анимацию и сохранить анимацию? - PullRequest
0 голосов
/ 24 ноября 2018

Есть некоторые старые анимации, которые я хочу использовать повторно, но старая анимация использует другую ось (например: old: Face отрицательный Z, Y как вверх; новый: Face Y, Negative Z как вверх).Поэтому я исправляю это, группируя анимацию и поворачивая группу так, чтобы она смотрела на правую ось.Но когда я разгруппируюсь, это работает только для текущего кадра (я включаю Авто ключ на ).

У меня есть поиск по нескольким форумам:

Группировка анимированных объектов,Масштабирование, разгруппировка

Нужна помощь в поддержании смещения при разгруппировке

разгруппировка, но с сохранением анимации

Группировкаанимированные объекты, масштабирование, разгруппировка

но ничего не работает.

1 Ответ

0 голосов
/ 24 ноября 2018

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

proc GetPlaybackRange(string $bone, int $outStartEndTime[])
{
    float $arrKey[] = `keyframe -q $bone`;
    $arrKeyLength=size($arrKey);

    $outStartEndTime[0] = floor($arrKey[0]);
    $outStartEndTime[1] = ceil($arrKey[$arrKeyLength-1]);
}

proc UngroupAndGroupNextFrame(int $frame, string $groupName, float $transform[])
{
    currentTime $frame ;
    ungroup;

    currentTime ($frame + 1) ;
    group -n $groupName;
    xform -worldSpace -matrix 
    $transform[0]
    $transform[1]
    $transform[2]
    $transform[3]
    $transform[4]
    $transform[5]
    $transform[6]
    $transform[7]
    $transform[8]
    $transform[9]
    $transform[10]
    $transform[11]
    $transform[12]
    $transform[13]
    $transform[14]
    $transform[15]
    $groupName;
}

proc UnGroupForAnimation()
{
    string $sel[]= `ls -sl`;
    string $groupName = $sel[0];

    float $transform[];
    $transform = `xform -q -worldSpace -matrix $groupName`;

    string $bone[] = `listRelatives -children $groupName`;

    int $startEndTime[];
    GetPlaybackRange($bone[0], $startEndTime);

    for($i = $startEndTime[0]; $i <= $startEndTime[1]; $i++)
    {
        UngroupAndGroupNextFrame($i, $groupName, $transform);
    }
    currentTime ($startEndTime[1] + 1) ;
    ungroup;
    timeSliderClearKey;

    print ($bone[0] + " range "+$startEndTime[0]+" : "+$startEndTime[1]);
}

UnGroupForAnimation();

Использование сценария:

Шаг 1. Выберите группу (дочерние элементыгруппа должна быть костью) MayaUngroupAnim.PNG

Шаг 2. Запустите скрипт.

И все.

...