module inscription newsletter haut de page forum mobile

Rejeter la 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

Newbies' expressions !

Discussion dans 'Adobe After Effects' créé par bildebool, 7 Décembre 2005.

Tags:
  1. mateo

    Points Repaire:
    550
    Recos reçues:
    0
    Messages:
    37
    Appréciations:
    +0 / 1 / -0
    Yep Bill, c'est à nouveau moi... Oui le pont est parallèle à l'axe horizontal.Ce que j'ai peut être pas précisé de manière très claire, c'est que le pont se fait donc progressivement de gauche à droite mais également en épaisseur : Il doit être composé de plusieurs lignes dans son épaisseur (avec l'opacité des a qui augmente en montant) Explication par l'exemple : en considérant ce stade là :
    aaa
    aa
    aa
    aa
    aa

    Le prochain "a" va se coller sous le 3ème de la première ligne (avec une opacité finale correspondant à l'opacité ligne 2....) Puis le prochain va se coller sous ce dernier (avec une opacité finale correspondant à l'opacité ligne 3....) etc etc mais toujours avec l'opacité augmentant progressivement en passant de la ligne la plus basse à celle juste au dessus)

    Pour ce qui est de l'élasticité du pont : pas spécialement. En fait elle doit être très légère et juste refléter le fait que le pont est constitué d'éléments en suspension, donc pas stables à 100%. Comme le pont se fait progressivement de gauche à droite, j'imagine qu'il doit y avoir une intéraction entre la dernière lettre "a" qui constitue le pont à l'instant t et celles qui viennent de le constituer. C'est pour cela en fait que je me dis que c'est peut être pas si facile à rendre réaliste, mais c'est vrai qu'au jour d'aujourd'hui j'ai pas le recul pour m'en rendre compte... Il me semble que les expressions peuvent faciliter grandement ce genre de travail en contraignant une propriété par les paramètres d'une autre mais c'est un peu le flou artistique pour moi qui ne les maitrise pas. Qd je vois le niveaux des jeux d'Oscarus, Nab et Séquelle, je me dis qu'ils feraient peut être ça en 2 tps 3 mvts en bcp plus classe que ce que j'aurais imaginé... Mais c'est clair qu'ils ont du un passer un paquet de temps à bosser sur ces drôles de ptites formules. Y a du pain sur la planche ! En tout cas merci et tiens moi au jus si t'as une piste j'aurais peut être un peu de temps pour me pencher dessus ce we.A plus !

    Matéo
     
  2. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    ça te dirait pas de faire une ptite image sous toshop vite fait je suis pas sur de comprendre ce que tu veux dire en fait...... J'ai saisi le coup du pont, mais pas tout comme il faut je crois :perplexe:
    Bon sinon je te cache pas que pour l'instant j'ai pas eu le temps de chercher....

    Bill
     
  3. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Est il possible d'associer des formes de masque à des expressions ?

    Bill
     
  4. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Hello !

    Bon j'ai un petit souci avec une expression : j'essaie de faire un rebond, un peu du type du repaire des expressions de nabscripts.

    Voici mon expression, que j'ai placé sur la position d'un calque rond :
    Code:
    x=thisComp.width/thisComp.duration*time;
    y=thisComp.height-thisLayer.height/2;
    amp=150;
    startatt=2;//debut d'attenuation
    if(time<=startatt) freq=1 else freq=linear((time-startatt),0,5,1,10);
    decr=0.7;
    varia=amp*Math.cos(freq*time*2*Math.PI);//variation du rebond
    att=Math.exp(-decr*(time-startatt));//attenuation
    positiv_varia=-Math.abs(varia)//valeur positive de l'attenuation
    xV=-x*att;//x attenué
    yV=positiv_varia*att;//y attenué
    end=[position.valueAtTime(startatt)[0],y]+[xV,yV];// mouvement attenué apres startatt
    if(time<=startatt) {[x, y]+[0, positiv_varia]} else end;
    Alors mon probleme est que ça marche tres bien, sauf qu'à t=startatt (donc pour la fonction "end", mon calque passe de sa position à x=-127....
    Alors j'ai rajouter à x la valeur à t=startatt mais ça ne change rien....
    J'ai cherché un peu partout mais je n'y arrive pas....

    De plus, je veux accelerer la freq apres startatt, mais le resultat de mon expression genere un truc tout bizarre apres startatt sur les y.

    Voyez vous mon (mes?) erreur ?

    Bill

    PS : Est il possible d'associer des formes de masque à des expressions ?
     
  5. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut Bill,
    on l'a dit trente fois : NON !

    qd tu essaies Alt+click (ou Options+click) sur le chronometre "Forme du masque", tu vois que cela ne marche pas...
    et d'après toi pourquoi on écrirait un script (RotoTool par exemple :)) qui convertirait des points de track en points de masques, s'il suffisait de les relier directement au masque par expression ...

    LES SOMMETS D'UN MASQUE NE SONT ACCESSIBLES QUE PAR LE SCRIPTING

    Pour le "rebond" que cherches tu a faire ? seulement faire augmenter la fréquence à partir d un certain instant ?

    Matteo, tu veux faire un pont de "A" avec une expression de position dans chaque calque texte, c'est ca ??..si oui, cela me semble à premiere vue bien périlleux :rolleyes:
     
  6. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Oups....:o

    Sinon voilà ce que je cherche a faire : de t=0 à t=start att, rebond normal.
    apres startatt, je veux :
    1/ le rebond de moins en moins haut
    2/ le deplacement s'arrete
    3/ la frequence s'accelere

    pour se rapprocher d'un vrai ballon.

    Donc j'ai réécrit l'expression pour deja enlever le probleme de la frequence qui s'accelere, car je n'y arrive pas. Ensuite le deplacement sur x qui s'arrete ça c'est bon j'y arrive mais y'a un souci : à strat att, il se decalle et ne reprend pas depuis sa place d'avant, et apparemment le valueattime n'agit pas....

    donc en gros voilà ce que j'aimerais obtenir, mais sans decalage, et avec la frequence qui s'accelere a partir de startatt : Anim

    Et voici l'expression qui va avec :
    Code:
    x=thisComp.width/thisComp.duration*time;
    y=thisComp.height-thisLayer.height/2;
    amp=150;
    startatt=2;//debut d'attenuation
    //if(time<=startatt) freq=1 else freq=linear((time-startatt),0,5,1,10);
    freq=1;
    decr=0.7;
    varia=amp*Math.cos(freq*time*2*Math.PI);//variation du rebond
    att=Math.exp(-decr*(time-startatt));//attenuation
    positiv_varia=-Math.abs(varia)//valeur positive de l'attenuation
    xV=-x*att;//x attenué
    yV=positiv_varia*att;//y attenué
    end=[position.valueAtTime(startatt)[0],y]+[xV,yV];// mouvement attenué apres startatt
    if(time<=startatt) {fin=[x, y]+[0, positiv_varia]} else fin=end;
    fin+[150,0]
    J'ai ajouté 150 sur les x car sinon le ballon sort de l'ecran avec cette expression.
    Bon voilà le resultat est pas sensas, d'autant plus que au debut le ballon ne touche pas terre je ne sais pas trop pourquoi...

    Bill
     
  7. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Hello !!

    Bon alors en fait c'est le x*att qui marchait pas... c'est sûr si j'essaie d'attenuer un mouvement lineaire ça risque pas de marcher !!!

    Bon sinon j'ai recrit le tout çe rend plutot pas mal.
    Le resultat et l'expression
    Code:
    startatt=2;//debut d'arret
    decr=0.8;//décroissance
    amp=300;//amplitude rebond
    fD=1;//freq debut
    fF=1.5;//freq fin
    xA=460;//x arrivée
    x=thisComp.width/thisComp.duration*time;
    y=thisComp.height-thisLayer.height/2;
    if(time<startatt) t=0 else t=time-startatt;
    freq=easeIn(t,0,5,fD,fF);
    variaBS=amp*Math.abs(Math.cos(freq*time*2*Math.PI));//Before startatt
    varia=Math.cos(freq*t*2*Math.PI);//variation du rebond
    att=Math.exp(-decr*t);//attenuation
    pos=amp*Math.abs(varia);//valeur positive de l'attenuation
    yAtt=pos*att;
    xAtt=easeOut(t,0,7,x,(position.valueAtTime(startatt)[0]+xA));
    deb=[x,y-variaBS];
    end=[xAtt,y]-[0,yAtt];
    if(time<=startatt) deb else end
    Voilà donc y'a deux trois petites choses qui me chiffonne :
    - deja le position.valueAtTime(startatt)[0] ne marche pas dans mon expression.... savez vous pourquoi ?
    - au debut, le ballon ne touche pas terre, je pense que ça vient du math.abs, mais comment contourner le probleme ?
    - a la fin le ballon recule legerement... ça vient de quoi ? du easeout ?

    Enfin pour faire un peu plus compliqué, j'aimerais que le ballon "s'écrase" un peu sur les rebons du debut, en jouant sur l'echelle, et j'aimerais le faire tourner par la meme occasion....
    Je ne vois pas trop par quel bout commencer sauriez vous me guider ?

    Merci.

    Bill
     
  8. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut Bill ,
    d'abord je vois que tu as bossé :)

    là je dis stop !, ton expression est deja bien trop compliquée !! avant de penser a faire autre chose, il faut au contraire chercher à simplifier ce chantier :D.

    Commencons par les questions:
    une expression n'a pas de memoire, elle ne sait pas ce qu elle a calculé dans le passé, donc tu ne peux faire appel a valueAtTime() pour lui dire de prendre la valeur qu elle a calculé xx images auparavant (pour faire cela c est une boucle while par exemple sur la duree de la comp, pas tjs facile et tres gourmand en calcul). Par contre, attention ! qd tu utilses valueAtTime() mais en faisant reference à un autre calque (pas celui sur lequel tu ecris l'expression), alors là c'est possible ! Cela va utiliser la valeur de la position de l'autre calque à l'instant précisé.

    Si tu vois que ta balle ne "touche pas terre", c est sans doute parce que ton rebond est rapide et que ta composition a une cadence trop faible...et donc des images intermediaires manquent (j avais mis 99i/s pour voir large)

    Bon allons y, on peut faire cela de plusieurs facons ... prenons en une un peu originale.

    d apres ce que tu demandes, tu aimerais controler l amplitude et la frequence en fonction du temps...et que cela agisse uniquement à partir d'un certain temps (ce qui n'est pas tres naturel on est d'accord, car une balle qd elle rebondit perd tout le temps de l'énergie normalement...elle ne rebondit pas à 1m de haut pendant 3s et s arrete net).

    [​IMG]

    1. je place deux markers (repères) sur mon calque Balle, le premier definit l'instant où l'"atténuation" va prendre effet ("start") et le deuxieme l'instant de fin, c est à dire qd la balle ne rebondira plus ("end"). Je dis "attenutation" pour reprendre ton terme, mais c'est pour designer l'intervalle pendant lequel l'amplitude va diminuer et la frequence augmenter.

    2. j'écris cette expression de position et j ajoute deux clés (une pour le départ à gauche et une autre pour l'arrivee à droite)
    Code:
    ampmin = 0; ampmax = 200; freqmin = 1; freqmax = 1.7;
    start = marker.key("start").time;  end = marker.key("end").time;
    
    amp = linear(time,start,end, ampmax,ampmin); 
    freq =easeIn(time,start,end,freqmin, freqmax)
    y = Math.abs(amp*Math.cos(freq*time*2*Math.PI));
    position - [0,y]
    ca te fait au passage voir un autre truc..comme utiliser les repères dans nos expressions...c'est sympa de connaitre car cela permet d'avoir du controle simplement en faisant glisser le repère avec la souris...

    3. pour la rotation je me suis contenté de deux clés


    rebond_controle.wmv
     
  9. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Aie aie aie ça me tue comme un truc que je fais compliqué tu le fais simple....

    Bon j'ai survolé, car je n'ai pas le temps, mais je vais regarder ça de plus pres et avec beaucou d'interet !

    Sinon ok pour le valueAtTime, c'est ce qu'il me semblait mais moi y'en etre pas tellement sûr !!
    Pour le fait que la balle ne touche pas terre, c'est ce qu'il me semblait aussi, par rapport a la vitesse et au fait qu'on prenne la valeur absolue du mouvement

    Exactement, mais je trouve ça sympa de pouvoir la faire rebondir un temps et l'arreter au bout d'un moment, comme si on mettait un bonhomme qui dribble puis qui s'arrete...

    Oui c'est vrai j'avais vu que c'etait possible, mais pour l'instant j'y pensais jamais, je le ferai dorenavant !

    En fait je voulais essayer de tout controler par la meme expression, c'est pour ça j'ai évité les clés, mais c'est vrai que il vaut mieux y aller petit a petit :) Je pense que ça doit etre faisable j'essaierai...

    Bon voilà pour l'expression des que j'ai after sous la main je m'y mets !

    Zanks a lot !

    Bill
     
    #54 bildebool, 28 Janvier 2006
    Dernière édition: 28 Janvier 2006
  10. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Bon ton expression marche d'enfer (forcement...) bon maintenant faut que je comprenne pourquoi je suis passé par si compliqué.... En fait je crois que j'ai bloqué sur le Math.exp, alors que tu as utilisé le linear.

    Une question qui n'a rien à voir : sur mac (je sais pas sur PC, j'ai pas remqrqué si ça m'est deja arrivé ou non...) Parfois j'ai des expressions ou il m'indique "errreur de syntaxe, erreur dans la ligne 1" et il me la desactive. Alors je verifie et reverifie mais non, pas d'erreur... Alors je retape mon expression dans un nouveau calque (la meme), mais pas copier coller, sinon ça marche pas, et qd j'ai tout retapé, ça marche... Je compare, c'est la meme.... Alors on dirait qu'il y a des caracteres cachés jesaispasoù..... J'ai l'impression que ce probleme arrive qd je passe par la petit fleche ou il y a certains parametres deja ecrits. Si je l'ecrit moi meme je pense que ça marche et en passant pas le menu non... cela vous rappelle qqchose ou bien suis je le seul à qui ça arrive ?

    Pour finir, est il possible d'affecter en une seule ligne deux nombres pour un random ?
    ex :
    xy=[10, 20]; random(xy);
    qui remplacerait random(10, 20);

    Bill
     
  11. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Quelqu'un pourrait expliquer l'expression de l'animation de texte prédéfinie "impulsion bulle" ? Je la pige pas des masses.....

    Bill
     
  12. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Pourquoi y'a que nab et moi ici ????

    Bill
     
  13. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    tu parles de celle là:
    Code:
    f=effect(1)(1);
    div = Math.abs(Math.sin(2 * textIndex/textTotal - time*f)*100);
    result = 0;
    
    if (div) {
    	result = 300/div - 3;
    }
     
  14. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    oui, en fait je comprend bien les deux premieres lignes, result je vois pas trop mais j'imagine que ça dit que le resultat de l'expression est result, mais le if div je vois pas trop comment ça marche.... (je comprendrais mieux un if (div>chaipaqoi).......

    Bill
     
  15. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    le 'if (div)" pourrait etre remplacé par if (div != 0) ou ce cas-ci if (div > 0)...puisque div est dans cette expresion tjs positif ou nul (il représente la valeur absolue d un nombre)
    Une division par 0 n'est pas possible c'est pourquoi l'expression définit deux résultats possible:
    0 , qd div vaudra 0
    300/div - 3 , qd div > 0

    on aurait pu par exemple pour éviter le cas d une division par zéro, écrire quelque chose comme :
    div = 0.001 + 100 * Math.abs(...);
    300/div -3;
     
Chargement...
Discussions similaires - Newbies' expressions
  1. ottix
    Réponses:
    9
    Nb. vues:
    480

Partager cette page