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

Nouvelle Formation Prise de son : les inscriptions sont ouvertes !
Maîtrisez la qualité de vos prises de son avec notre formation théorique et pratique de 3 jours ! Du 14 au 16 mai 2024 à Paris.

Transfert de valeurs par expression

Discussion dans 'Adobe After Effects' créé par viclio, 25 Juillet 2013.

  1. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    Bonjour,
    Pour une fois j'ai une question.
    J'ai crée une composition After Effects qui reproduit l'effet coverflow sur Itunes. C'est à dire des jaquettes qui défilent de gauche à droite de biais, et s'aligne face à caméra lorsqu'elles sont au centre.
    Si j'ai réussi à reproduire assez facilement l'effet de base, j'essaie d'ajouter un autre effet très simple, en vain.
    Quand ma jaquette est au centre, je veux qu'elle soit à 150% d'échelle.
    Concrètement mes jaquettes sont contraintes entre -45 et +45° selon leur position dans l'espace.
    Le problème est que pour l'echelle, je ne passe pas d'une valeur de -45 à +45 mais de 100% à 150% puis à nouveau à 100%. En gros il suffit de convertir les valeurs comme suit :
    rotation : -45 0 45
    echelle : 100 150 100
    Je suis parti dans des if/else, je pense que je peux y arriver de cette manière, mais il y a forcément plus simple ?

    Une capture pour être plus clair (et oui, mes expressions pourraient être mieux rédigées)
     

    Fichiers attachés:

    • exemple.jpg
      exemple.jpg
      Taille de fichier:
      160.7 KB
      Nb. vues:
      126
  2. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Code:
    r = Math.abs(transform.yRotation);
    r = linear(r,0,45, 150,100);
    [r,r,r];
    Je n'ai pas iTunes donc je ne peux pas voir le rendu que c'est sensé obtenir, mais avec l'essai que j'ai fait c'est un peu saccadé.
     
  3. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    Mais bien sûr !
    Je suis un peu c... quand même parce que j'avais justement utilisé Math.abs pour contourner un problème similaire (sur la position z)

    Par curiosité, il existe une manière de transférer comme je l'indique, du genre
    x y z vers
    a b c

    linear marche très bien en effet pour du
    x y
    a b

    mais si on veut dépasser ces ensembles ?

    Sinon ça marche très bien, c'est fluide, aucune raison que ça saccade chez toi... :(
     
  4. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Désolé j'ai pas trop compris la question concernant x y z vers a b c..
    et qu'est-ce que tu entends par "dépasser ces ensembles" ?
     
  5. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    C'est pas facile à expliquer...
    Si je reprends mon précédent exemple, disons faire varier l'échelle de 75 à 150 puis à 50, selon que je passe de rotation -50 à 0 à 75.
    Je pense aux méthodes d'interpolation, comme si on pouvait écrire
    inear(t, t1, t2, t3, value1, value2, value3)
     
  6. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Il faut le faire à la main et décomposer ton ensemble en autant de régions que tu veux de comportements. Pour ton exemple ça donnerait:
    si r <= 0 : linear(r, -50,0, 75,150)
    sinon: linear(r,0,75,150,50);
     
    • Je recommande ! Je recommande ! x 1
  7. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    Donc mon intuition avec les if/else était finalement la bonne (sauf pour cet exemple précis puisque le Math.abs permet d'éviter justement cette segmentation)
    J'imagine même pas le cassage de tête s'il y a beaucoup de valeurs à découper...
    En tout cas merci pour le coup de main !
     
  8. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Clair.
    mais la plupart du temps on s'en rend pas compte. Si les valeurs sont données par des clés sur la timeline, il suffit de chercher l'index de la clé précédente, et faire linear(time, key(n).time,key(n+1).time, key(n).value, key(n+1).value).

    J'ai pas trop compris si tu en avais besoin ou pas, mais si tu n'a pas de clés associées tu peux mettre tes données dans des tableaux:

    Code:
    bordures = [-10,0,15,150]; // tableau ordonné de nombres
    valeurs = [-500,200,-50,0]; // tableau de même longueur. les valeurs peuvent aussi être des points 2D ou 3D, ou autres
    N = valeurs.length;
    x = ... // le paramètre
    //================
    if (x<= bordures[0]) valeurs[0]
    else if (x>=bordures[N-1]) valeurs[N-1]
    else{
       // trouver la région:
       n=0; while (x>bordures[n+1]) n++;
       linear(x, bordures[n], bordures[n+1], valeurs[n], valeurs[n+1])
    }
     
Chargement...

Partager cette page

Dernières Occasions

 
Vous souhaitez annoncer sur le Repaire ? Contactez-nous