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

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

Тема в разделе "Анимация", создана пользователем tambovski, 1 май 2010.

Модераторы: Артер
  1. tambovski

    tambovski Пользователь сайта

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

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    Как вариант скопировать анимацию с главного объекта
     
  3. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    Скопировать анимацию это самое то но назрел тоже вопрос как сделать так чтоб в одном curve editore отображался один обьект а в другом другой и реально ли это
     
  4. tambovski

    tambovski Пользователь сайта

    С нами с:
    28.01.2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    2
    Скопировать - не вариант, т.к. анимация у дочернего не повторяет анимацию главного. Да и как ее скопировать?
     
  5. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    В смысле не повторяет анимацию главного? Чтоб скопировать заходишь в curve editor выделяешь нужный объект выделяешь нужный track нажимаешь copy а потом выделяешь другой объект и paste
     
  6. morkovni

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

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    попробуй так:
    выделяешь главный объект, нажимаешь motion - trajectories - (настраиваешь интервал и колличество ключей - time и samples) - convert to - потом выделяешь второй объект (предварительно отвязав его от главного), нажимаешь convert from - выбираешь траекторию, появившуюся после convert to...
     
  7. tambovski

    tambovski Пользователь сайта

    С нами с:
    28.01.2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    2
    тут еще проблема в том, что объект линкуется к нескольким объектам по очереди в течении всей анимации... видимо нужно скрипт писать для преобразования, только вот как? :)
     
  8. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    morkovni правильно сказал можно через траекторию дочернего объекта , сначала преоюразовать ее в кривую потом из кривой опять в траекторию
     
  9. morkovni

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

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    похожий вопрос, помню, задавался... тогда посоветовали использовать help-еры, к ним привязать объект, и их по-очереди анимировать
     
  10. tambovski

    tambovski Пользователь сайта

    С нами с:
    28.01.2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    2
    Вобщем долго мучавшись, написал вот скрипт для преобразования:
    Код:
    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 - в каждом кадре таймлайна записывается ключ анимации для выделенного объекта
    Хотелось бы, конечно, добавить проверку на ключи анимации самого объекта и его родителей, чтобы читать/записывать только ключевые кадры, но т.к. скриптов ни разу в жизни не писал - пока что так. Если кто-то поможет дописать это в скрипт - буду признателен )
     
  11. Amar3

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

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

    Вложения:

    • 1805312.jpg
      1805312.jpg
      Размер файла:
      129,1 КБ
      Просмотров:
      65
Модераторы: Артер

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