Fazer logon
Nota: Esta é uma tradução automática, use uma linguagem clara, sem gíria.

Gerador Aleatório Motion Com AE 5.5's Expressões

Dan Ebberts
Tutoriais :
Gerador Aleatório Motion Com AE 5.5's Expressões
Gerador aleatório Motion com AE 5.5's expressões


from CreativeCow.net's ''25 Cool Things about After Effects 5.5'' Series


Generating Random Motion with AE 5.5's Expressions
Dan Ebberts Dan ebberts,
Sacramento, Califórnia, E.U.A.

© 2002 por Dan ebberts e Creativecow.net. Todos os direitos estão reservados.

Artigo incide:
Neste tutorial, Dan ebberts demonstra um método de geração de movimento que é aleatório em tempo e espaço e permite que você rapidamente montar uma composição com um Fluidoo agradavelmente, Caótica circulação.


Download filme Projeto (arquivo inclui ai arquivo) Stuffit Expander para download Windows

O problema:

O conceito por detrás deste tutorial saiu de uma discussão online. Um colega After Effects entusiasta estava tentando chegar a uma expressão para gerar movimento que foi aleatória no tempo e no espaço. Que é, Alvo posições seriam aleatórios como seria o tempo que demora a chegar. O problema que você encontrar ao tentar desenvolver essa expressão é que existe apenas não parecem ser uma boa maneira de levar o valor de variáveis em frente em vez de uma moldura para a próxima. Quaisquer variáveis que definem será deslocado no próximo quadro. Considere o exemplo seguinte expressão para opacidade:

If (tempo = 0) (
X = 10
}
Else (
X = x + 1
}

Este funciona bem no primeiro frame. No segundo quadro você receber um erro, porque x é indefinido. A expressão não se lembra que foi x 10 sobre o quadro anterior. Isto se torna uma séria limitação quando você está tentando fazer uma coisa mais de um valor aleatório de tempo, pois uma vez que você decida quanto tempo ele deve ter, é preciso verificar em cada frame, para ver se você é feito ainda. Difícil de fazer se você não pode passar desse valor a partir de uma moldura para a próxima.


Seed_random ao salvamento:

Acontece que você pode começar em torno deste problema com o reforço (por AE 5.5) seed_random função. Esta função permite-lhe estabelecer uma seqüência de números aleatórios repetitivo e regenerar-los à vontade, Apenas por restaurar as sementes para um valor anterior e, em seguida, chamar a aleatória () function. Isto dá-nos uma solução para o problema, porque embora não possamos passar nossos valores aleatórios a partir de uma moldura para a próxima, Podemos obtê-las utilizando seed_random. Vejamos como funciona seed_random.

Abra o arquivo de projeto e em seguida, abra o "básico comp". Isto é apenas um 640x480 comp 50x50 com uma sólida camada acrescentado. Selecione "sólido 1" e revela a posição propriedade. Alt-clique (opção-clique) sobre o cronómetro para activar a expressão para esta propriedade. Digite a seguinte expressão:

[random (0,This_comp.Largura),Aleatório (0,This_comp.Altura)];

Isto fará com que o quadrado para pular para uma posição aleatória na comp. Inspecionar o comp. Você perceberá que o quadrado saltou para uma nova posição sobre cada frame. Não muito útil. Adicionar uma nova linha para a expressão de modo que lê-lo agora:

Seed_random (1,True);
[random (0,This_comp.Largura),Aleatório (0,This_comp.Altura)];


Perceber que novamente a praça pula para uma posição aleatória, mas quando você visualizá-lo permanece lá. Esse novo comportamento é devido a uma mudança que Adobe feitas para o seed_random função para AE 5.5. Se tiver adicionado um segundo parâmetro, Que, quando configurado para "true" define a função aleatória números aleatórios gerados para que não depFimem de tempo. Os números aleatórios depFimem da camada número, Número do imóvel, O valor do primeiro parâmetro na chamada seed_random (a "semente"), Eo número de vezes que a função aleatória tem sido chamado. Isso significa que a mesma expressão irá gerar números aleatórios diferentes em uma camada diferente ou propriedade (mais tarde iremos aproveitar essa complexidade para adicionar rapidamente para o nosso comp). Tente mudar a "semente" parâmetro para outro número. Você perceberá que o quadrado move-se para uma localização diferente e permanece lá. Alterar o segundo parâmetro para "false" e perceba que quando você visualiza, A praça todos os saltos sobre o local novamente.

Adicione um pouco mais de código para o seu termo, para que ele se parece com esta:

If (tempo 1) (
Seed_random (1,True)
}
Else (
Seed_random (2,True)
}
[random (0,This_comp.Largura),Aleatório (0,This_comp.Altura)];


