Render.ru

Помогите с несложным скриптом

Max Lozovski

Активный участник
Рейтинг
7
#1
Всем привет. Требуется скриптик, сам я не очень разбираюсь в скриптовании поэтому обращаюсь за помощью к вам. Может быть уже есть гдето похожий скрипт.

Что нужно?
Имеем два объекта или более.
1.jpg

На одном стоят ключи в разных местах. На другом как у меня

2.jpg

Нужен такой скрипт: Выделяю два объекта, указываю рабочую зону
3.jpg


Запускаю скрипт, и он на втором объекте делает пустые ключи (ставит ключи без изменения значения на подобии фунции кнопки S Set Key) в тех же местах что и ключи первого объекта (в рамках рабочей области, красный цвет). В итоге на втором объекте должно получится так.

4.jpg

Если кто может помочь буду очень признателен.
 
Последнее редактирование:

zka

Активный участник
Рейтинг
14
#2
1) Что значит пустые ключи? Ключ по определению не может быть пустым.
2) Скрипт? Copy/Paste отменили? С какой версии?
 

Max Lozovski

Активный участник
Рейтинг
7
#3
Пустой в смысле просто прокеить позишн, ротейт, и скейл. в тех же ключах что и на первом объекте но без перенесения значений. Копи паст тут не нужен.
 
Последнее редактирование:

zka

Активный участник
Рейтинг
14
#4
Ваш ответ ввергает меня в уныние.



Просто прокеить без "перенесения значений". Вы шутите? А что тогда будет содержать этот ключ и какую информацию он будет передавать на ноду Time?

Что нам говорит майский хелп на запрос key:

Keys are arbitrary markers that specify the property values of an object at a particular time. Setting keys is the process of creating the markers that specify timing and action in your animation. Animation is the process of creating and editing the properties of objects that change over time.

Надеюсь перевод не нужен? "Пустые ключи" куда катится мир....

Сформулируйте то, чего вы хотите достигнуть в результате и получите ответ.
 

zka

Активный участник
Рейтинг
14
#7
Замысел понятен. Пока будете ждать скрипт проще выделить все объекты и расставить ключи вручную.
 

Max Lozovski

Активный участник
Рейтинг
7
#8
Да я так и делаю. Скрипт мне не к спеху, просто подумал может знающие люди смогут быстро помочь.
 

zka

Активный участник
Рейтинг
14
#9
Да я так и делаю. Скрипт мне не к спеху, просто подумал может знающие люди смогут быстро помочь.
Быстро помочь... Хм, давайте рассмотрим Вашу задачу поближе:
1) Для того, что бы скрипт корректно работал нужно что бы он работал с любыми объектами вне зависимости от их имен.
2) Для того, что бы скрипт корректно работал нужно знать на какие каналы ставить ключи или предусмотреть выбор каналов в процессе исполнения скрипта. Нам ведь не нужны лишние пустые ключи и мы не хотим пропустить то, что нам нужно.
3) Из этого следует, что нужно написать универсальный скрипт который будет работать при любых условиях и не надо будет каждый раз менять код.
4) Нужен интерфейс (диалоговое окно) где можно будет задать параметры.
5) 3-4 часа работы с отладкой.

Быстро помочь.... :) Не, так не бывает.
 

Max Lozovski

Активный участник
Рейтинг
7
#10
:)))))))))))))))))))
Все так. Нужен универсальный скрипт. Я прошу помощи потому как знания в программировании весьма ограничены. Если можете хотя бы с направлением подскажите, атрибуты и все такое.

2) Нужно Транслейт, Ротейт, и Скейл, ну или хотябы Транслейт (тут даже не важно что будет прокеиваться важнее создать ключь в нужном месте.)
 

Cyberika

Знаток
Рейтинг
21
#11
:)))))))))))))))))))
Все так. Нужен универсальный скрипт. Я прошу помощи потому как знания в программировании весьма ограничены. Если можете хотя бы с направлением подскажите, атрибуты и все такое.

2) Нужно Транслейт, Ротейт, и Скейл, ну или хотябы Транслейт (тут даже не важно что будет прокеиваться важнее создать ключь в нужном месте.)
Думаю скрипт вам тут никто не напишет. Надо самому писать, рас так нужно.
Задачу надо разбить на несколько частей.
1. Получить и поместить в переменную имя объекта с которого копируйте ключи.
2. Получить и поместить в переменную имя(имена) объекта(объектов) на которую надо скопирoвать ключи.
3. Получить и поместить в переменную диапазон таймлайна(выделенная область).
4. Получить и поместить в переменную ключи с данного диапазонa фотограмм.
5. Назначить полученные ключи на объект(ы), который(е) у вас находится в переменной из пункта 2 с помощью for in loop-a или других итераций(смотря что нужно).

Вот вам подсказки. На остальное гугль + документация по командам Мел вам в помощь.
 
Последнее редактирование:

iNOD

Активный участник
Рейтинг
18
#12
Помещаете второй объект в группу. Центр группы должен находиться там же где и центр первого объекта. Копируете ключи с первого объекта и вставляете ключи в группу, за тем выделяете все ключи что создались и обнуляете.
 

zka

Активный участник
Рейтинг
14
#13
Помещаете второй объект в группу. Центр группы должен находиться там же где и центр первого объекта. Копируете ключи с первого объекта и вставляете ключи в группу, за тем выделяете все ключи что создались и обнуляете.
Ииии?
Что это даст?
 

Max Lozovski

Активный участник
Рейтинг
7
#14
iNOD :)))))))) Вообще не то. Про кубики это грубо, там у каждого объекта своя иерархия, которую трогать нельзя.
 

Max Lozovski

Активный участник
Рейтинг
7
#15
Нашел рабочий скрипт по теме, только нужно докрутить чтобы ключи проставлял в Time Range диапозоне. Ктонибудь сможет помочь?

global proc ackTimingFramework() {
//progess window
int $max = 1;
progressWindow
-title "ackTimingFramework"
-maxValue $max
-status ""
-isInterruptable true;


float $allTimes[] = `keyframe -q -timeChange`;

//loop over selected curves and process independently
string $selectedCurves[] = `keyframe -selected -q -name`;

if (size($selectedCurves) <= 1){
//one or none curves selected so insert keys on all curves
$max = size($allTimes);
progressWindow -e -maxValue $max;

for ($i = 0; $i < size($allTimes); $i++){
progressWindow -e -step 1;
if ( `progressWindow -query -isCancelled` ){break;}

setKeyframe -insert -time $allTimes[$i];
}
} else {
//only key selected curves

//estimate time
string $sc[] = `keyframe -selected -q -name`;
$max = size($sc);
for ($x = 0; $x < size($sc); $x++){
$max += size(`keyframe -q -timeChange $sc[$x]`);
}


for ($c = 0; $c < size($selectedCurves); $c++){
//channel to use for this pass
$channel = $selectedCurves[$c];

for ($i = 0; $i < size($allTimes); $i++){
progressWindow -e -step 1;
if ( `progressWindow -query -isCancelled` ){break;}

setKeyframe -insert -time $allTimes[$i] $channel;
}
}
}

//kill window
progressWindow -endProgress;

}
 
Сверху