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

как построить связь между [translateX локатора] и [значением ключа анимационной

Тема в разделе "Maya", создана пользователем SLONIK_ZX, 8 ноя 2012.

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

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

    С нами с:
    02.03.2003
    Сообщения:
    238
    Симпатии:
    1
    Баллы:
    14
    как построить связь между [translateX локатора] и [значением ключа анимационной кривой] ?

    Чтобы не было лишних вопросов, ситуация такая: Драйвенкеи связывают рульки выражений мимики (box controls) с прямыми рульками мимики(90 шт). Всего драйвенкеев штук 300-400. При перекидывании всего этого дела на другого персонажа с другими пропорциями лица, амплитуды драйвенкеев (значения ключей) нужно немного поправить и это дико неудобно делать в графэдиторе. Так что я это сделаю с помощью локаторов и некоторых скриптов =).
     
  2. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    Ну так пропустите анимационную кривую через модифицирующие ноды, например, multiplyDivide, чтобы амплитуду контролировать.
    Какие-то определенные участки кривой можно контролировать командой keyframe.
     
  3. SLONIK_ZX

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

    С нами с:
    02.03.2003
    Сообщения:
    238
    Симпатии:
    1
    Баллы:
    14
    Dark™, Спасибо, но пока отложим такой вариант на крайняк.
    В хелпе есть описание ноды кривой, например animCurveUL:

    keyTimeValue (ktv) compound n/a
    Keyframe time/value pairs

    keyTime (kt) double 0
    Keyframe times

    keyValue (kv) distance (double) 0.0cm
    Keyframe values

    Аттрибут keyValue как раз нужен. Как к нему обратиться, ведь он кампаунд. Такие фокусы не работают:

    getAttr R_cheekBone_FC_crease.keyValue["*"];
    // Error: line 1: No object matches name: R_cheekBone_FC_crease.keyValue[*] //
    getAttr R_cheekBone_FC_crease.keyValue["*"]["*"];
    // Error: line 1: No object matches name: R_cheekBone_FC_crease.keyValue[*][*] //


    getAttr R_cheekBone_FC_crease.keyTimeValue не выдаёт ошибку. вообще ничего не выдаёт.

    Было бы здорово прямо в эти атрибуты законнектить локаторы, всё потюнить а потом просто удалить локаторы. Без всякого хлама.
     
  4. SLONIK_ZX

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

    С нами с:
    02.03.2003
    Сообщения:
    238
    Симпатии:
    1
    Баллы:
    14
    listAttr
    выдаёт в самом конце списка
    ... keyTimeValue keyTimeValue.keyTime keyTimeValue.keyValue //

    но:

    getAttr R_cheekBone_FC_crease.keyTimeValue.keyValue;
    // Error: line 1: No object matches name: R_cheekBone_FC_crease.keyTimeValue.keyValue //
     
  5. Владимир Забелин

    Владимир Забелин Активный участник

    С нами с:
    19.04.2012
    Сообщения:
    400
    Симпатии:
    12
    Баллы:
    17
    Если бы Вы внимательно читали хелп, то заметилим бы, что интересующий Вас атрибут не является коннектэбл. Вы, конечно, можете продолжать свои эсперименты по попытке законнектить локатор на непосредственно значение ключа, но это будет напоминать известный анекдот, заканчивающийся словами "че тут думать, трясти надо!"
     
  6. volodyaRenderberg

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

    С нами с:
    25.12.2008
    Сообщения:
    200
    Симпатии:
    7
    Баллы:
    14
    если речь идет о процедуре настройки, то можно на этот случай понасоздавать скриптджобов...
     
  7. SLONIK_ZX

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

    С нами с:
    02.03.2003
    Сообщения:
    238
    Симпатии:
    1
    Баллы:
    14
    Владимир Забелин, спасибо за горькую правду!
    В хелпе меня смутила фраза относящаяся к иконке где "стрелочка в квадратик" "You can connect an output of another node to this attribute." Видимо это про другой случай...
     
  8. Владимир Забелин

    Владимир Забелин Активный участник

    С нами с:
    19.04.2012
    Сообщения:
    400
    Симпатии:
    12
    Баллы:
    17
    понимаю. меня она тоже в свое время смутила. но мел не дает возможности напрямую работать с компаундными атрибутами ( а ktv - атрибут типа TdataCompaund). всегда нужно искать обходные пути. иногда они есть, иногда их нет. для работы с ключами анимационной кривой я использую команду keyframe
     
  9. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    На будущее дополню, к этому массиву надо обращаться так:
    Код:
    getAttr R_cheekBone_FC_crease.ktv[0];
    getAttr R_cheekBone_FC_crease.ktv[0].kt;
    getAttr R_cheekBone_FC_crease.ktv[0].kv;
     
  10. Владимир Забелин

    Владимир Забелин Активный участник

    С нами с:
    19.04.2012
    Сообщения:
    400
    Симпатии:
    12
    Баллы:
    17
    "надо" - это слишком категорично. когда говорим о работе с анимационной кривой, для getAttr и setAttr лучше использовать более осторожную конструкцию "можно":
    можно использовать getAttr и setAttr, но надо использовать keyframe.

    keyframe гораздо гибче и корректнее для работы с анимационными кривыми, чем getAttr и setAttr.
    keyframe
    - может работать как с одним ключом, так и с диапазоном ключей.
    - может работать как с анимационной кривой непосредственно, так и опосредованно, через имя проанимрованного атрибута
    - позволяет корректно добавлять и удалять ключи
    - позволяет корректно изменять значение и местоположение ключей
     
  11. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    Владимир, согласен, но это написал чисто, чтобы понять структуру данного и аналогичных массивов.
     
  12. SLONIK_ZX

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

    С нами с:
    02.03.2003
    Сообщения:
    238
    Симпатии:
    1
    Баллы:
    14
    Всем спасибо за участие! Дописал скрипт. Использовал как команду keyframe, так и обращение к массиву(с этим кэйфрэймом очень тяжело разобраться полностью). Результат повесил на scriptJob-ы. Вроде всё работает и оправдывает возложенные надежды =)
     
Модераторы: Dark™, Skif

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