Agora você vai observar que quando você visualiza, A praça fica em um local para o primeiro segundo e, em seguida, salta para outro local para o resto do comp.

Assim como vamos utilizar este novo, Mais poderoso seed_random função? Aqui é o conceito-chave: Com o segundo parâmetro definido para "true", Para uma determinada camada, Propriedade, Sementes e valor, O número aleatório quando você começa a chamar a aleatória () função só depFime de quantas vezes você tem chamado a função desde a fixação das sementes. Que é, A primeira vez que você chamar aleatória () depois de configurar a semente que você vai obter um número aleatório particlar (vamos chamá-lo x). A segunda chamada vai gerar um número aleatório segundo (vamos chamar este um y) e assim por diante. Mas se você seed_random chamada novamente com o original sementes, A seqüência vai começar de novo. Que é, A próxima aleatória () chamada vai gerar o original número aleatório (x, neste caso). Utilizando um valor diferente sementes irá causar uma seqüência completamente diferente a ser gerado. Considere o seguinte exemplo:

Seed_random (1,True); / / definir o valor das sementes
A = random ();
B = random ();
C = random ();

Seed_random (1,True); / / repor as sementes para o mesmo valor
I = random ();
J = random ();
K = random ();

Seed_random (2,True) / / novas sementes
Q = random ();
R = random ();
S = random ();

Seed_random (1,True); / / restabelecer original sementes
X = random ();
Y = random ();
Z = random ();

Neste caso, A,B, E c serão todos diferentes números aleatórios. Contudo, Uma e eu vou ser o mesmo, B e j será o mesmo, E c e k será a mesma, porque a semente foi redefinida (a 1, neste caso), e começa a seqüência aleatória durante. Q,R e s será uma nova sequência de números aleatórios, porque a semente foi alterado para 2. A seqüência x,Y,Z vai ser o mesmo que um,B,C e eu,J,K porque a semente tenha sido definido para 1 novamente. Para que possamos voltar a uma seqüência de números aleatórios por restabelecer o valor das sementes que geraram esses números.

Como é que isto nos ajude a? Para gerar o nosso movimento aleatório, Em qualquer quadro, precisamos de saber várias coisas sobre o actual segmento de movimento: Start time, Posição inicial, Hora final, E posição final. Serão todos estes números aleatórios que iremos gerar sementes utilizando um valor diferente para cada segmento do movimento. E que irá basear a semente valor segmento em que estamos atualmente em. Portanto tudo o que temos a fazer é ter a expressão ser capaz de descobrir o que está no segmento (a partir da qual será capaz de descobrir o valor das sementes), Definir as sementes, E regenerar a seqüência de números aleatórios que nos dão a hora de início, Posição inicial, Hora final, E valores para a posição final do actual segmento.

OK - vamos rever o que o nosso objectivo será para esta expressão. Queremos que a praça para se deslocar sem problemas a partir de uma posição aleatória na tela para outra. Queremos também que o tempo que demora a fazer isso para ser aleatória (digamos que entre .5 e 2 segundos). Esta expressão vai fazer isso:

Seg_start_time = 0; / / condições iniciais
Seg_Fim_time = 0;
I = 1;
Tmin = .5; / / tempo de ciclo mínimo (não pode ser zero)
Tmax = 2; / / tempo de ciclo máximo
While (hora = seg_Fim_time) (
I = 1; seed_random (I,True);
Seg_start_time = seg_Fim_time;
Seg_Fim_time = + seg_Fim_time aleatória (tmin,Tmax);
}
Porcento = (hora - seg_start_time) / (seg_Fim_time - seg_start_time);
Target_x = random () * This_comp.Largura;
Target_y = random () * This_comp.Altura;
Seed_random (I-1,True);
X = random (); / / esse é um throw-away valor
Old_x = random () * This_comp.Largura;
Old_y = random () * This_comp.Altura;
Facilidade (cento,[old_x,Old_y],[target_x,Target_y]);

Cópia desta expressão e cole-o na posição expressão (ou apenas aberto "básica comp + expressão"). Inspecionar o comp. Você perceberá que o quadrado tem agora um bom, Fluido, Movimento que é aleatório em termos de duração e direção.

