Avatar de l’utilisateur
Pichade
Administrateur
Messages : 1089
Enregistré le : 06 Mar 2015, 08:27

[Expression] Random Color sur une palette définie

03 Juin 2016, 16:11

Salut les loulous,

J ai besoin d'un petit coup de main.

J ai une vingtaine de carrés qui sont remplis avec une palette contenant 12 couleurs.
J'aimerais grâce à une expression faire changer les couleurs de façon random pour donner un peu de vie à tout ça.

J ai fait un tour de l interweb et j ai trouvé ça:

Code : Tout sélectionner

segMin = 1.3 //minimum segment duration
segMax = 3.2; //maximum segment duration
minVal = [0,0,0,1];
maxVal = [1,1,1,1];

end = 0;
j = 0;
while ( time >= end){
  j += 1;
  seedRandom(j,true);
  start = end;
  end += random(segMin,segMax);
}
endVal =  random(minVal,maxVal);
seedRandom(j-1,true);
dummy=random(); //this is a throw-away value
startVal =  random(minVal,maxVal);
ease(time,start,end,startVal,endVal)


Cette expression me donne pratiquement ce que je veux: les couleurs changent en random mais avec cette expression je ne peut pas restreindre les nombre de couleurs à ma palette.

Voila j'espère que c'est assez clair et que quelqu'un pourra m aider :) (hein lakpo)

Bisou
0

Avatar de l’utilisateur
Duduf
Mug
Messages : 601
Enregistré le : 16 Juin 2015, 18:02
Contact : Site Internet

Re: [Expression] Random Color sur une palette définie

03 Juin 2016, 22:50

Hello !

[édité après première version, j'avais mal lu ton expression et je posais des questions cons]

Jee peux te donner la marche à suivre :

Il faut commencer le script par créer un Array contenant tes douze couleurs, un truc du style :

  1. var col1 = [R,V,B,A];
  2. var col2 = [R,V,B,A];
  3. var col3 = [R,V,B,A];
  4. var col4 = [R,V,B,A];
  5. //...
  6. var col12 =  [R,V,B,A];
  7. var toutesLesCouleurs = [col1,col2,col3, /*(...),*/ col12];


Ensuite, il te faut faire les deux random entre 1 et 12 pour sélectionner au pif une couleur dans l'array toutesLesCouleurs, ça te donnera tes startValue et endValue

  1. startValue = toutesLesCouleurs[valeurAuPifEntre1et12]



En expressions ya plusieurs façon de définir les couleurs pour ta liste :
en RVBA, avec des valeurs qui vont de 0.0 à 1.0
(donc [1,1,1,1] c'est blanc, [0,0,0,1] c'est noir)
sinon tu peux aussi faire en HSLA (hue, sat, lightness, alpha) si tu préfères,
et ensuite ya une fonction dont jai oublié le nom (regarde dans la liste) qui peut te convertir le résultat en RVBA à la fin. After attend le résultat en RVBA.
Ca doit etre un truc genre HSLtoRVB([R,V,B,A]) si mes souvenirs sont bons.


PS : je kiffe ces blocs de codes collapsés par défaut, ya un côté tellement supeeeeense !
Modifié en dernier par Duduf le 03 Juin 2016, 23:05, modifié 2 fois.
1

Avatar de l’utilisateur
Duduf
Mug
Messages : 601
Enregistré le : 16 Juin 2015, 18:02
Contact : Site Internet

Re: [Expression] Random Color sur une palette définie

03 Juin 2016, 23:01

Allez en fait c'est simple, vlà le truc (à compléter avec 12 couleurs, je n'en mets que 4 pour l'exemple)

Attention, j'ai pas after ouvert, je teste pas, c'est sans garantie ;)


  1. //durations
  2. segMin = 1.3 //minimum segment duration
  3. segMax = 3.2; //maximum segment duration
  4.  
  5. //colors used
  6. var col1 = [1,0,0,1];
  7. var col2 = [1,1,0,1];
  8. var col3 = [1,1,1,1];
  9. //...
  10. var col12 = [0,1,0,1];
  11. var allColors = [col1,col2,col3, /*(...),*/ col12];
  12.  
  13. //how many colors are used
  14. minVal = 1;
  15. maxVal = 12;
  16.  
  17. end = 0;
  18. j = 0;
  19. while ( time >= end){
  20.   j += 1;
  21.   seedRandom(j,true);
  22.   start = end;
  23.   end += random(segMin,segMax);
  24. }
  25. endCol =  random(minVal,maxVal);
  26. endVal = allColors[endCol];
  27.  
  28. seedRandom(j-1,true);
  29. dummy=random(); //this is a throw-away value
  30.  
  31. startCol =  random(minVal,maxVal);
  32. endVal = allColors[startCol];
  33.  
  34. ease(time,start,end,startVal,endVal)
