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

Parent и не только...

Тема в разделе "Adobe After Effects", создана пользователем Andrey Varlamov, 22 дек 2009.

Модераторы: ksi2, Saplus
  1. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    Не знал как правильно тему обозвать.
    Суть вопроса:
    Есть солид1 с анимацией вращения к нему пэрентом привязан нуль2.
    Как заставить изменятся параметр Anchor Point у нуля2 (требуется для привязки к нему эффекта Corner Pin выражением)
     

    Вложения:

    • 1568697.jpg
      1568697.jpg
      Размер файла:
      44 КБ
      Просмотров:
      67
  2. bassline

    bassline Знаток

    С нами с:
    29.10.2006
    Сообщения:
    399
    Симпатии:
    0
    Баллы:
    26
    честно говоря не совсем понял суть вопроса
    делаете нуль трехмерным
    заходите в трансформ у этого нуля и двигаете там анкор так, как вам заблагорассудится
    ставите этот нуль туда, куда нужно
    назначаете ему родителем синенький солид

    если я правильно понял, то как-то так
    http://zorin.tv/anchor_turn.aep
     
  3. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    Попробую более развернуто:
    у меня анимирован солид вращение, хотел привязать к нему одну из точек Corner Pin, но т.к. опорная точка в центре вращения то привязать собственно не к чему. Для обозначения второй точки я и припэрентил нуль, и уже к его агнкору хотел привязать Corner Pin. Но значения агнкора нуля при пэренте остаются неизменными (локальные) и выражение не работает. Где то я видел, что можно заставить обьект, привязанный пэрентом, выдавать глобальные координаты (относительно композиции), а как это сделать вот собственно и вопрос.
    PS Проект в Маке, я на Пс не могу открыть.
     
  4. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    После долгих мучений и многих советов получилось боле мене похоже
    ____________________________________
    R = thisComp.layer("Cyan Solid 1").transform.rotation;
    X= -600*Math.cos(R/57,7);
    Y= -600*Math.sin(R/57,7);
    [X, Y]
    ____________________________________
    выражение ставилось на позишн нуля,
    вопрос к знатокам выражений, откуда взялось 57,7 так как подбирал я методом проб.
     
  5. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    цейтнот и вообще нет времени врубится в задачу,сори, только хотела сказать , что цифра 57 в контексте вращений и косинусов напомнила вот эту тему:
    http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%B0%D0%BD
    может, как-то поможет...
    удачки!)
     
  6. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    Спасибо mazzza, похоже на правду.
    Но еще одно но, данное выражение не совсем полное, позиция точки получается рандомная (от изначального угла), нужно приписать значение для возможности изменения позиции точки (ну или что-то вроде того) .
     
  7. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    после 29-го постараюсь разобраться (если еще актуально будет, раньше совсем никак)...
     
  8. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    (я сразу скажу, что по экспрешнам я совсем не спец, но постараюсь что могу пояснить...))
    сначало еще одно отступление по поводу 57 (вы наверное и сами уже разобрались, но на всякий случай...
    если написать
    R = degreesToRadians(thisComp.layer("Cyan Solid 1").transform.rotation);
    X= -600*Math.cos(R);
    Y= -600*Math.sin(R);
    [X, Y]

    это будет тоже самое , что было у вас , но без шаманства))

    насчет того, что "позиция точки получается рандомная (от изначального угла)", слово рандомное тут лишнее .
    исходя из того , что у вас написано в выражении, ваш Null (или на чем там висит выражение) описывает круг радиусом 600 px относительно левого верхнего угла композиции (где в АЕ расположены координаты (0,0)), если ваш Cyan Solid 1 вращается на 360 градусов.(лень уже формулировать понятнее, но, наверное смысл улавливаецца).Вобщем, вы установили такую вот функциональную связь позишна нула с ротейшном солида.
    если вам нужно сместить центр вращения , напишите:

    R = degreesToRadians(thisComp.layer("Cyan Solid 1").transform.rotation);
    X1= ваше значение;
    Y1= ваше значение;
    X=X1+(-600)*Math.cos(R);
    Y=Y1+ (-600)*Math.sin(R);
    [X, Y]
    центр вращения сместится в точку (X1;Y1)

    минусы в множителях при косинусах и синусах я не совсем поняла...
    (знак влияет только на фазу вращения, т.к. и синус и косинус периодические фукции)
    и, честно говоря, не совсем поняла и саму задачу...
    Есть подозрение, что ее всеже можно решить парентингом без экспрешнов
    вобщем как то так...
    (занудный какой-то топик получился ))
     
  9. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    в вашу задачу всеже въехала))
    (без выражений, похоже, правда никак)
    привожу пример для композиции шириной и высотой
    thisComp.width ,thisComp.height
    солид, к которому парентится нул соответственно
    thisComp.layer("White Solid 4").width ,(thisComp.layer("White Solid 4").height
    и находится в центре композиции для упрощения, в примере нулл прицеплен к правому верхнему углу солида

    R = degreesToRadians(thisComp.layer("White Solid 4").transform.rotation);
    X=(thisComp.width/2)+1.43*(thisComp.layer("White Solid 4").width/2)* Math.cos(R-.785);
    Y=(thisComp.height/2)+1.43*(thisComp.layer("White Solid 4").height/2)* Math.sin(R-.785);
    [X, Y]


    множитель 1.43 получился из:
    если нулл должен находится в углу солида - радиус (длина вектора вращения) будет ширина и высота композици , умноженная на 1/cos(45град) =(примерно)1.4
    при вращении солида нул должен быть смещенным по углу:, например, если в правом верхнем, то отставать на 45 град, отсюда взялось (R-.785) (0.785 - это радиан 45 градусов)
    другие углы - аналогично, центр сдвинуть - тоже просто (прибавить в начале нужные значения...
    вообще - центр вращения можно задать в явном виде, как и ширину и высоту солида, я просто хотела написать универсальнее...))
    у меня все работает, круто!))
    monter, поправь, если что не так))
     
  10. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    блин,работает только для квадратного солида!
    (ну да... потому что в множителе 45 градусов...
    вобщем, школу немного вспомнить , и заработает и не для квадрата...)))
     
  11. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    Ого, mazzza, наверно бессонница)).
    Мне тоже бывает лень формулировать, конечно отправным значением будет градус солида (начало анимации вращения) но
    он может быть разный по этому и написал рандомная. Почему -600, сам не знаю, просто когда +, вращение происходит как бы в противофазе.
    С позицией точки я решил опять по топорному:

    R = thisComp.layer("Cyan Solid 1").transform.rotation;
    X= -600*Math.cos(R/57,7)+900;
    Y= -600*Math.sin(R/57,7)+300;
    [X, Y]


    в принципе то же что и у вас, значения +900 +300 опять же методом научного тыка (лень высчитывать).
    Спасибо за R = degreesToRadians(thisComp.layer("Cyan Solid 1").transform.rotation); , более точно получается.
    Последнее ваше выражение еще не пробовал.
    PS. вобще нуль я взял для упрощения, в итоге будет привязываться точка эффекта.
     
  12. mazzza

    mazzza Знаток

    С нами с:
    08.02.2006
    Сообщения:
    870
    Симпатии:
    10
    Баллы:
    23
    не совсем бессонница, просто от работы както хотелось отвлечься...(вобщем, лишь бы не работать)))
    напиши, пожалуйста, размер своей композиции, размер солида и к какому углу должен быть прицеплен нул (при повороте солида 0 градусов)
     
  13. Andrey Varlamov

    Andrey Varlamov Знаток

    С нами с:
    30.07.2006
    Сообщения:
    955
    Симпатии:
    3
    Баллы:
    50
    Условия задачи немного изменились и усложнились:
    нуль не обязательно должен быть привязан парентом (к какому углу тоже не важно), важно чтоб нам выдавались верные его координаты относительно композиции. Кроме всего прочего есть еще один солид2 которому наш нуль и солид1 являются дочерними.
    вобщем иерархическая цепочка (типа локтевого сустава), в итоге костей может быть больше)).

    Решение:
    От парента слой к слою отказываемся, вся привязка експрешенами.
    нуль-
    R = degreesToRadians(thisComp.layer("White Solid 1").transform.rotation);
    X=(thisComp.layer("White Solid 1").width)* Math.cos(R);
    Y=(thisComp.layer("White Solid 1").width)* Math.sin(R);
    [X, Y]+thisComp.layer("White Solid 1").transform.position;


    солид1- для привязки позиции используем это же выражение,
    R = degreesToRadians(thisComp.layer("White Solid 2").transform.rotation);
    X=(thisComp.layer("White Solid 2").width)* Math.cos(R);
    Y=(thisComp.layer("White Solid 2").width)* Math.sin(R);
    [X, Y]+thisComp.layer("White Solid 2").transform.position;

    ротейшен просто связываем с возможностью анемировать параметр
    value+thisComp.layer("White Solid 2").transform.rotation;

    Громоздко но все работает, если есть что поправить пишите
     

    Вложения:

    • 1572522.jpg
      1572522.jpg
      Размер файла:
      32,1 КБ
      Просмотров:
      73
    • 1572523.jpg
      1572523.jpg
      Размер файла:
      86,7 КБ
      Просмотров:
      82
Модераторы: ksi2, Saplus

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