Доброго времени суток! Встала задача следующего характера:
Есть анимация двух объектов. Один движется, второй - повторяет его движения при помощи контроллера Link Constraint.
Как преобразовать движения дочернего объекта в ключи анимации контроллера Position/Rotation/Scale? Т.е. требуется заменить ему контроллер с Link Constraint на дефолтный Position/Rotation/Scale и преобразовать уже созданную анимацию в ключи. Буду очень признателен за помощь!
Скопировать анимацию это самое то но назрел тоже вопрос как сделать так чтоб в одном curve editore отображался один обьект а в другом другой и реально ли это
В смысле не повторяет анимацию главного? Чтоб скопировать заходишь в curve editor выделяешь нужный объект выделяешь нужный track нажимаешь copy а потом выделяешь другой объект и paste
попробуй так:
выделяешь главный объект, нажимаешь motion - trajectories - (настраиваешь интервал и колличество ключей - time и samples) - convert to - потом выделяешь второй объект (предварительно отвязав его от главного), нажимаешь convert from - выбираешь траекторию, появившуюся после convert to...
тут еще проблема в том, что объект линкуется к нескольким объектам по очереди в течении всей анимации... видимо нужно скрипт писать для преобразования, только вот как? 🙂
Вобщем долго мучавшись, написал вот скрипт для преобразования:
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 - в каждом кадре таймлайна записывается ключ анимации для выделенного объекта
Хотелось бы, конечно, добавить проверку на ключи анимации самого объекта и его родителей, чтобы читать/записывать только ключевые кадры, но т.к. скриптов ни разу в жизни не писал - пока что так. Если кто-то поможет дописать это в скрипт - буду признателен )
если я правильно понял задачу, то для этой нее есть более простое решение. Допустим у меня есть несколько анимированных боксов, и есть цылиндр, который должен быть привязан линк-констрейном поочередно к каждому боксу в течении анимации. нужно создать point, уровнять его с цылиндром pivot к pivot (и Position и Orientation). применить к Point - Link Constraint , сделать свое дело с link-ами, поставить на цылиндр Position Constraint и Otientation constraint, в обеих указать point как Target. а потом выбераем цылиндр, открываем трек вью , выбераем треки Position и Rotation , дальше меню Controller>collapse Controller
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
tambovski
Есть анимация двух объектов. Один движется, второй - повторяет его движения при помощи контроллера Link Constraint.
Как преобразовать движения дочернего объекта в ключи анимации контроллера Position/Rotation/Scale? Т.е. требуется заменить ему контроллер с Link Constraint на дефолтный Position/Rotation/Scale и преобразовать уже созданную анимацию в ключи. Буду очень признателен за помощь!
kolts
kolts
tambovski
kolts
morkovni
выделяешь главный объект, нажимаешь motion - trajectories - (настраиваешь интервал и колличество ключей - time и samples) - convert to - потом выделяешь второй объект (предварительно отвязав его от главного), нажимаешь convert from - выбираешь траекторию, появившуюся после convert to...
tambovski
kolts
morkovni
tambovski
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
Вложения