Users online now

  1. ogt
  2. rameurdocean
  3. ropa
  4. miquel cervera
  5. Mouis
  6. Denis11
  7. jmdebono
Nous sommes en ce moment 485 sur Le Repaire : 12 Repairenautes connectés, 461 visiteurs, 12 robots

[Résolu] Expression défilement infini modulo

Discussion dans 'Adobe After Effects' créé par Baptiste12, 9 Avril 2017.

  1. Baptiste12

    Points Repaire:
    225
    Recos reçues:
    0
    Messages:
    4
    Appréciations:
    +0 / 0 / -0
    Bonjour à tous, je souhaiterais savoir on pouvais m'éclairer sur un point : Sur After Effect, je souhaiterais faire défiler une composition de droite vers la gauche de façon régulière et à l'infini selon le temps. Je me suis renseigné sur la toile et j'ai trouvé une expression avec la syntaxe suivante :

    x = largeur de la composition - (Time * facteur % largeur de la composition);
    y = position[0];
    [x,y];


    L'expression marche très bien mais j'aimerais contrôler le facteur afin de pouvoir ralentir ou accélérer la vitesse du défilement de la composition en plaçant des clés. J'ai donc lié la variable facteur à la position en x d'un calque nul. Et j'ai placé des clés plus ou moins élevées en x sur la position de ce calque.

    Et malheureusement, ça ne marche pas... enfin ça fait un rendu très bizarre...l'objet recule parfois au lieu d'avancer...

    Alors voici ma question : Auriez-vous une astuce pour avoir l'effet tant désiré ou sinon sauriez-vous où ça bloque dans mon raisonnement ? Merci à vous...
     

    Publicité

  2. nestaphe

    So

    Points Repaire:
    6 330
    Recos reçues:
    37
    Messages:
    541
    Appréciations:
    +14 / 139 / -1
    Pour cela, il faut utiliser l'effet "paramètre glissière" (c'est précisément à cela qu'il sert, tu le trouveras dans effets > "options pour expressions"). Ensuite tu dois lier ton facteur avec le lasso (la spirale) et mettre les points clés dont tu as besoin au paramètre glissière qui animera le facteur. Si tu as besoin d'animer plusieurs paramètres d'une expression, alors tu appelles plusieurs effets "paramètre glissière", tu les renommes pour t'y retrouver (genre "facteur", "boulangère", "policier" ;-)) et tu fais les liaisons multiples selon tes besoins.
     
    • J'aime J'aime x 1
  3. Baptiste12

    Points Repaire:
    225
    Recos reçues:
    0
    Messages:
    4
    Appréciations:
    +0 / 0 / -0
    Je viens de faire ce que tu m'as dis mais le problème c'est qu'on voit ma composition reculer avant de reprendre dans le bon sens à une nouvelle vitesse. Au changement de valeur sur mon parametre glissière, ça me fait aller dans l'autre sens jusqu'à la prochaine keyframe.
    J'ai mis une keyframe sur le paramètre glissière à 400 à 2s et à 200 à 3s.
    La composition avance à une vitesse de 400 pendant deux secondes mais entre la 2 et 3ème seconde, la composition recule et à la troisième seconde elle se remet à avancer à une vitesse moins élevé.
     
    #3 Baptiste12, 9 Avril 2017
    Dernière édition: 9 Avril 2017
  4. beginUndoGroup

    Points Repaire:
    3 295
    Recos reçues:
    6
    Messages:
    129
    Appréciations:
    +3 / 2 / -0
    L'expression x = x0+time*factor n'est pas adaptée à ce que tu veux faire. Il faut "intégrer" la vitesse.
    Si tu parles anglais, le lien ci-dessous pourra t'aider.

    Expression Speed and Frequency Control

    Xavier
     
    • Merci Merci x 1
  5. Baptiste12

    Points Repaire:
    225
    Recos reçues:
    0
    Messages:
    4
    Appréciations:
    +0 / 0 / -0
    J'ai bien lu tout ça et cela semble bien être adapté à mon problème. J'ai insérer l'expression dans la position de mon calque et lié à un facteur, celui-ci semble bien pouvoir géré la vitesse.
    Malheureusement je suis incapable de l'adapter à mon code d'origine car celui de l'article ne prend pas en compte ma fonction modulo :

    Code:
    /* CODE D'ORIGINE */
    facteur=thisComp.layer("Facteur SOL AVANT").effect("Paramètre glissière")("Curseur");
    x=1920 - (time * facteur  % 1920);
    y=position[1];
    [x,y]
    
    /* CODE DU BLOG */
    spd = effect("Slider Control")("Slider");
    n = spd.numKeys;
    if (n > 0 && spd.key(1).time < time){
      accum = spd.key(1).value*(spd.key(1).time - inPoint);
      for (i = 2; i <= n; i++){
        if (spd.key(i).time > time) break;
        k1 = spd.key(i-1);
        k2 = spd.key(i);
        accum += (k1.value + k2.value)*(k2.time - k1.time)/2;
      }
      accum += (spd.value + spd.key(i-1).value)*(time - spd.key(i-1).time)/2;
    }else{
      accum = spd.value*(time - inPoint);
    }
    value + accum
    Sauriez-vous m'aidez ?
    Merci.
     
  6. beginUndoGroup

    Points Repaire:
    3 295
    Recos reçues:
    6
    Messages:
    129
    Appréciations:
    +3 / 2 / -0
    Je suppose que remplacer accum+value à la fin par :

    Code:
    x = 1920 - accum%1920;
    y = position[0];
    [x,y];
    devrait marcher.

    Xavier
     
    • Je recommande ! Je recommande ! x 1
  7. Baptiste12

    Points Repaire:
    225
    Recos reçues:
    0
    Messages:
    4
    Appréciations:
    +0 / 0 / -0
    Ça marche du tonnerre, merci beaucoup ! :)
     

Partager cette page