Artigo incide: Neste tutorial, Dan ebberts explora a forma como você pode usar expressões em After Effects 5.5 a construir um sofisticado bastante 3d partículas gerador. Nãossa partículas irá responder a velocidade inicial, Gravidade, Vento, Arraste, E muito mais. Utilizando esta partícula gerador, Nós vamos olhar como você pode criar explosões, Fumo, Um alto-fogo, Neve caindo, E até mesmo como um fluxo de líquido. Vamos estudar como fazer com que cada partícula reutilizáveis, O que nos permitirá simular chafariz-like particle córregos. Este é um avançado bastante.
A idéia básica é que vamos importar uma representação gráfica de uma única partícula. Nós vamos arrastá-lo em nossa comp e torná-lo 3d. Vamos aplicar nossa simulação manifestação física de partículas e, em seguida, duplicar a nossa camada que muitas vezes para obter um resultado convincente. Iremos definir a manifestação a fim de que cada partícula (camada) irá comportar diferentemente. Vamos estar aplicando expressões para muitas das propriedades da partícula, Incluindo a posição, Escala, Opacidade, E rotação.
Vamos começar com uma simples explosão e desenvolver mais complexas expressões de lá. Que acabará por envolver alguns bastante cabeludos matemática e alguns Física (desculpe!), Mas a boa notícia é que você não tem necessariamente a entender exatamente como as expressões trabalho - você só precisa saber como fazer para modificá-las para pegá-los a fazer o que quiser. Na primeira parte do tutorial, O que eu vou tentar fazer, Tanto quanto possível, é para cobrir as noções básicas de como trabalhar as expressões e como você poderia modificá-los. Então, Para o final, O intrépido pode seguir-me através da matemática e da física peludo.
A estratégia --- ---
Queremos que cada um dos nossos partículas de ter definido uma vida que vai ser aleatória dentro de um determinado intervalo. Uma vez que vamos estar aplicando múltiplas expressões para as propriedades de partículas, Precisamos de alguma forma de comunicar as informações sobre as partículas da vida de todas as expressões que dele necesSitam. Faremos esta realizando o ciclo de vida cálculos em uma expressão controle (se você quiser saber mais sobre a expressão controlos, Ver o meu tutorial O maior edifício do mundo cameraman). Vamos, então, usar a expressão controle como um read-only Variável global Que pode ser acessado por todas as outras expressões aplicadas aos nossos partícula.
--- vamos começar!---
Vá em frente e abra o arquivo de projeto e, em seguida, abra a "explosão - básica" comp. Você verá um gráfico camada chamada de "estrela flare" e uma camada null, Que ambos têm 3d ligado. Nós vamos estar a utilizar a posição do nulo para definir o centro da explosão. Vamos submeter ao nulo como a partícula "emissor" e, mais tarde iremos mover o nulo para transmitir cerca de "emissor velocidade" para as partículas. Selecione a opção "estrela flare" camada e tipo "u" para exibir todas as propriedades que têm expressões que lhes são aplicáveis. Também tipo Ctrl + Shift + T (pc) ou cmd + shift + t ( MAC ) Para mostrar os efeitos da camada aplicada. Você verá que um "ponto" controle tem sido aplicado e renomeado "vida". Você pode estar se perguntando por que tínhamos utilizar um ponto de controlo, em vez de um controle deslizante para segurar a "vida" valor. A razão é que, mais tarde, (quando chegarmos à reutilizáveis partículas) vamos precisar de passar tanto "vida" e "nascimento" vezes para isso precisamos de um controle que pode passar dois valores. Nós apenas não poderia usar dois controles deslizante? Não, Porque os cálculos de "nascimento" e "vida" tem de ser feito dentro de uma mesma expressão para fazer funcionar. Na linha do tempo, Clique no twirly próximo ao "ponto" para revelar a expressão aplicada à "vida" ponto de controlo:
Lmin = 1.5; / / mínimas partículas vida
Lmáx = 2.5; / / máxima das partículas vida
Verd_random (1,True);
Vida = aleatório (lmin,Lmax);
Nascimento = 0;
[nascimento,Vida]
Esta expressão irá gerar um aleatório "vida" valor para os nossos partícula que está entre 1.5 e 2.5 segundos. Este valor vai ser ligado ao segundo elemento do nosso ponto de controlo variável. O primeiro elemento ( "nascimento") é apenas definido como zero, pois para esta primeira explosão comp todos os nossos partículas vai nascer no tempo zero. O "seed_random" chamada apenas diz After Effects que queremos chegar ao mesmo valor aleatório para "vida" cada vez que executar a expressão (de outro modo, a "vida" valor seria em torno de lúpulo em cada fotograma - o que não Ajudar-nos Aqui). Se você quiser saber mais sobre "seed_random", Ver o meu tutorial Gerador aleatório Motion. Se você quiser mudar a vida das partículas, Você poderia simplesmente mude o "lmin" e "lmax" valores.
Clique no twirly próximo a posição para revelar esta expressão:
VMIN = 500; / / mínima velocidade inicial
Vmax = 700; / / máxima velocidade inicial
Nascimento = efeito ( "vida").Param ( "ponto") [0];
Vida = efeito ( "vida").Param ( "ponto") [1];
Origem = this_comp.Camada ( "null 1").Posição.Value_at_time (nascimento);
Idade = tempo de nascimento;
Verd_random (1,True);
S = aleatório (Vmin,Vmax); / / velocidade inicial
A = degrees_to_radians (aleatório (180)); / / ângulo da vertical
R = degrees_to_radians (aleatório (360)) / / rotação em torno eixo y
X = s * matemática.Sin (a) * matemática.Cos (r);
Y =- s * matemática.Cos (a);
Z = s * matemática.Sin (a) * matemática.Sin (r);
V = [x,y,Z];
Origem + v * tempo
Esta é a posição básica de uma expressão "Zero G" explosão. Nãossa partícula irá lançar em uma direção aleatória em 3d espaço a partir da "origem" (que é apenas a posição da camada nulo) com uma velocidade inicial entre 500 e 700 unidades (o que equivale a cerca de pixels por segundo). A partícula vai continuar nessa velocidade e direção até que ele morra fora. Nós ainda não consignado no vento, Gravidade, E arraste. Tenho certeza que você reparou as três linhas que utilizam o javascript para o cálculo das funções trigonométricas x, y, E z componentes do vetor velocidade da partícula. Este vetor é gerado a partir de valores aleatórios de velocidade ( "s"), ângulo de lançamento vertical ( "a") e de rotação em relação ao eixo comp'sy ( "r"). Não se preocupar muito com todo esse vetor coisas neste ponto - como eu disse antes, Você não tem que entender como funciona para poder usá-la e vamos incluí-lo em mais detalhe mais tarde. A principal coisa que você precisa saber sobre essa versão de expressão é a posição que você deseja editar o "VMIN" e "vmax" valores para alterar a velocidade inicial da partícula. Mais tarde vamos acrescentar um constrangimento para o ângulo da vertical que nos permita gerar uma fonte do tipo spray.
Clique no twirly pouco ao lado de escala para revelar a expressão:
Max_Escala = 50; / / escala máxima
S =.2; / / rampa-escala de tempo
Vida = efeito ( "vida").Param ( "ponto") [1];
Idade = tempo-efeito ( "vida").Param ( "ponto") [0]; / / idade = tempo de nascimento
If (idade s) (
X = (idade / s) * Max_Escala;
[x,x,100]
) else (
[Max_Escala,Max_Escala,100]
}
Toda essa expressão não é a rampa da escala de 0 para o valor especificado no "Max_Escala" (50% neste caso), durante o período definido pelo "s" (.2 segundo no presente caso). Se quiser que o tamanho máximo para chegar a partículas mais rápido ou mais lento, Edite o valor para o "s". Nãote que este valor deve ser inferior a "lmin" da "vida" expressão se você quiser ter certeza de que a partícula atinge o tamanho completo, antes de morrer.
Agora clique no twirly próxima ao z rotação e você verá esta expressão:
Nascimento = efeito ( "vida").Param ( "ponto") [0];
Verd_random (1,True);
R = random (rmin,Rmax);
Vida = efeito ( "vida").Param ( "ponto") [1];
Idade = tempo de nascimento;
If (vida == 0) (
0
) else (
R / * vida idade
}
Esta expressão escolhe um valor aleatório (entre -1080 e 1080 graus graus) de rotação em torno do eixo z ao longo da vida da partícula. Nãotar que esta expressão usa o "nascimento" e "vida" valores a partir do ponto de controlo. Também a utilização do "seed_random" função para se certificar de que a rotação aleatória valor selecionado permanece a mesma cada vez que a expressão é calculada. Se você quiser mudar o quanto as partículas podem rodar, Você poderia editar o "rmax" e "rmin" valores.
Finalmente, Clique no twirly próximo a opacidade para revelar esta expressão:
Decay =.75; / / partícula fade-out time
Max_Opacidade = 100; / / máximos de opacidade
Vida = efeito ( "vida").Param ( "ponto") [1];
Idade = tempo-efeito ( "vida").Param ( "ponto") [0];
If (idade vida) (
0
) else (
If (idade de vida de decaimento) (
((vida-idade) / decaimento) * Max_Opacidade;
) else (
Max_Opacidade
}
}
Esta expressão, que trata da fade-out das partículas no final da sua vida. "Decadência" é o tempo, Em segundos, Que o desbotamento dura. Você poderia editar este valor se você quiser mudar o fade-out time. Este valor deve ser inferior a "lmin" valor da "vida" controlo. "Max_Opacidade" é, Como você poderia esperar, O valor máximo de opacidade que você deseja que a partícula de chegar.
é isso para a manifestação para esta primeira explosão. Selecione a opção "estrela flare" duplicar camada e é um monte de vezes. Eu normalmente apenas pressione Ctrl + d (pc) ou cmd + d ( MAC ) Quatro ou cinco vezes, Selecione o original e todas as duplicatas e, em seguida, pressione Ctrl + D / cmd + da cacho mais vezes para gerar pelo menos 50 partículas. Inspecionar o comp. Naturalmente, Com que muitas camadas, Cada um com cinco expressões aplicadas, Pode demorar um pouco para tornar a visualização. Quando aplicar esta técnica, Você terá de equilibrar render tempo suficiente contra utilizando partículas para criar um efeito convincente. Você deve acabar com uma bela 3d explosão quando as partículas apenas altos em todas as direções, sem forças agindo sobre eles, excepto a sua velocidade inicial.
--Zero-g explosão com 65 partículas
--- vamos físico ---
Agora vamos saltar para o final da profundidade da piscina e adicionar efeitos físicos do vento, Gravidade, Arraste, Emissor velocidade e à nossa posição expressão. Vamos juntar todo o código agora, Mas não terá necessariamente de utilizar todos os novos parâmetros para cada exemplo. Nós vamos passar por lotes de exemplos embora, Até que tudo tenha abrangido. Vá em frente e abrir a "explosão com a física" comp. Selecione a uma das "estrelas flare" camadas e tipo "p" para mostrar a posição propriedade. Clique no twirly próximo a "posição" para revelar a nossa nova expressão que inclui toda a Física. Este é o novo código:
G = 100; / / gravidade
W = 0; / / vento
Wdir = 0; / / direção do vento (0 = a partir da esquerda)
VMIN = 700; / / mínima velocidade inicial
Vmax = 1000; / / máxima velocidade inicial
Amin = 0; / / mínima lançamento de ângulo vertical
Amax = 110; / / máximo ângulo de lançamento vertical
D = 4; / / arraste coeffecient
Nascimento = efeito ( "vida").Param ( "ponto") [0];
Vida = efeito ( "vida").Param ( "ponto") [1];
Origem = this_comp.Camada ( "null 1").Posição.Value_at_time (nascimento);
Idade = tempo de nascimento;
Verd_random (1,True);
S = aleatório (Vmin,Vmax); / / velocidade inicial
V_e = this_comp.Camada ( "null 1").Posição.Velocity_at_time (nascimento); / / emissor velocidade
A = degrees_to_radians (aleatório (Amin,Amax)); / / ângulo da vertical
R = degrees_to_radians (aleatório (360)) / / rotação em torno eixo y
X = s * matemática.Sin (a) * matemática.Cos (r);
Y =- s * matemática.Cos (a);
Z = s * matemática.Sin (a) * matemática.Sin (r);
V = [x,y,Z] + v_e;
New_speed = comprimento (v);
Nãormalizar unit_v = (v);
Como você pode ver, Nós adicionamos código de gravidade, Vento (que não estamos utilizando neste exemplo), Lançamento ângulo, Arraste, Emissor e velocidade. Não se preocupe mais sobre como tudo funciona. Você só precisa saber que você iria alterar os primeiros sete parâmetros para alterar o comportamento das partículas. Todas as outras expressões ainda são as mesmas que estavam na "explosão - básica" comp.
Vá em frente e visualizar o comp. Você perceberá que o nosso partículas agora encontrar a resistência do ar (arrasto) e são afetados pela gravidade. Temos também o lançamento ângulo restrito das partículas para valores entre 0 e 110 graus da vertical.
- explosão com gravidade (65 partículas)
Erros acontecem --- ---
Abrir e visualizar o "bruxuleio explosão" comp. Esta é uma versão anterior da "explosão com a física" comp que havia um erro na mesma. Acontece que eu tinha deixado de fora o apelo à seed_random na expressão para o ponto de controlo. O resultado é um erro quando se liga a opacidade e fora aleatoriamente após a partícula da vida expirou. Uma vez que este efeito é realmente muito legal, Eu decidiu mantê-la em torno de. Assim o "erro" se torne uma "característica". Aqui está o código para o ponto errada controle:
Lmin = 1.5; / / mínimas partículas vida
Lmáx = 2.5; / / máxima das partículas vida
Vida = aleatório (lmin,Lmax);
Nascimento = 0;
[nascimento,Vida]
Onde há fumo .....
Agora vamos tentar a nossa mão de criar alguns fumo para ir com os nossos explosão. Daqui em, As coisas um pouco mais fácil um. Para obter efeitos diferentes partículas, Principalmente agora, só tem de alterar os parâmetros que foram estabelecidos no início das diversas expressões. Vá em frente e abrir o "fumo" comp. Tudo o que fiz para criar este comp era duplicar o "explosão com a física" comp e substituir o "star flare" imIdadem com o "fumo" imIdadem. Então eu fiz essas alterações aos parâmetros na manifestação:
Decay = 1.25; / / partícula fade-out time
Max_Opacidade = 50; / / máximos de opacidade
Eu também mudou o modo de mistura da camada de "normal" para "tela".
O parâmetro alterações reflectem a maneira que o fumo a comporta de maneira diferente, em resposta às diferentes forças físicas. O efeito da gravidade tem sido grandemente reduzido. O efeito do vento tem sido um grande aumento. Z-a rotatividade é muito menos. A opacidade de cada partícula só vai atingir 50%. Você chegar a esses valores, tendo um palpite de que forma as partículas deve reagir, E, em seguida, tweak-los até que ele olha direito. Vá em frente e visualizar o comp. Esperamos que você vai observar como parâmetro as mudanças têm feito uma grande diferença no comportamento das partículas.
- fumo com 40 partículas
Neste ponto você pode estar se perguntando por que razão não basta colocar todos estes parâmetros de controle deslizante. Podíamos fazer isso e que seria certamente mais fácil de fazer os parâmetros tweak. O problema é que, se você fazê-lo, Você assumir uma bela bolada tornar hit. Poderá ser útil que, Mas eu gosto de manter as coisas simples e média, tanto quanto possível,, Mas sinta-se livre para experimentar por si próprio, se desejar.
--- vamos adicionar um pouco de detritos à mistura ---
Abrir e visualizar os "restos" comp. Isto é apenas uma variação da "explosão com a física" comp quando mudei para a partícula "Specs" e mudou a gravidade eo vento de 80 a 80. Max_Escala tem ser definida para 75 e os z-rotação expressão foi modificada para apenas seleccionar uma orientação aleatória entre -180 e 180 graus. A opacidade expressão foi desativada, Deixando a opacidade em 100%.
--- colocar as peças juntas ---
Abrir e visualizar o "combo explosão comp". Comp este contém o "bruxuleio explosão", "Fumo", E "restos" comps juntos para demonstrar como os diferentes tipos de partículas podem trabalhar juntos para criar um complexo efeito. Aviso de que o "colapso transformações" muda ter sido ligado. Isto é assim que as partículas das três comps irá misturar-se corretamente no espaço 3D.
- combinar múltiplos comps a criar complexos efeitos
----nascido novamente partículas ---
Agora vamos olhar para a nossa partículas reutilizáveis. Que é, Depois de uma partícula morre, Queremos que seja renasce com diferentes atributos, Como se se tratasse de uma nova partícula. Isto permitirá gerar um fluxo contínuo de partículas. Para fazer isso precisamos modificar a expressão de nossa "vida" ponto de controlo. Aqui está o novo código:
Lmin = 1.5; / / mínimas partículas vida
Lmáx = 2.5; / / máxima das partículas vida
I = 1;
Verd_random (I,True);
Delay = aleatório (Lmax);
Nascimento = atraso;
Morte = atraso;
If (hora demora) (
[0,0]
) else (
While (hora = morte) (
I + = 1;
Verd_random (I,True);
Nascimento = morte;
Vida = aleatório (lmin,Lmax);
Morte + = vida;
}
[nascimento,Vida]
}
Esta expressão foi modificada para incluir uma variação das expressões desenvolvidas para a minha "geração aleatória Motion "Tutorial. Existe uma inicial, Aleatória imediatamente antes da geração da primeira encarnação da partícula. Este prazo será entre 0 e máxima das partículas da vida. De outra maneira, Toda a "primeira geração" partículas seria gerado ao mesmo tempo (como em uma explosão), Que não é o que queremos para uma fonte do tipo de efeito. Em geral, Esta expressão obras, dividindo o tempo em linha aleatória de tamanho "segmentos" que estão entre "lmin" e "lmax" de duração. Cada segmento representa um novo tempo de vida para as partículas. Para permitir a regeneração partículas de ter características diferentes do que o original, O seed_random () solicita, a posição e z-rotação manifestação foi alterado para esta:
Verd_random (nascimento,True);
Isso faz com que as partículas de nascimento do tempo para ser usada como a semente, O que irá resultar em cada "vida" da partícula a ser diferente, porque o nascimento vezes será sempre diferente. A outra alteração que foi feita para este comp é mudar a "Amax" (máximo de lançamento ângulo vertical) parâmetro de expressão para a posição 30, para que todas as partículas serão lançadas em um sentido ascendente. Vá em frente e abrir a "fonte" comp e visualizá-lo. Você deve ver agora uma contínua spray de partículas. Nãotar que esta contém 100 comp partícula camadas. Se o seu processador engasga, Você pode querer apagar algumas camadas e tentar novamente.
- fonte spray com 100 partículas
--- --- volta para a física
Quando nós adicionamos o código para a posição expressão de incluir efeitos físicos, Acrescentámos um que não temos ainda olhou. Que o efeito é a velocidade, resultante da "emissor" para as partículas. A este ponto nossos emissores (null camadas) foram todas estacionárias. Faz sentido que, se avançarmos emissor através de nosso espaço 3D, As partículas que são emitidos devem ter uma tendência a seguir o emissor até os efeitos de arraste, Gravidade, Vento e enviá-las noutras direcções. Uma vez que temos agora uma fonte partícula spray em nosso arsenal, Este é um bom momento para olhar para o emissor velocidade propriedade. Abrir e visualizar o "movimento emissor 1" comp. Neste comp o emissor tem sido keyframed para se deslocar no espaço 3D e da velocidade do emissor é transmitidos às partículas. I've parented uma nova camada ( "espiga bolha") para o nulo, para que você possa ver onde o emissor é. De contraste, Abrir e visualizar o "movimento emissor 2" comp. Este é exatamente o mesmo comp, Mas o código que acrescenta ao emissor velocidade foi desativada. Você deve notar a diferença.
- avançar com a velocidade emissor transmitidos às partículas
- avançar com a velocidade emissor não comunicadas às partículas
Partículas mais divertido --- ---
Ok agora nós estamos apenas vai ser em torno de goofing. Os últimos quatro comps que vamos olhar para são apenas variações sobre um tema. Eu não estou indo para ir em um monte de detalhes sobre estes, Mas convido-vos a examinar a manifestação de cada comp para ver o modo como os parâmetros (e por vezes o código) foram modificados para alcançar um efeito diferente.
Abrir e visualizar a "neve" comp. Existem várias coisas que a nota sobre este comp. Se olharmos para a posição expressão, Você vai perceber que temos um novo parâmetro para emissor largura. O que fazemos com o presente é essencialmente transformar o nosso ponto emissor em uma "linha" emissor. Neste caso, temos o conjunto emissor largura ( "ew") para 600. Quando uma partícula é nascido, Sua posição inicial, está dentro de mais ou menos metade da largura emissor (na direção x) a partir da posição do nulo. Isso nos permite gerar novas partículas em qualquer lugar ao longo dessa linha. Uma outra coisa que é diferente sobre esta comp é o uso de múltiplas partículas imIdadens. Tenho todas as expressões criadas para uma partícula, Duplicada e substituí-lo três vezes cada uma das duplicatas com uma imIdadem diferente snowflake. Então eu ter escolhido todas as quatro camadas do floco de neve e duplicados lhes um monte de vezes.
- neve com múltiplas imIdadens partícula
Abrir e visualizar o "fogo alto" comp. Neste comp vento, Gravidade, E arraste foram definidos para zero. Todas as partículas são lançadas na direcção z negativos (para o espectador). Esta ainda tem um pouco de trabalho, Mas tem potencial.
- fogo alto
Agora abrir e visualizar o "goop" comp. Esta foi uma tentativa de gerar um fluxo líquido de tipo. Este comp usa a "linha emissor" conceito do "neve" comp eo "matiz" efeito é utilizado para fazer cada partícula uma cor ligeiramente diferente. Este é um também um trabalho em progresso.
- fluxo líquido simulação
Finalmente, Abrir e visualizar o nosso último exemplo, Os "anéis" comp. Comp este é semelhante ao "fogo alto", na medida em que lança todas as suas partículas negativas na direcção z. Comp este também tem uma câmera que está keyframed para se deslocar de um lado um pouco do fim de mais um frente-à vista. Eu incluído este comp só para mostrar que você também pode usar essas expressões como movimento geradores para objetos que você normalmente não poderia pensar em como "partículas".
- anel gerador
--- --- utilizando câmeras
Este é provavelmente um bom lugar para falar um pouco sobre o uso de câmeras com este sistema de partículas. As partículas são geradas em AE 's 3d espaço, Assim o movimento das partículas em torno de uma câmera pode realmente adicionar uma sensação de profundidade para a sua animação. Se você decidir usar uma câmera que se deslocam, Você tem um par de opções úteis. Se você não fizer nada, excepto a câmara gire em torno do emissor, Eventualmente tornar-se-á claro que as partículas são próprios 2d. Este pode ser o efeito que você está depois, Especialmente se você tiver outros elementos dispostos no espaço 3D que são claramente elementos 2d. A outra opção é ter sempre as partículas orientadas para a câmera. Você fazer isso através da camada menu: Camada transformar auto orientar "orientar para câmera". Dependendo das partículas, Esta pode fornecer uma convincente ilusão de que as partículas são próprios 3d. Experimentoo. Divertir-se!
--- uma palavra sobre as partículas ---
A eficácia destas simulações depende, Em grande parte, Sobre a qualidade das partículas de usar. Encorajo-vos a examinar os que tenho utilizado nestes exemplos e tentar sua mão a fazer suas próprias e substituindo-os em um dos comps. Por exemplo, Tente substituir o snowflakes Outono com folhas. Ou simplesmente inventar alguma estranha bolha semi-transparente e ver como está na fonte comp. Experimentoo. Divertir-se! Também brincar com os diferentes modos de mistura. Lembre-se de que você pode selecionar todas as suas partículas e, em seguida, quando você mudar o modo de uma mistura, De todos os outros vão mudar, bem.
--- uma olhadinha final sob a capa ---
Bem, Os mansos, dentre vós são livres de sair agora. Como prometido, Eu estou indo para entrar na física das partículas moção expressão um pouco antes de acabar isto. Vamos dar uma olhada em mais um exemplo típico de posição expressão que temos vindo a utilizar (usaremos o um a partir do "movimento emissor 1" comp):
G = 100; / / gravidade
W = 0; / / vento
Wdir = 0; / / direção do vento (0 = a partir da esquerda)
VMIN = 500; / / mínima velocidade inicial
Vmax = 700; / / máxima velocidade inicial
Amin = 0; / / mínima lançamento de ângulo vertical
Amax = 110; / / máximo ângulo de lançamento vertical
D = 4; / / coeficiente de arraste
Nascimento = efeito ( "vida").Param ( "ponto") [0];
Vida = efeito ( "vida").Param ( "ponto") [1];
Origem = this_comp.Camada ( "null 1").Posição.Value_at_time (nascimento);
Idade = tempo de nascimento;
Verd_random (nascimento,True);
S = aleatório (Vmin,Vmax); / / velocidade inicial
V_e = this_comp.Camada ( "null 1").Posição.Velocity_at_time (nascimento); / / emissor velocidade
A = degrees_to_radians (aleatório (Amin,Amax)); / / ângulo da vertical
R = degrees_to_radians (aleatório (360)) / / rotação em torno eixo y
X = s * matemática.Sin (a) * matemática.Cos (r);
Y =- s * matemática.Cos (a);
Z = s * matemática.Sin (a) * matemática.Sin (r);
Não sou especialista em sistemas de partículas, Mas tenho visto alguns exemplos de código utilizado para gerá-los. Os que eu tenho visto tipicamente incrementais fazer cálculos com base na forma como as coisas mudaram muito desde o último cálculo ciclo. Um lote de informações sobre cada partícula é armazenada e actualizada para cada ciclo de cálculo. Em um exemplo simples, A actual posição, Direção, Velocidade, Cor, Idade, Ea esperança de vida das partículas pode ser guardado. Olha para o cálculo desses valores, Bem como as actuais forças agindo sobre as partículas e calcula que cada um deve estar na próxima vez incremento.
Temos de abordar as coisas de forma um pouco diferente em After Effects. Como você pode saber, (especialmente se você já leu a minha "geração aleatória Motion "Tutorial) não é fácil para passar informações de um ciclo (frame) de um cálculo para o próximo. Variáveis não sobreviver a partir de uma moldura para a próxima. Portanto não temos nenhuma maneira de armazenar todas as informações sobre o estado da partícula, no quadro anterior. Precisamos de um plano diferente. Fazemos, Contudo, Tenho algumas peças de informações úteis à nossa disposição. Do ponto de controlo, Temos a partícula do nascimento e da vida valores. Uma vez que temos acesso para a hora actual, Podemos calcular a idade das partículas. Utilizando a seguinte declaração, Podemos determinar onde em 3d espaço partícula nasceu:
Origem = this_comp.Camada ( "null 1").Posição.Value_at_time (nascimento);
Semelhantemente, A velocidade inicial do emissor pode ser obtida com esta declaração:
Nãotar que "v_e" é um vetor. Que tem uma magnitude e uma direcção que representa a velocidade do emissor.
A velocidade inicial e ângulo de lançamento das partículas são determinadas por estas três chamadas para a função aleatória:
S = aleatório (Vmin,Vmax); / / velocidade inicial
A = degrees_to_radians (aleatório (Amin,Amax)); / / ângulo da vertical
R = degrees_to_radians (aleatório (360)) / / rotação em torno eixo y
Para ter certeza de que estamos sempre obter os mesmos valores aleatórios em toda a vida da partícula, Estas chamadas à função aleatória são precedidos pela seguinte chamada ao "seed_random" função:
Verd_random (nascimento,True);
Usamos "seed_random" para definir a semente do gerador de números aleatórios para a época do nascimento das partículas. Número que permanecerá o mesmo ao longo da vida da partícula, Então nós sempre ser capaz de recriar a velocidade inicial e lançamento ângulo valores.
Armado com esta informação, Um pouco de trigonometria, E um pouco de matemática vetor, Estamos prontos para enfrentar esta coisa. Nãosso plano consiste em calcular as condições atuais com base em condições iniciais e de quanto tempo já decorrido desde a partícula nasceu, Que deverá dar-nos resultados aceitáveis.
Ok nosso primeiro cálculo será o de converter a velocidade eo ângulo de lançamento de uma partícula nosso vetor velocidade. Fazemos isso através do cálculo dos individuais x, y, E z componentes do vetor usando um pouco de trigonometria. Estas são as declarações para calcular x, y, E z:
X = s * matemática.Sin (a) * matemática.Cos (r);
Y =- s * matemática.Cos (a);
Z = s * matemática.Sin (a) * matemática.Sin (r);
Você terá que levar a minha palavra para este. Eu tentei chegar a um nifty diagrama para mostrar como é que esta é derivada, Mas precisa de ser exibido em 3D e espaço a coisa fica realmente confuso em uma pressa. Se souber trig, Você pode muscular através dele e descobrir o que está acontecendo. De qualquer maneira, Agora estamos prontos para combinar o vetor velocidade inicial com o emissor do vetor velocidade inicial de obter um compóSito vetor velocidade. Aqui está o código:
V = [x,y,Z] + v_e;
Ver, Vetor matemática não é muito assustador (especialmente desde que Adobe que mudou com 5.5 a permitir a utilização da matemática regulares operadores, "+" Não presente caso).
Agora vamos converter este novo vetor velocidade para uma magnitude (velocidade) e um valor unitário vetor (uma unidade vetor é apenas um vetor de comprimento 1):
O que vamos fazer a seguir é calcular o impacto que teve sobre a arrastar partículas ao longo da vida da partícula a este ponto. Esta é provavelmente a delicada cálculo de todo o projecto. Acontece que o que temos a fazer é dobrar o efeito de arraste para o cálculo da posição da partícula, no actual quadro. Temos a magnitude e direção das partículas devido à partícula inicial da velocidade e do emissor inicial da velocidade. Sabemos que a resistência do ar irá agir de forma a abrandar a partícula baixo, Independentemente de como a partícula está se movendo. Assim o que temos a fazer é integrar (como no cálculo - Desculpe!) O efeito do arraste vigor ao longo do tempo. Isto resulta na seguinte equação:
O resultado deste cálculo ( "delta_p") é a atual posição da partícula, Tendo em conta apenas a velocidade inicial das partículas, Emissor velocidade, Eo efeito de arraste. Arraste a actos de diminuir a velocidade das partículas em uma taxa exponencial.
Próxima temos de calcular o efeito do vento. Esta uma mais fácil. Da física nos lembrarmos que
Distância = velocidade * tempo
Modo de calcular o quanto o vento tem movido a partícula desde o seu nascimento, Só precisamos de fazer isso:
Delta_w = w * idade;
A fórmula para o efeito da gravidade é um pouco mais complicado, Mas não muito. Voltando a nossa física, Nãos lembrarmos que a nossa distância partícula irá passar, devido ao efeito da gravidade é dada por esta declaração:
Delta_g = g * * idade idade / 2;
Agora tudo o que temos a fazer é combinar estes elementos. Temos todas as magnitudes das distâncias movido pela partícula devido às diferentes forças. Agora só precisamos de convertê-los em vetores na direção adequada e adicioná-los até chegar a posição final vetor. Sabemos que a gravidade atua em uma direção vertical. Vento atua na direção do parâmetro "wdir". O componente devido a velocidade inicial das partículas, Emissor velocidade, E arraste Idade na direção do vetor unitário que calculados anteriormente. Então aqui é o último passo que combina todos os componentes nas direções apropriadas:
Aqui você pode ver que as partículas da partida vetor ( "origem") é combinado com a distância deslocada devido à velocidade inicial / arrastar (na direção do vetor unitário), O efeito do vento sobre o "x" e "z" coordena, Eo efeito da gravidade na "y" direção.
Bem, é isso! Todas estas fórmulas são realmente correto? Não sei. Eles parecem funcionar bem o suficiente para gerar simulações útil. Espero que você goste brincar com eles.
# # 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.