toute l'information sur la réalisation vidéo numérique
 
 
les faqs tutoriaux news tests et comparatifs fiches Repaire themes annuaires chercher forums
 
  Nous sommes en ce moment 184 sur le Repaire - 182761 discussions - 948081 messages - 98557 Repairenautes inscrits

Précédent   Forums du Repaire > effets spéciaux - 3D > Adobe After Effects

Réponse
 
LinkBack Outils de la discussion Modes d'affichage
  #31  
Vieux 14/12/2005, 17h24
Avatar de nab17connection
Repairenaute
 
Date d'inscription: mai 2004
Messages: 1 046
Bénéficie de 5 recommandations à propos de 5 messages

Code:
thisComp.frameDuration
Réponse avec citation
  #32  
Vieux 14/12/2005, 18h18
Avatar de bildebool
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
Réponse avec citation
  #33  
Vieux 06/01/2006, 12h30
Avatar de bildebool
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
Réponse avec citation
  #34  
Vieux 06/01/2006, 13h38
Avatar de nab17connection
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
Réponse avec citation
  #35  
Vieux 06/01/2006, 14h54
Avatar de bildebool
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ô !
Réponse avec citation
  #36  
Vieux 07/01/2006, 14h51
Avatar de bildebool
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
Réponse avec citation
  #37  
Vieux 10/01/2006, 13h38
Avatar de bildebool
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
Réponse avec citation
  #38  
Vieux 10/01/2006, 17h33
Avatar de nab17connection
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)
Réponse avec citation
  #39  
Vieux 10/01/2006, 21h53
Avatar de bildebool
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
Réponse avec citation
  #40  
Vieux 10/01/2006, 22h40
Avatar de nab17connection
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)
Réponse avec citation
  #41  
Vieux 10/01/2006, 23h01
Avatar de bildebool
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...)
Réponse avec citation
  #42  
Vieux 10/01/2006, 23h27
Avatar de nab17connection
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
Réponse avec citation
  #43  
Vieux 11/01/2006, 09h55
Avatar de bildebool
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
Réponse avec citation
  #44  
Vieux 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
Réponse avec citation
  #45  
Vieux 12/01/2006, 17h32
Avatar de bildebool
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
Réponse avec citation
  #46  
Vieux 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
Réponse avec citation
  #47  
Vieux 15/01/2006, 00h55
Avatar de bildebool
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
Réponse avec citation
  #48  
Vieux 16/01/2006, 14h47
Avatar de bildebool
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
Réponse avec citation
  #49  
Vieux 26/01/2006, 10h18
Avatar de bildebool
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 ?
Réponse avec citation
  #50  
Vieux 27/01/2006, 01h56
Avatar de nab17connection
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
Réponse avec citation
  #51  
Vieux 27/01/2006, 10h42
Avatar de bildebool
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
Réponse avec citation
  #52  
Vieux 27/01/2006, 18h25
Avatar de bildebool
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
Réponse avec citation
  #53  
Vieux 28/01/2006, 07h57
Avatar de nab17connection
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