Como Fazer um Sistema de Partículas?
************************************ Tutorial Básico ****************************************

O que são Sistemas de Partículas?
Sistemas de partículas são como luzinhas, que podem ser programadas para comportarem-se de uma infinidade de maneiras. Pode-se criar com sistemas de partículas: chuva, fogo, água de uma fonte, sabres de luz, raios de luz, fogos de artifício e muito mais. Um bom lugar para visitar e ver muitos bons exemplos de Sistemas de Partículas é o Particle Labs. O lugar todo é um laboratório de partículas mesmo, aonde você pode ir clicando e mudando configurações em sistemas de particulas e observas o que aocntece de diferente. Para quem fala inglês, é um tutorial passo a passo, desde o Báscio até o Avançado.
Com um único comando de LSL, você pode fazer tudo isso! É sobre esse comando que vamos aprender no tutorial de hoje!
Como fazer um Sistema de Partículas?
O comando em si é bem simples:
llParticleSystem(list params);
O problema está em oque exatamente por nos params! hehe… Então vou tentar explicar parte por parte…
Parâmetros em Pares: use estes declarando o parâmetro e em seguida o seu valor:
PSYS_PART_START_ALPHA --> (float) transparência inicial da partícula
PSYS_PART_END_ALPHA --> (float) transparência final da partícula
(variam de 0.0 a 1.0: 0.0 é totalmente transparente, enquanto que 1.0 é totalmente opaco)
PSYS_PART_START_COLOR --> (vector) cor inicial da partícula em RGB
PSYS_PART_END_COLOR --> (vector) cor final da partícula em RGB
PSYS_PART_START_SCALE --> (vector) tamanho inicial da partícula nas 3 coordenadas
PSYS_PART_END_SCALE --> (vector) tamanho final da partícula nas 3 coordenadas
PSYS_PART_MAX_AGE --> (float) tempo máximo de duração da partícula em segundos, até 30 segundos
PSYS_SRC_MAX_AGE --> (float) tempo máximo de duração do sistema em segundos, 0 é infinito
PSYS_SRC_ACCEL --> (vector) aceleração da partícula
PSYS_SRC_ANGLE_BEGIN --> (float) ângulo inicial em radianos onde não haverá partículas
PSYS_SRC_ANGLE_END --> (float) ângulo final em radianos onde não haverá partículas
(estes dois acima são para uso em sistemas angulares (PATTERN_ANGLE) )
PSYS_SRC_BURST_PART_COUNT --> (integer) número de partículas por emissão
PSYS_SRC_BURST_RADIUS --> (float) distância do centro do emissor onde as partículas são criadas em metros
PSYS_SRC_BURST_RATE --> (float) intervalo entre cada emissão em segundos
PSYS_SRC_BURST_SPEED_MIN --> (float) velocidade mínima de cada partícula
PSYS_SRC_BURST_SPEED_MAX --> (float) velocidade máxima de cada partícula
PSYS_SRC_OMEGA --> (float) velocidade angular de cada partícula
PSYS_SRC_TARGET_KEY --> (key) objeto ou avatar que será atingido pelas partículas
PSYS_SRC_TEXTURE --> (string) textura aplicada a todas as partículas. aparece como objeto 2D
PSYS_SRC_PATTERN --> (integer) tipo de comportamento das partículas
PSYS_PART_FLAGS --> é aqui que agente liga ou desliga tudo o que quiser... o valor desse campo pode ser combinado com operadores OR (|).
Flags:
PSYS_PART_BOUNCE_MASK --> as partículas "quicam" no z=0 do emissor
PSYS_PART_EMISSIVE_MASK --> as partículas ficam iluminadas
PSYS_PART_FOLLOW_SRC_MASK --> as partículas permanecem junto ao emissor
PSYS_PART_FOLLOW_VELOCITY_MASK --> gira as partículas acompanhando a direção da velocidade
PSYS_PART_INTERP_COLOR_MASK --> habilita a variação de cores
PSYS_PART_INTERP_SCALE_MASK --> habilita a variação de tamanho
PSYS_PART_TARGET_POS_MASK --> faz as partículas seguirem o alvo
PSYS_PART_WIND_MASK --> as partículas serão afetadas pelo vento
Patterns possíveis:
PSYS_SRC_PATTERN_ANGLE --> atira as partículas na área definida por PSYS_SRC_ANGLE_END. uma área sem partículas é definida por PSYS_SRC_ANGLE_BEGIN (2D)
PSYS_SRC_PATTERN_ANGLE_CONE --> o mesmo que acima, mas com efeito (3D)
PSYS_SRC_PATTERN_DROP --> as partículas "caem"
PSYS_SRC_PATTERN_EXPLODE --> as partículas "explodem"
Assim fica meio jogado… o melhor mesmo é ver exemplos… Tente colocar o script abaixo em algum objecto in-world. Tem dois “presets” já definidos, o Sparkly() e o Snowy(). Basta alternar entre eles e verificar como se comportam. Para ligar/desligar as partículas, use Touch.
//teste de partículas by Naryu Yue
//selecione dentre dois tipos pre-definidos
Sparkly()
{
llParticleSystem([
PSYS_PART_FLAGS, 0 | PSYS_PART_EMISSIVE_MASK |
PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK |
PSYS_PART_FOLLOW_SRC_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK,
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_PART_MAX_AGE,2.000000,
PSYS_PART_START_COLOR,<1, 1, 1>,
PSYS_PART_END_COLOR,<0.6, 0.6, 0.6>,
PSYS_PART_START_SCALE,<0.10000, 0.90000, 0.10000>,
PSYS_PART_END_SCALE,<0.10000, 0.10000, 0.10000>,
PSYS_SRC_BURST_RATE,0.10000,
PSYS_SRC_ACCEL,<0.00000, 0.00000, 0.00000>,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_BURST_RADIUS,0.100000,
PSYS_SRC_BURST_SPEED_MIN,0.100000,
PSYS_SRC_BURST_SPEED_MAX,0.500000,
PSYS_SRC_TARGET_KEY,(key)"",
PSYS_SRC_ANGLE_BEGIN,1.550000,
PSYS_SRC_ANGLE_END,1.540000,
PSYS_SRC_OMEGA,<0.00000, 0.00000, 5.00000>,
PSYS_SRC_MAX_AGE,0.000000,
PSYS_PART_START_ALPHA,2.000000,
PSYS_PART_END_ALPHA,0.00000
]);
}
Snowy()
{
llParticleSystem([
PSYS_PART_FLAGS, 0 | PSYS_PART_EMISSIVE_MASK |
PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK |
PSYS_PART_FOLLOW_SRC_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK,
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_PART_MAX_AGE,12.0,
PSYS_PART_START_COLOR,<1, 0, 0>,
PSYS_PART_END_COLOR,<0.6, 0.6, 0.6>,
PSYS_PART_START_SCALE,<0.50000, 0.50000, 0.50000>,
PSYS_PART_END_SCALE,<0.01000, 0.01000, 0.01000>,
PSYS_SRC_BURST_RATE,3.0,
PSYS_SRC_ACCEL,<0.00000, 0.00000, -0.1>,
PSYS_SRC_BURST_PART_COUNT,3,
PSYS_SRC_BURST_RADIUS,0.100000,
PSYS_SRC_BURST_SPEED_MIN,0.1,
PSYS_SRC_BURST_SPEED_MAX,0.5,
PSYS_SRC_TARGET_KEY,(key)"",
PSYS_SRC_OMEGA,<0.00000, 0.00000, 0.3>,
PSYS_SRC_MAX_AGE,0.000000,
PSYS_PART_START_ALPHA,2.000000,
PSYS_PART_END_ALPHA,0.00000
]);
}
default
{
state_entry()
{
Snowy(); //Mude aqui para Sparkly e veja a diferença!
}
touch_start(integer total_number)
{
state ParticlesOn;
}
}
state ParticlesOn
{
state_entry()
{
llParticleSystem([ ]); //Isso deliga a emissão
}
touch_start(integer total_number)
{
state default;
}
}
muito bom mesmo !
Sou iniciante em lsl … e tudo funcionou direitinho !
tank’s
Marcelo.
Mestrando de Programacao Matematica – PPGMNE
achei o maximo tbm!!
mas tenho uma sugestão
por que você não continua falando sobre particle system
dando esplicações,
exemplos,
por que todos os sites q ensinam
são em ingles
é por isso q quando eu kero alguma coisa
venho logo nesse site
continue publicando
abraço irmão
…
aiaiai …
to esperando novas postagens sobre particulas no blOOOGG
;D
pUXa c sb q eu adoro scripts
faz uma aeee vaiiiH
PLzzZZZ
;D
BjonN Vuh
to adorano o BLOG
Tchau
muitu bom esse tópico
só eséro um outro tópico esplicando passo a passo sobre script
Opa.. rpz.. eu estudo ciencias da computação e sou novo no SL.. será que vc poderia me indicar algum tutorial passo a passo p aprender LSL?? eu já andei pesquisando mas nao encontrei nada “agradável”.
Curti mto teu tutorial d como fazer uma camisa. Vou testar em breve! =)
abraços e parabens pelo Blog!