Sistema de partículas
Adicione efeitos de partículas como fogo, chuva, faíscas e auras mágicas à sua scene
Os sistemas de partículas permitem criar efeitos visuais dinâmicos emitindo e animando grandes quantidades de pequenos sprites. Use-os para criar fogo, fumo, chuva, neve, faíscas, auras mágicas, explosões e muitos outros efeitos que seriam impraticáveis de conseguir com meshes estáticos.
Adicionar um sistema de partículas
Para adicionar um sistema de partículas à tua scene, cria uma entity e anexa-lhe o ParticleSystem component.
import { engine, Transform, ParticleSystem } from '@dcl/sdk/ecs'
import { Vector3 } from '@dcl/sdk/math'
const emitter = engine.addEntity()
Transform.create(emitter, {
position: Vector3.create(8, 1, 8),
})
ParticleSystem.create(emitter, {})Sem propriedades definidas, o component usa todos os valores por defeito: um emissor pontual que lança 10 partículas por segundo para cima, com uma vida útil da partícula de 5 segundos.
Formas do emissor
A forma do emissor determina onde as partículas aparecem. Quatro formas estão disponíveis através dos ParticleSystem.Shape helpers.
Point
As partículas aparecem a partir de um único ponto (a posição da entity). Este é o valor por defeito quando nenhuma forma é especificada.
Sphere
As partículas aparecem a partir da superfície ou do interior de uma esfera.
Cone
As partículas aparecem a partir da base de um cone e deslocam-se para fora na direção do cone. angle é o semiângulo em graus; radius é o raio da base em metros. Para orientar a direção do cone, define a rotação do Transform.
Box
As partículas aparecem a partir de qualquer ponto dentro de um volume em caixa.
Propriedades de emissão
Controla quantas partículas são criadas e quanto tempo vivem.
rate
10
Partículas emitidas por segundo (contínuo).
maxParticles
1000
Limite máximo de partículas vivas simultaneamente.
lifetime
5
Tempo de vida de cada partícula em segundos.
active
true
Se o sistema está a emitir ativamente novas partículas.
Movimento
Gravidade
O gravity property é um multiplicador aplicado à gravidade da scene (-9.81 m/s²). Define-o como 0 para fazer as partículas flutuar no lugar, um valor negativo para as empurrar para cima, ou um valor positivo para as acelerar para baixo.
Velocidade inicial
initialVelocitySpeed é um FloatRange que define um mínimo e um máximo para o intervalo de velocidade aleatória com que cada partícula é lançada (em m/s). Ambos os valores têm o valor por defeito de 1.
Força adicional
Uma força constante vetorial aplicada a todas as partículas em cada frame, além da gravidade. Útil para efeitos de vento ou magnéticos.
Limitação de velocidade
Usa limitVelocity para limitar a velocidade máxima das partículas e, opcionalmente, amortecer o excesso de velocidade em cada frame.
Propriedades visuais
Cor
initialColor define a cor da partícula ao nascer; colorOverTime define a cor no final da sua vida útil. Ambos aceitam um ColorRange com um valor from e to — a cor real no nascimento/morte é escolhida aleatoriamente dentro desse intervalo.
Nota que o 4.º valor num Color4 é o alpha. Se definires a cor final para uma com alpha 0, as partículas vão desvanecer gradualmente e tornar-se invisíveis, o que é muitas vezes um bom efeito.
Tamanho
initialSize e sizeOverTime são FloatRange values que controlam a escala da partícula no nascimento e na morte, respetivamente. Um valor de 1 é igual ao tamanho original da textura.
📔 Nota: A scale do Transform da entity não afeta a escala das partículas.
Texture
Por defeito, as partículas são renderizadas como quadrados brancos. Fornece uma texture para usar uma imagem personalizada.
Modo de blending
Controla como a cor da partícula é combinada com a scene atrás dela.
ParticleSystemBlendMode.PSB_ALPHA
Transparência padrão (por defeito).
ParticleSystemBlendMode.PSB_ADD
Blending aditivo — as partículas iluminam a scene. Bom para fogo e brilhos.
ParticleSystemBlendMode.PSB_MULTIPLY
Multiplica a cor da partícula com a scene atrás dela.
Billboard
Quando billboard é true (o valor por defeito), cada partícula enfrenta sempre a camera, independentemente da orientação do emissor. Define-o como false para partículas que devem rodar no espaço 3D.
Rotação
Rotação inicial e rotação ao longo do tempo
initialRotation é a orientação de uma partícula quando aparece. rotationOverTime é uma velocidade angular por eixo aplicada a cada segundo. Ambos aceitam um Quaternion.
📔 Nota: Se billboard for definido como true, então as partículas só vão rodar num eixo, mantendo sempre a orientação voltada para a camera.
Face travel direction
Quando faceTravelDirection é true, cada partícula roda automaticamente para apontar na direção do seu movimento, como um asteroide ou uma folha a cair pelo ar.
📔 Nota: Se faceTravelDirection for true, o valor de billboard é ignorado.
Animação de sprite sheet
Podes animar partículas tratando uma texture como uma grelha de frames de animação. Especifica o número de colunas e linhas na sheet e a velocidade de reprodução.
Controlo de reprodução
O sistema de partículas pode estar num dos três estados controlados por playbackState.
ParticleSystemPlaybackState.PS_PLAYING
A emitir ativamente (por defeito).
ParticleSystemPlaybackState.PS_PAUSED
Congela todas as partículas atuais no lugar e para a emissão.
ParticleSystemPlaybackState.PS_STOPPED
Pára a emissão e remove todas as partículas existentes.
Loop e prewarm
Por defeito, o sistema repete-se indefinidamente. Define loop to false para um efeito único que para automaticamente depois de todas as partículas morrerem.
Define prewarm to true (requer loop: true) para simular o sistema como se estivesse a funcionar desde o início, para que as partículas já preencham a scene quando o player a vê pela primeira vez.
Emissão em burst
Os bursts permitem emitir uma grande quantidade de partículas em momentos específicos em vez de a uma taxa constante. São úteis para explosões, fogo de artifício ou outros eventos únicos.
Um único sistema de partículas pode passar por um ciclo com vários bursts, até com intervalos ou probabilidades variáveis, para parecer mais natural.
Para um efeito de fogo de artifício em loop com bursts desencontrados:
Espaço de simulação
Controla se as partículas se movem em relação ao emissor (PSS_LOCAL, por defeito) ou permanecem fixas em coordenadas do mundo depois de aparecerem (PSS_WORLD).
Usa PSS_WORLD para um emissor em movimento que deve deixar um rasto atrás de si (por exemplo, um asteroide ou um foguete).
Desempenho
O engine impõe um orçamento de partículas por scene e irá reduzir automaticamente as taxas de emissão em todos os sistemas de partículas ativos na scene se a contagem total de partículas exceder o limite. Planeia as tuas scenes em conformidade:
Prefere menos sistemas com impacto visual forte em vez de muitos sistemas com pouco impacto.
Usa
maxParticlespara limitar sistemas individuais.Usa
activeouplaybackStatepara desativar sistemas que estão fora do ecrã ou fora do alcance.Valores
lifetimecurtos mantêm a contagem de partículas vivas inferior ao que uma emissão elevadaratepor si só sugere.
O engine limita o número máximo de partículas renderizadas em qualquer momento a 1000. Se estiveres a emitir mais partículas do que isso, podes não estar a vê-las todas.
Tem também em mente que as partículas só podem ser vistas por um player enquanto este estiver dentro da tua scene. Players que estiverem a olhar para a scene do exterior não verão partículas até entrarem nela.
Particle Lab
Entra no mundo ParticleLab.dcl.eth para experimentar diferentes sistemas de partículas. Quando te aproximares de um sistema de partículas, a UI irá mostrar todos os campos disponíveis; podes ajustá-los em tempo real sem precisares de recarregar a scene. Quando estiveres satisfeito, clica no Copy button para copiar o código desse sistema de partículas para a tua área de transferência.
Atualizado