Render.ru

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

SLONIK_ZX

Активный участник
Рейтинг
14
#1
как построить связь между [translateX локатора] и [значением ключа анимационной кривой] ?

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

Dark™

Модератор форума
Команда форума
Рейтинг
431
#2
Ну так пропустите анимационную кривую через модифицирующие ноды, например, multiplyDivide, чтобы амплитуду контролировать.
Какие-то определенные участки кривой можно контролировать командой keyframe.
 

SLONIK_ZX

Активный участник
Рейтинг
14
#3
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 не выдаёт ошибку. вообще ничего не выдаёт.

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

SLONIK_ZX

Активный участник
Рейтинг
14
#4
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 //
 

Владимир Забелин

Активный участник
Рейтинг
17
#5
Если бы Вы внимательно читали хелп, то заметилим бы, что интересующий Вас атрибут не является коннектэбл. Вы, конечно, можете продолжать свои эсперименты по попытке законнектить локатор на непосредственно значение ключа, но это будет напоминать известный анекдот, заканчивающийся словами "че тут думать, трясти надо!"
 

volodyaRenderberg

Активный участник
Рейтинг
14
#6
если речь идет о процедуре настройки, то можно на этот случай понасоздавать скриптджобов...
 

SLONIK_ZX

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

Владимир Забелин

Активный участник
Рейтинг
17
#8
понимаю. меня она тоже в свое время смутила. но мел не дает возможности напрямую работать с компаундными атрибутами ( а ktv - атрибут типа TdataCompaund). всегда нужно искать обходные пути. иногда они есть, иногда их нет. для работы с ключами анимационной кривой я использую команду keyframe
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#9
На будущее дополню, к этому массиву надо обращаться так:
Код:
getAttr R_cheekBone_FC_crease.ktv[0];
getAttr R_cheekBone_FC_crease.ktv[0].kt;
getAttr R_cheekBone_FC_crease.ktv[0].kv;
 

Владимир Забелин

Активный участник
Рейтинг
17
#10
"надо" - это слишком категорично. когда говорим о работе с анимационной кривой, для getAttr и setAttr лучше использовать более осторожную конструкцию "можно":
можно использовать getAttr и setAttr, но надо использовать keyframe.

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

Dark™

Модератор форума
Команда форума
Рейтинг
431
#11
Владимир, согласен, но это написал чисто, чтобы понять структуру данного и аналогичных массивов.
 

SLONIK_ZX

Активный участник
Рейтинг
14
#12
Всем спасибо за участие! Дописал скрипт. Использовал как команду keyframe, так и обращение к массиву(с этим кэйфрэймом очень тяжело разобраться полностью). Результат повесил на scriptJob-ы. Вроде всё работает и оправдывает возложенные надежды =)
 
Сверху