1

Avatar de l’utilisateur
Duduf
Mug
Messages : 601
Enregistré le : 16 Juin 2015, 18:02
Contact : Site Internet

Re: [Expression] Random Color sur une palette définie

03 Juin 2016, 23:03

PS après j'arrète : tu peux aussi pointer les 12 couleurs au lasso vers des options pour expression/paramètre couleur pour pas te prendre la tête, et pouvoir changer la palette facilement.

Bisous :)
0

Avatar de l’utilisateur
Duduf
Mug
Messages : 601
Enregistré le : 16 Juin 2015, 18:02
Contact : Site Internet

Re: [Expression] Random Color sur une palette définie

03 Juin 2016, 23:08

PPS : pour les plus fous, avec une boucle sur les effets, on peut parcourir la liste des effets du calque à la recherche de toutes les options pour expression couleur, et ainsi créer le tableau, sans avoir un nombre prédéfini de couleurs dans la palette et sans retoucher l'expression pour en enlever/ajouter donc, et ça, c'est cool.
0

Avatar de l’utilisateur
Pichade
Administrateur
Messages : 1089
Enregistré le : 06 Mar 2015, 08:27

Re: [Expression] Random Color sur une palette définie

04 Juin 2016, 20:32

Oh Duduf gros merci,
Je t'avoue je n ai pas eu le temps de tester et ce WE je ne sais pas si je pourrais mais je le fais ASAP et te dirais si ça marche ou pas ^^

Encore merci !!
0

Avatar de l’utilisateur
kana
Modérateur
Messages : 503
Enregistré le : 25 Nov 2015, 12:40

Re: [Expression] Random Color sur une palette définie

04 Juin 2016, 22:17

Yo !

Dis duduf, peux tu expliquer rapidos ce qu'est le random "poubelle" ?
J'ai déjà vu ça, mais j'ai jamais compris ce que ça changeait de faire ce reste sur le random ?
0

Avatar de l’utilisateur
kana
Modérateur
Messages : 503
Enregistré le : 25 Nov 2015, 12:40

Re: [Expression] Random Color sur une palette définie

04 Juin 2016, 23:11

Alors j'aurais été bien incapable d'écrire cette expression.
Cependant pour moi y'a des bricoles à changer.

Alors tu me dis si je me trompe.
En fait, ton allColors est un array, donc tu peux pas faire un random au dessus pour selectionner ton choix, il te faut une valeur absolue, vu que tu vas de 0 à 3 (ici pour 4 couleurs) .
donc j'ai ajouté un math.floor
Et du coup j'ai changé le minVal et maxVal, vu que le minval sera toujours 0, ce qui donnera la 1ere couleur, et le max de couleur sera bien 4, rapporté en array et avec le mathfloor tu tombes à 3, donc la 4eme couleur.
Le seul truc que je sais pas, c'est si dans le random(minVal,maxVal) avec maxVal=4, si tu peux tomber sur 4 pile, car à ce moment là tu aurais la valeur 4 de l'array allcolors, et ça ferait une erreur. Pourrais tu me dire ça ?

