module inscription newsletter haut de page forum mobile

Dismiss Notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos

Ateliers et Formations

[Résolu] Expression défilement infini modulo

Discussion in 'Adobe After Effects' started by Baptiste12, Apr 9, 2017.

  1. Baptiste12

    Trophy Points:
    100
    Likes Received:
    0
    Messages:
    6
    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...
     
  2. nestaphe

    So

    Trophy Points:
    13,225
    Likes Received:
    251
    Messages:
    2,067
    Appréciations:
    +207 / 1,516 / -5
    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

    Trophy Points:
    100
    Likes Received:
    0
    Messages:
    6
    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, Apr 9, 2017
    Last edited: Apr 9, 2017
  4. beginUndoGroup

    Trophy Points:
    3,170
    Likes Received:
    6
    Messages:
    142
    Appréciations:
    +4 / 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
     
    • Dislike Dislike x 1
  5. Baptiste12

    Trophy Points:
    100
    Likes Received:
    0
    Messages:
    6
    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

    Trophy Points:
    3,170
    Likes Received:
    6
    Messages:
    142
    Appréciations:
    +4 / 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

    Trophy Points:
    100
    Likes Received:
    0
    Messages:
    6
    Appréciations:
    +0 / 0 / -0
    Ça marche du tonnerre, merci beaucoup ! :)
     
Loading...

Dernières occasions

 

Share This Page

Dernières Occasions

 
Vous souhaitez annoncer sur le Repaire ? Contactez-nous