| Le problème:
Le concept derrière ce tutoriel est sorti d'une discussion en ligne. Un collègue After Effects passionné tente de trouver une expression pour générer motion qui a été aléatoire dans le temps et l'espace. Qui est, Positions cibles serait aléatoire de même que le temps qu'il faut pour y arriver. Le problème que vous rencontrez lors de la tentative de développer une telle expression, c'est que là ne semble pas être une bonne façon de procéder de la valeur des variables dans le temps d'un cadre à la prochaine. Toutes les variables que vous définissez sera passé à l'image suivante. Prenons l'exemple suivant l'expression de l'opacité:
If (temps = 0) (
X = 10
}
Else (
X = x + 1
}
Cela fonctionne bien à la première image. Lors de la deuxième image, vous obtiFinrez une erreur parce que x n'est pas défini. L'expression ne se souvient pas que x a été de 10 sur l'image précédente. Cela devient un obstacle sérieux lorsque vous essayez de faire quelque chose au hasard sur une période de temps car une fois que vous décidez combien de temps il devrait prFinre, Vous avez besoin de vérifier à chaque image, pour voir si vous êtes encore fait. Difficile à faire si vous ne pouvez pas passer cette valeur à partir d'une image à l'autre.
Seed_random à la rescousse:
Il s'avère que vous pouvez contourner ce problème avec le renforcement (par AE 5.5) seed_random fonction. Cette fonction vous permet d'établir une séquence répétitive de nombres aléatoires et à régénérer à volonté, Seulement par le rétablissement de la semence à une valeur précédente et ensuite appeler le hasard () la fonction. Ce qui nous donne une solution au problème, parce que même si nous ne pouvons pas passer nos valeurs aléatoires d'une image à l'autre, Nous permet de recréer à l'aide de seed_random. , regardons comment fonctionne seed_random.
Ouvrir le dossier de projet, puis ouvrez la base comp ". Il s'agit juste d'un comp 640x480 avec une couche solide 50x50 ajoutée. Sélectionnez "solides 1" et de révéler la position de propriété. Alt-clic (option-clic) sur le chronomètre pour activer l'expression de cette propriété. Entrez l'expression suivante:
[random (0,This_comp.Largeur),Aléatoire (0,This_comp.Hauteur)];
Ce qui cause la place d'aller à une position aléatoire dans les comp. Un aperçu de la comp. Vous remarquerez que la place des sauts à une nouvelle position sur chaque image. Pas très utile. Ajouter une nouvelle ligne à l'expression de sorte qu'il se lit maintenant:
Seed_random (1,True);
[random (0,This_comp.Largeur),Aléatoire (0,This_comp.Hauteur)];
Avis de nouveau que la place des sauts à une position aléatoire, mais quand vous prévisualisez reste là. Ce nouveau comportement est dû à un changement qui Adobe apportées à la fonction de seed_random AE 5.5. Ils ont ajouté un deuxième paramètre, Que lorsqu'elle est définie sur "true" définit la fonction aléatoire de sorte que des nombres aléatoires générés ne dépFinent pas de temps. Les nombres aléatoires dépFinent de la couche de nombre, Numéro de la propriété, La valeur du premier paramètre dans l'appel seed_random (la «graine»), Et le nombre de fois où la fonction aléatoire a été appelé. Ce qui signifie que la même expression va générer différents nombres aléatoires dans une couche ou à la propriété (plus tard, nous en profiterons pour ajouter rapidement de cette complexité de nos comp). Essayez de changer la "semence" de paramètre à un autre numéro. Vous remarquerez que le carré se déplace à un autre Finroit et y reste. Modifier le deuxième paramètre à "false" et remarqué que lorsque vous preview, La place, tous les sauts sur la place de nouveau.
Ajouter un peu de code à votre expression afin qu'il ressemble à ça:
If (temps 1) (
Seed_random (1,True)
}
Else (
Seed_random (2,True)
}
[random (0,This_comp.Largeur),Aléatoire (0,This_comp.Hauteur)];
Maintenant, vous aurez remarqué que, lorsque vous prévisualisez, La place reste à un Finroit pour la première seconde, puis passe à un autre emplacement pour le reste de la comp.
Alors comment pouvons-nous utiliser ce nouveau, Plus puissant seed_random fonction? Voici le concept clé: Avec le second paramètre à "true", Pour une couche, Propriété, Et la valeur des semences, Le nombre aléatoire, vous obtenez lors de l'appel au hasard () la fonction ne dépFin que de savoir combien de fois vous avez appelé la fonction depuis la création de semences. Qui est, La première fois que vous appelez aléatoire () après la mise en place des semences, vous obtiFinrez un nombre aléatoire particlar (appelons le x). Le second appel va générer un second nombre aléatoire (appelons ce y) et ainsi de suite. Mais si vous appelez de nouveau seed_random à l'original de semences, La séquence démarre plus. Qui est, Le prochain sondage () va régénérer le nombre aléatoire (x, dans ce cas). En utilisant une valeur différente de semences cause d'un tout autre ordre d'être généré. Prenons l'exemple suivant:
Seed_random (1,True); / / définir la valeur des semences
A = random ();
B = random ();
C = random ();
Seed_random (1,True); / / réinitialisation de la graine à la même valeur
I = random ();
J = random ();
K = random ();
Seed_random (2,True) / / nouvelles semences
Q = random ();
R = random ();
S = random ();
Seed_random (1,True); / / restaurer l'original de semences
X = random ();
Y = random ();
Z = random ();
Dans ce cas, A,B, Et c seront tous différents nombres aléatoires. CepFinant, A et je vais être la même, Et b j sont les mêmes, Et c et k sera la même parce que la semence a été remis à zéro (à 1 dans ce cas) et la séquence aléatoire démarre plus. Q,R et s sera une nouvelle séquence de nombres aléatoires parce que la semence a été changé à 2. La séquence x,Y,Z seront les mêmes que pour un,B,C, et je,J,K parce que la semence a été fixé à 1 fois. Afin que nous puissions revenir à une séquence de nombres aléatoires en rétablissant la valeur de semences qui ont produit ces chiffres.
Comment cela peut-il nous aider? De générer au hasard de notre motion, à n'importe quel cadre nous avons besoin de savoir plusieurs choses sur le segment en cours de mouvement: Heure de départ, Position de départ, Heure de fin, Et de fin de. Seront tous ces nombres aléatoires que nous allons produire des semences en utilisant une autre valeur pour chaque segment de la motion. Et nous les semences de base de valeur segment sur lequel nous sommes actuellement en. Si tout ce que nous avons à faire est d'avoir l'expression être en mesure de déterminer qui est en débat (à partir de laquelle il sera en mesure de déterminer la valeur des semences), Ensemble les semences, Et régénérer la séquence de nombres aléatoires qui nous donnent l'heure de début, Position de départ, Heure de fin, Et les valeurs de position de fin du segment actuel.
Ok - nous allons examiner ce que sera notre objectif pour cette expression. Nous voulons de la place pour passer en douceur d'une position aléatoire sur l'écran à l'autre. Nous voulons aussi que le temps qu'il faut pour ce faire d'être aléatoire (c'est-à-dire entre .5 et 2 secondes). Cette expression fera que:
Seg_start_time = 0; / / les conditions initiales
Seg_Fin_time = 0;
I = 1;
Tmin = .5, / / temps de cycle minimum (ne peut être zéro)
Tmax = 2; / / maximum les temps de cycle
While (heure = seg_Fin_time) (
I = I +1; seed_random (I,True);
Seg_start_time = seg_Fin_time;
Seg_Fin_time = seg_Fin_time + random (Tmin,Tmax);
}
Pour cent = (temps - seg_start_time) / (seg_Fin_time - seg_start_time);
Target_x = random () * This_comp.Largeur;
Target_y = random () * This_comp.Hauteur;
Seed_random (I-1,True);
X = random () / / c'est une valeur à jeter
Old_x = random () * This_comp.Largeur;
Old_y = random () * This_comp.Hauteur;
L'aise (pour cent,[old_x,Old_y],[target_x,Target_y]);
Copie de cette expression et de le coller dans la position d'expression (ou il suffit d'ouvrir «de base + comp expression"). Un aperçu de la comp. Vous remarquerez que la place a maintenant une belle, Fluide, Motion qui est aléatoire dans la durée et la direction.
Dans cette expression, "I" est de notre segment counter, Que nous allons également utiliser comme valeur de la semence de ce segment. "Tmin" et "tmax" définir la gamme de temps possible au hasard pour la durée de chaque segment. Dans ce cas, Un segment d'une durée de .5 et 2 secondes. Le "tout en" boucle où l'expression des chiffres segment qui est dans. Elle le fait par incrémentation de semences et d'accumulation des durées aléatoires segment jusqu'à une valeur supérieure à l'heure actuelle est atteint. à ce point, il sait le début, Fin, Et heure de l'actuel débat, il est possible de calculer le pourcentage de ce segment qui est achevé. Il appelle le hasard () fonction de deux fois la cible pour obtenir les coordonnées x et y pour la position de fin de ce segment. La prochaine est un peu délicat. L'expression a encore besoin de connaître la position de départ de ce segment, il est possible de calculer (en fonction du pourcentage achevé) de la situation. Depuis la position de départ est la même que la position de fin du précédent débat, Nous avons juste décrémenter les semences pour revenir à la semence du segment antérieur. L'expression appelle ensuite au hasard () fonction de la fin pour obtenir les coordonnées x et y de l'ancien segment. Vous remarquerez qu'il ya un "jeter" appel au hasard () avant que le précédent valeurs x et y sont déterminés. C'est parce que pour chaque semence, La première aléatoire () d'appel est toujours utilisé pour la fin du temps (dont nous connaissons déjà) - le 2e et le 3e appel sont utilisés pour les coordonnées x et y.
Ouvrir l ' "expression comp". Cette compil est le même que le précédent comp sauf pour l'ajout d'expressions similaires randomizing l'opacité et de la rotation. L'opacité est l'expression:
Seg_start_time = 0; / / les conditions initiales
Seg_Fin_time = 0;
I = 1;
Tmin = .5, / / temps de cycle minimum (ne peut être zéro)
Tmax = 2; / / maximum les temps de cycle
While (heure = seg_Fin_time) (
I = I +1; seed_random (I,True);
Seg_start_time = seg_Fin_time;
Seg_Fin_time = seg_Fin_time + random (Tmin,Tmax);
}
Pour cent = (temps - seg_start_time) / (seg_Fin_time - seg_start_time);
Target_Opacité = random () * 100;
Seed_random (I-1,True);
X = random () / / c'est une valeur à jeter
Old_Opacité = random () * 100;
L'aise (pour cent,Old_Opacité,Target_Opacité);
Expression et de la rotation est:
Seg_start_time = 0; / / les conditions initiales
Seg_Fin_time = 0;
I = 1;
Tmin = .5, / / temps de cycle minimum (ne peut être zéro)
Tmax = 2; / / maximum les temps de cycle
While (heure = seg_Fin_time) (
I = I +1; seed_random (I,True);
Seg_start_time = seg_Fin_time;
Seg_Fin_time = seg_Fin_time + random (Tmin,Tmax);
}
Pour cent = (temps - seg_start_time) / (seg_Fin_time - seg_start_time);
Target_rotation = random () * 360;
Seed_random (I-1,True);
X = random () / / c'est une valeur à jeter
Old_rotation = random () * 360;
L'aise (pour cent,Old_rotation,Target_rotation);
Ces expressions sont quasiment identique à celle de la position, sauf qu'ils ont été modifiés pour produire une série de valeurs appropriées pour l'opacité et de la rotation. Un aperçu de la comp et le préavis qui a désormais la place au hasard et à la décoloration de rotation ainsi que le mouvement.
Voici la partie la plus agréable. Duplicate "solides 1" un tas de fois (ou il suffit d'ouvrir "multi comp") et un aperçu de la comp. Rappelez-vous - vous pouvez le faire très rapidement en utilisant le raccourci Ctrl + d (d + commande sur le MAC ). Aujourd'hui, lorsque vous prévisualisez, il ya une foule d'activités. Les nombres aléatoires pour chaque couche sont différents, même si les expressions sont les mêmes pour chaque.

Maintenant les choses sont de plus en plus intéressant
Ouvert "fun comp" et de le prévisualiser. Pour cette comp, J'ai dupliqué "solides 1" deux fois puis remplacé par des matières solides avec l'un des fichiers de l'illustrateur. Je puis en double de chacune des couches un paquet de fois. Vous pouvez le voir, une fois que vous avez mis en place les expressions, Dupliquer couches ajoute à la complexité de votre comp.

Il est facile de créer un complexe comp rapidement avec ces expressions
Vous pouvez décortiquer les expressions de voir comment ils travaillent, Ou vous pouvez simplement copier et coller dans vos propres compositions. Les trois exemples que j'ai donnés (position, Opacité, Et rotation) devrait vous donner une assez bonne idée de la manière d'adapter l'expression à d'autres propriétés. J'espère que cela inspire à certains d'entre vous de jouer avec ces et de créer quelque chose de vraiment cool!
# # Dan ebberts
N'hésitez pas à discuter de cette technique dans le After Effects forum Ici à CreativeCow.
|