Bon enfin comme ça, ça a l'air de fonctionner (bon c'est incompréhensible comme explication mais je suis sur que tu m'as suivi)

Voilà et le dummy random, je comprends pas comment ça marche ce truc, même si je l'ai dejà vu plusieurs fois, donc si tu peux m'éclairer.


  1. //durations
  2. segMin = 1.3 //minimum segment duration
  3. segMax = 3.2; //maximum segment duration
  4.  
  5. //colors used
  6. var col1 = [1,0,0,1];
  7. var col2 = [0,1,0,1];
  8. var col3 = [0,0,1,1];
  9. var col4 = [1,0,1,1];
  10.  
  11. var allColors = [col1,col2,col3,col4];
  12.  
  13.  
  14. minVal = 0;
  15. maxVal = 4; //how many colors are used
  16.  
  17.  
  18. end = 0;
  19. j = 0;
  20.  
  21. while ( time >= end){
  22.   j += 1;
  23.   seedRandom(j,true);
  24.   start = end;
  25.   end += random(segMin,segMax);
  26. }
  27.  
  28. endCol =  Math.floor(random(minVal,maxVal));
  29. endVal = allColors[endCol];
  30.  
  31. seedRandom(j-1,true);
  32. dummy=random(); //this is a throw-away value
  33.  
  34. startCol =  Math.floor(random(minVal,maxVal));
  35. startVal = allColors[startCol];
  36.  
  37. ease(time,start,end,startVal,endVal);
0

Avatar de l’utilisateur
Duduf
Mug
Messages : 601
Enregistré le : 16 Juin 2015, 18:02
Contact : Site Internet

Re: [Expression] Random Color sur une palette définie

06 Juin 2016, 10:23

Bien vu pour le Math.floor, c'est ce qu'il fallait faire que j'oublie à chaque fois ;
Random ne sort jamais la valeur supérieure non, donc pas de souci le code est bon !

pour ce qui est du dummy, je sais pas.... Peut etre que sur certaines versions / Config si on fait pas un premier random la valeur qui sort est pas bonne/la meme que la précédente ?
0

Avatar de l’utilisateur
kana
Modérateur
Messages : 503
Enregistré le : 25 Nov 2015, 12:40

Re: [Expression] Random Color sur une palette définie

06 Juin 2016, 14:09

Ben je sais pas trop, d'après dan ebberts c'est important...
j'ai jamais compris le truc, je pense que c'est pour relancer la séquence ou dans le genre, mais effectivement j'ai remarqué que ça change un truc.
On dirait que c'est pour reseter le truc pour retomber sur le même random :
http://motionscript.com/mastering-expre ... dom-1.html


Throw-away Random Numbers

Remember that when you seed the random number generator with a particular seed using the seedRandom(seed,true) method, you will always get the same sequence of random numbers on subsequent calls to random(). In this example, as we go through the loop, the first call we make to random() after setting the seed is to get the duration of the current segment. After we fall out of the loop we call random() again to get the ending Position for this segment. That's three random numbers (segment duration, x coordinate, y coordinate). When we set the seed back to the index of the previous segment to pick up the ending Position of that segment (which is the starting Position of the current segment) we need to remember that we've been using the first call to random() after setting the seed to get a segment duration. Therefore, after we set the seed back to "j-1", we need to throw away the first call to random() because it just gets us the duration of the previous segment (which we don't need). Then the next call to random() will generate the proper x and y coordinates of the starting Position (which was the ending Position of the previous segment). That's the reason for the line of code that plugs the previous segment duration into the "dummy" throw-away variable. If we didn't do this, we wouldn't get the same x and y coordinates that were generated as the ending Position when we were in the previous segment. Make sense? It's an important concept to wrap your brain around, so you may want to come back to it later if you don't get it yet.
0

Retourner vers « Scripts & Expressions »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité