Nous sommes en ce moment 184 sur le Repaire - 182761 discussions - 948081 messages - 98557 Repairenautes inscrits |

14/12/2005, 17h24
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
Code:
thisComp.frameDuration
|

14/12/2005, 18h18
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Ah ben c'est ça ??? j'avais essayé pourtant !
Bon ben je vais réessayer alors
Bill
|

06/01/2006, 12h30
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Hello !
J'ai besoin de votre aide !!
Voici une petite expression que j'ai écrite
Code:
if(time>inPoint){
w=thisComp.layer("Calque d'effets 1").effect("Sound Keys")("Output 1")*Math.sin(time*100)*0.1;
easeIn(3, 0, 30*Math.sin((time-inPoint)/2.3875)+w);}
else{0}
Mais j'ai l'impression que le easeIn ne fonctionne pas...
Je fais cela pour la rotation 3D d'un calque autour de x.
Au cas mon expression soit mauvaise voici ce que souhaite faire :
Avant le point in du calque, rien ne bouge.
Ensuite, il tourne autour x de maniere sinusoidale (va et vient), auquel j'ajoute un tremblement generé grace a sound keys (lui meme autour d'un sin pour que ce ne soit pas toujours dans le meme sens. J'aimerais donc en plus ajouter un easeIn sur l'entrée du mouvement....
Je sais pas si j'ai été super clair...
Bill
|

06/01/2006, 13h38
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
je vois pas trop ce que tu veux faire comme effet, neanmoins je peux peut etre t apporter quelques precisions
la comparaison time et inPoint ne sert pas a grand chose, si ton calque n est pas pris en compte (au niveau visibilité dans ta fenetre de travail), ie. " time < inPoint", on s en fiche car de toute maniere le calque n'est pas ' présent'
pour le easeIn, si tu n utilises que trois parametres, voila comment cela fonctionne:
*si le premier parametre est <= 0, cela va te donner pour resultat la valeur du 2e parametre
*si le " " " compris entre 0 et 1, " " " une valeur lissée entre la valeur du 2e parametre et celle du 3e
*si le " " " >= 1, " " " la valeur du 3e parametre
dans ton exemple, tu as easeIn(3,0,xxx), donc ca te donne pour resultat la valeur xxx. et je suppose que ce n est pas ce que tu veux
ps:en tous cas ca y va les expressions chez Bibill 
|

06/01/2006, 14h54
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Oui franchement on peut faire des trucs bien sympa, et pour certaines choses ça rend beaucoup mieux qu'une anim à la clé... En tout cas j'en profite pour te remercier, car si j'avance c'est en partie grace à toi qui est super bon prof  Mais je travaille je travaille...
Posté par nab17connection
je vois pas trop ce que tu veux faire comme effet, neanmoins je peux peut etre t apporter quelques precisions
Ben j'ai une musique, et je veux que mon calque (en 3d, enfin, dans un environnement 3D) fasse un va et vient autour de x, plus un tremblement en fonction d'une musique.
Posté par nab17connection
la comparaison time et inPoint ne sert pas a grand chose, si ton calque n est pas pris en compte (au niveau visibilité dans ta fenetre de travail), ie. " time < inPoint", on s en fiche car de toute maniere le calque n'est pas 'présent'
Ben si dans mon cas (enfin je crois...) car le truc c'est que mes expression sont sur un nul qui fait bouger tout un tas de calque. Donc mes calques apparaissent de façon differente, et à partir du point in du calque nul, je souhaite que le parentage commence. Or, meme si le nul n'est pas présent avant, il calcule l'expression, et si je ne fais pas de comparaison, et que je met seulement le Math.sin((time-inPoint)/etc.) il me retourne une valeur.
Parcque le time-inPoint sert à ce que le sin commence bien à 0. Et si je ne fais pas de comparaison, il me calcule des trucs avant. Or je veux que tant que mon nul n'est pas présent, la valeur retournée soit " 0" (oulà c'était compliqué là le bill...)
Posté par nab17connection
dans ton exemple, tu as easeIn(3,0,xxx), donc ca te donne pour resultat la valeur xxx. et je suppose que ce n est pas ce que tu veux
Ben non... il me semblait que ça marchait pas cette histoire... En fait ce que je veux c'est à partir du inPoint, un résultat de l'expression allant de 0 à xxx en Y secondes (ici j'avais mis 3), et après Y secondes je veux le résultat xxx.
Avec xxx = une expression.
Bill
PS. J'aurai une autre question mais plus tard je vais encore chercher un peu mais pour l'instant j'y arrive pô !
|

07/01/2006, 14h51
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Ah en fait ça doit etre ça que je dois utiliser...
Code:
easeIn(t, tMin, tMax, value1, value2)
Bill
|

10/01/2006, 13h38
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Excusez moi mais quelqu'un aurait il la gentillesse de m'expliquer à quoi sert et comment marche le distance = length(delta); et le linear(distance, 0, 30, 100, 40).
Le linear je sais comment ça marche, je comprend le resultat, mais je ne comprends pas comment ça marche avec le length...
à cette adresse : http://forums.creativecow.net/cgi-bi...led/index.html
Bill
|

10/01/2006, 17h33
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
length calcule la longueur d'un vecteur ...
je trouve son expression pas tres bien ecrite, je l ai recrite sous cette forme:
delta represente la difference entre le y du controleur et celui du calque ( petite barre)
si elle est negative (i.e. la barre se situe en dessous du controleur), l opacite est de 100 sinon elle est proportionnelle a cet ecart (vaudra 100% qd l ecart sera <= 0 pixel...et vaudra 40% quand l ecart sera >= 30pixels, entre les deux c est lineaire.
Opacité:
Code:
CntrlPos = thisComp.layer("Controller").position[1]; PosA = position[1];
delta = CntrlPos - PosA;
if (delta < 0) 100 else linear(Math.abs(delta),0,30,100,40)
|

10/01/2006, 21h53
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
Mais ce que je comprend pas, c'est que pour moi si
delta = CntrlPos - PosA;
c'est deja une longueur...
Si on a delta=X, a quoi est egal length(X);
dans ton expression, Math.abs(delta), pour moi c'est clair, ça retourne la valeur positive de X, mais alors length ici c'est pareil ???
Bill
|

10/01/2006, 22h40
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
|
la difference c est que "length" est toujours positif ou nul et represente la longueur du vecteur (sa norme), alors que notre variable 'delta' peut etre negative...
mais je comme je t ai dit, son expression n'est pas vraiment super bien ecrite...il alourdit le code en utilisant des notations inutiles (à mon sens)
|

10/01/2006, 23h01
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
donc en gros c'est pareil que math.abs (en tout cas ici...)
|

10/01/2006, 23h27
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
dans ce cas particulier, oui cela revient au même (c'est ce que j ai d ailleurs utilise dans ma reformulation plus haut)
car on travaille avec des vecteur de dimension 1 (juste des scalaires, correspondant au y des calques)...donc on peut prendre leur valeur absolue
par contre si tu manipules des vecteurs de dimension supérieure (par exemple si l on avait considere la position en x ET en y des calques), on aurait utilisé 'length" pour determiner la longueur du vecteur (alors que Math.abs aurait retourne une erreur car cela ne peut s appliquer qu'a des scalaires)
en resumé, il utilise des methodes de calcul vectoriel, alors qu'on manipule ici uniquement des ptits scalaires tout gentils 
|

11/01/2006, 09h55
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
ok merci moi y'en a tout compris
bill
|

12/01/2006, 16h53
|
|
Repairenaute
|
|
Date d'inscription: février 2002
Messages: 23
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
Salut à tous,
je suis novice en ce qui concerne les expressions, et j'en ai besoin pour réaliser ce que je vais tenter de vous décrire.
Mon but est de créer un pont entre un point A et un point B situés tous les deux à chaque extrémité de la largeur de l'écran, dans le 1/4 inférieur de sa hauteur. Je m'explique :
- je souhaiterais faire monter des particules du bas de l'écran (celles si auront une forme pré déterminée prenons ici l' exemple de la lettre a de l'alphabet.
- les lettres "a" monteraient donc pogressivement de la gauche vers la droite jusqu'à 1/4 de l'écran (où elles s'immobiliseraient presque )
- Leur opacité augmenteraient progressivement pour être à 100 % une fois arrivé à ce fameux 1/4.
- J'ai ajouté "presque" juste au dessus car une fois arrivées au 1/4, je souhaiterais donner au pont en cours de construction un léger effet d'élasticité (qu'elles aient un très léger mouvement du haut vers le bas de type "très légère ondulation" )
Ainsi mon pont constitué de lettres "a" provenant du bas de l'écran se serait progressivement construit entre les points A (gauche) et B(droite).
Un grand merci si quelqu'un peut m'aider la-dessus car comme je vous le disais je suis pas un king en expressions et je suis un peu limité niveau timing. Merci à vous.
Matéo
|

12/01/2006, 17h32
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
re salut mateo,
bon perso je sais pas si je vais pouvoir t'aider, neanmoins je vais chercher.
Une question : est ce que ton pont est droit ? L'elasticité que tu desires doit elle etre plus forte pres du centre (les extremités fixent) ?
Bill
|

12/01/2006, 18h59
|
|
Repairenaute
|
|
Date d'inscription: février 2002
Messages: 23
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
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
|

15/01/2006, 00h55
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
ç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
Bon sinon je te cache pas que pour l'instant j'ai pas eu le temps de chercher....
Bill
|

16/01/2006, 14h47
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
|
Est il possible d'associer des formes de masque à des expressions ?
Bill
|

26/01/2006, 10h18
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
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 ?
|

27/01/2006, 01h56
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
salut Bill,
Est il possible d'associer des formes de masque à des expressions ?
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 
|

27/01/2006, 10h42
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
Posté par nab17connection
on l'a dit trente fois : NON !
Oups....
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
|

27/01/2006, 18h25
|
 |
Repairenaute
|
|
Date d'inscription: octobre 2004
Messages: 932
Bénéficie de 0 recommandations à propos de 0 messages
|
|
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
|

28/01/2006, 07h57
|
 |
Repairenaute
|
|
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages
|
|
salut Bill ,
d'abord je vois que tu as bossé
pour faire un peu plus compliqué, j'aimerais
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  .
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).
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 connai | |