Render.ru

Преобразование Link Constraint в ключи Position/Rotation/Scale

tambovski

Пользователь сайта
Рейтинг
2
#1
Доброго времени суток! Встала задача следующего характера:
Есть анимация двух объектов. Один движется, второй - повторяет его движения при помощи контроллера Link Constraint.
Как преобразовать движения дочернего объекта в ключи анимации контроллера Position/Rotation/Scale? Т.е. требуется заменить ему контроллер с Link Constraint на дефолтный Position/Rotation/Scale и преобразовать уже созданную анимацию в ключи. Буду очень признателен за помощь!
 

kolts

Активный участник
Рейтинг
16
#2
Как вариант скопировать анимацию с главного объекта
 

kolts

Активный участник
Рейтинг
16
#3
Скопировать анимацию это самое то но назрел тоже вопрос как сделать так чтоб в одном curve editore отображался один обьект а в другом другой и реально ли это
 

tambovski

Пользователь сайта
Рейтинг
2
#4
Скопировать - не вариант, т.к. анимация у дочернего не повторяет анимацию главного. Да и как ее скопировать?
 

kolts

Активный участник
Рейтинг
16
#5
В смысле не повторяет анимацию главного? Чтоб скопировать заходишь в curve editor выделяешь нужный объект выделяешь нужный track нажимаешь copy а потом выделяешь другой объект и paste
 

morkovni

Активный участник
Рейтинг
11
#6
попробуй так:
выделяешь главный объект, нажимаешь motion - trajectories - (настраиваешь интервал и колличество ключей - time и samples) - convert to - потом выделяешь второй объект (предварительно отвязав его от главного), нажимаешь convert from - выбираешь траекторию, появившуюся после convert to...
 

tambovski

Пользователь сайта
Рейтинг
2
#7
тут еще проблема в том, что объект линкуется к нескольким объектам по очереди в течении всей анимации... видимо нужно скрипт писать для преобразования, только вот как? :)
 

kolts

Активный участник
Рейтинг
16
#8
morkovni правильно сказал можно через траекторию дочернего объекта , сначала преоюразовать ее в кривую потом из кривой опять в траекторию
 

morkovni

Активный участник
Рейтинг
11
#9
похожий вопрос, помню, задавался... тогда посоветовали использовать help-еры, к ним привязать объект, и их по-очереди анимировать
 

tambovski

Пользователь сайта
Рейтинг
2
#10
Вобщем долго мучавшись, написал вот скрипт для преобразования:
Код:
utility dialog "Link 2 Key Converter"
(
button read_btn "Export Selected"
button write_btn "Import Selected"

on read_btn pressed do
(
file = getSaveFileName caption:"Save Keys to File" initialDir:"$scripts/startup" filename:"keys.txt" mode:"r+"
if file == undefined 
then messagebox "You must select a file to export"
else  	(
        stream = createFile file
		for t = animationRange.start to animationRange.end do
		(
		at time t
		format "%;%;%;%\n" t $.transform.pos $.transform.rotation $.transform.scale to: stream 
		)
		close stream
		messagebox "Done" 
		)
)

on write_btn pressed do
(
file = getOpenFileName caption:"Open Keys File" initisalDir:"$scripts/startup" mode:"r+"
if file == undefined 
then messagebox "You must select a file to import" 
else	 (
	     stream = openFile file
	     for t = animationRange.start to animationRange.end do
		 (
		 data = readLine stream 
		 tokens = filterString data "f[]() quat,;" 
		 px = tokens[2] as float
		 py = tokens[3] as float
		 pz = tokens[4] as float
		 rx = tokens[5] as float
		 ry = tokens[6] as float
		 rz = tokens[7] as float
		 rw = tokens[8] as float
		 sx = tokens[9] as float
		 sy = tokens[10] as float
		 sz = tokens[11] as float
		 rot = quat (-1*rx) (-1*ry) (-1*rz) rw
  		animate on 
		 		(
				at time t ($.rotation = rot; $.pos = [px,py,pz]; $.scale = [sx,sy,sz])
				)
		
		) 
		 messagebox "Done"
		 close stream
		)
)

)
Что он, собственно, делает:
По нажатии кнопки Export сохраняет покадрово в текущем таймлайне координаты выделенного объекта в текстовый файл.
Далее вручную меняем объекту контроллер с Link Constraint на Position/Rotation/Scale
Жмем кнопку Import - в каждом кадре таймлайна записывается ключ анимации для выделенного объекта
Хотелось бы, конечно, добавить проверку на ключи анимации самого объекта и его родителей, чтобы читать/записывать только ключевые кадры, но т.к. скриптов ни разу в жизни не писал - пока что так. Если кто-то поможет дописать это в скрипт - буду признателен )
 

Amar3

Активный участник
Рейтинг
17
#11
если я правильно понял задачу, то для этой нее есть более простое решение. Допустим у меня есть несколько анимированных боксов, и есть цылиндр, который должен быть привязан линк-констрейном поочередно к каждому боксу в течении анимации. нужно создать point, уровнять его с цылиндром pivot к pivot (и Position и Orientation). применить к Point - Link Constraint , сделать свое дело с link-ами, поставить на цылиндр Position Constraint и Otientation constraint, в обеих указать point как Target. а потом выбераем цылиндр, открываем трек вью , выбераем треки Position и Rotation , дальше меню Controller>collapse Controller
 

Вложения

Сверху