Aide pour After Effect, techniques, expressions.

dimanche 30 août 2009

telephone

Après le SOS de Fred, j'ai trouvé la problématique intéressante, et relativement concrète.
Voici donc ma solution :














Je posterai la solution surement la semaine prochaine, parce que là, pas trop le temps (et oui, l'expression n'est pas très compliquée (environ 35 lignes, ya pire), mais écrire l'article, c'est un peu plus long...)

2 commentaires:

  1. Cool, c'est vraiment sympa d'avoir planché sur le sujet.
    Effectivement, avec PI dans l'histoire, la courbe due au retard fonctionne mieux (un beau demi cercle quoi^__^).
    Cette problématique réglée, on a ajouté du poids sur les maillons pour que le fil garde une forme courbée, même à l'arrêt.
    Ce poids est bien sur parametrable via une glissière.

    plafond=thisComp.layer("plafond").index;
    sol=thisComp.layer("sol").index-1;
    myIndex = sol-index;
    indexTransfo = linear(myIndex, 1, sol-2, 0, 3.141593);
    delay = Math.abs(Math.sin(indexTransfo));

    middle = Math.ceil((sol - plafond) /2);
    d = Math.abs(Math.abs(index-plafond - middle) - middle);

    delay = delay / thisComp.layer("Controleur").effect("delayDivider")("Curseur").value;
    if (!thisComp.layer("Controleur").effect("delaySwitch")("Case").value) delay = 0;

    a=thisComp.layer("A").transform.position.valueAtTime(time - delay);
    b=thisComp.layer("B").transform.position.valueAtTime(time - delay);


    nombre=thisComp.layer("sol").index-plafond-1;

    V=sub(b,a);
    I=index-plafond;
    increment=linear(I,0,nombre+1,0,1);


    cord = a+V*increment;
    [cord[0], cord[1]+thisComp.layer("plafond").effect("slack")("Curseur")*Math.sqrt(d)]

    Je vois que vous avez aussi pensé le problème de la rotation des maillons. Le gif donne l'impression que les maillons s'alignent sur 2 vecteurs qui se rejoignent au centre.

    Quand à la déformation des boucles, vous avez utilisé le time remap sur une pré-compo ?
    Si j'utilise ça:

    A=this_comp.layer("Maillon_01");
    B=this_comp.layer("Maillon_02");
    point1=A.toComp(A.anchorPoint) ;
    point2=B.toComp(B.anchorPoint);

    delta=sub(point2, point1);
    distance=length(delta);

    t =linear(distance, 181, 916.3, 40, 0) /25;
    if (distance > 1500) t = 1 ;

    Cela marche très bien sauf que je n'arrive pas encore à définir la variable "point2" comme étant le point d'encrage du calque suivant sur l'index. Ce qui est tout de même balo, je l'avoue.
    Bref, j'ai encore pas mal de choses à voir.
    Encore merci pour votre aide et votre rapidité, cher Saucisse et big up à Micha pour avoir cogité à mes cotés.
    J'ai hâte de comparer avec votre solution.

    Fred.

    RépondreSupprimer
  2. le rendu est impressionnant !
    Je me lance à la réalisation, une chose est sûr je n'y arriverais pas seul ;)

    RépondreSupprimer