Nesta expressão, "I" é o nosso segmento counter, Que nós também usar como o valor das sementes para esse segmento. "tmin" e "tmax" definir o intervalo de tempo possível aleatórios para a duração de cada segmento. Neste caso, Um segmento irá durar entre .5, e 2 segundos. O loop "while" é que a expressão das figuras que está no segmento. Ele faz isso por incrementar a semente e acumulação aleatória segmento durações até um valor maior do que o tempo atual é atingido. Neste ponto ele sabe o início, Fim, Ea hora actual do actual segmento para que ele possa calcular a percentagem deste segmento que já foi concluída. Convida a aleatória () funcionar mais duas vezes para obter o alvo x, y coordenadas para a posição final deste segmento. A próxima parte é um pouco complicado. A expressão ainda precisa saber a posição inicial de modo a que este segmento pode calcular (com base na percentagem concluída), a actual posição. Desde a posição inicial é a mesma que a posição final do segmento anterior, Acabamos de decremento da semente para o regresso à semente do segmento anterior. A expressão, em seguida, chama a aleatória () função para obter coordenadas x e y final do segmento anterior. Você perceberá que existe uma "atirar-away" chamada de aleatória () antes do anterior x e y valores são determinados. Isto acontece porque, para cada semente, O primeiro aleatória () chamada é sempre utilizada para o fim do tempo (o que já sabemos) - a 2 ª e 3 ª chamadas são utilizadas para x, y coordenadas.

Abrir a "expressão comp". Comp este é o mesmo que o anterior comp excepto para a adição de expressões semelhantes randomização de opacidade e de rotação. Expressão é a opacidade:

Seg_start_time = 0; / / condições iniciais
Seg_Fim_time = 0;
I = 1;
Tmin = .5; / / tempo de ciclo mínimo (não pode ser zero)
Tmax = 2; / / tempo de ciclo máximo
While (hora = seg_Fim_time) (
I = 1; seed_random (I,True);
Seg_start_time = seg_Fim_time;
Seg_Fim_time = + seg_Fim_time aleatória (tmin,Tmax);
}
Porcento = (hora - seg_start_time) / (seg_Fim_time - seg_start_time);
Target_Opacidade = random () * 100;
Seed_random (I-1,True);
X = random (); / / esse é um throw-away valor
Old_Opacidade = random () * 100;
Facilidade (cento,Old_Opacidade,Target_Opacidade);

E expressão é a rotação:

Seg_start_time = 0; / / condições iniciais
Seg_Fim_time = 0;
I = 1;
Tmin = .5; / / tempo de ciclo mínimo (não pode ser zero)
Tmax = 2; / / tempo de ciclo máximo
While (hora = seg_Fim_time) (
I = 1; seed_random (I,True);
Seg_start_time = seg_Fim_time;
Seg_Fim_time = + seg_Fim_time aleatória (tmin,Tmax);
}
Porcento = (hora - seg_start_time) / (seg_Fim_time - seg_start_time);
Target_rotation = random () * 360;
Seed_random (I-1,True);
X = random (); / / esse é um throw-away valor
Old_rotation = random () * 360;
Facilidade (cento,Old_rotation,Target_rotation);

Essas expressões são praticamente idênticas às de uma posição, excepto que foram modificados para produzir uma gama de valores adequados para a opacidade e rotação. Inspecionar o comp e perceba que agora tem a praça rotação aleatória e fade bem como movimento.

Aqui vem a parte divertida. Duplicado "sólido 1" um monte de vezes (ou apenas aberto "multi comp") e visualizar o comp. Lembre-se - você pode fazer isso muito rapidamente usando o atalho Ctrl + D (Command + D sobre o MAC ). Agora, quando você visualiza há uma agitação da atividade. Os números aleatórios para cada camada são diferentes, embora as expressões são exatamente as mesmas para todos.


Agora as coisas estão ficando mais interessantes


Aberta "divertido comp" e visualizá-lo. Para este comp, Eu duplicada "sólido 1" duas vezes e então substituído cada um dos sólidos com um dos arquivos ilustrador. Então cada uma das camadas duplicada um monte de vezes. Você pode ver que depois de ter criado as expressões, Duplicando camadas rapidamente acrescenta complexidade ao seu comp.


É fácil criar um complexo comp rapidamente com estas expressões


Você pode dissecar as expressões para ver como elas funcionam, Ou você pode simplesmente copiar e colá-los no seu próprio comps. Eu tenho os três exemplos apresentados (posição, Opacidade, E de rotação), deverá dar-lhe uma boa idéia de como adaptar a expressão para outras propriedades. Espero que isto inspira alguns de vós para brincar com elas e criar algo realmente cool!

# # Dan ebberts

Sinta-se livre para discutir esta técnica no After Effects fórum Aqui no Creativecow.




Visite nosso Fórum e ver outros artigos em Creativecow.net Se você encontrou esta página a partir de uma ligação directa.


FóRUNSTUTORIAISMAGAZINESERVIçOSVIDEOSNOTíCIASBLOGS


© CreativeCOW.net Todos os direitos reservados.

Creative Comunidades do Mundo

[Topo]

Englishالعربية中文FrançaisDeutschעבריתहिन्दीItaliano日本語PortuguêsРусскийEspañol