26 lines
1008 B
Plaintext
26 lines
1008 B
Plaintext
shader_type spatial;
|
|
render_mode unshaded;
|
|
|
|
// --- PARAMETRI ---
|
|
uniform float time_scale = 3.0;
|
|
uniform float wave_amplitude = 0.5; // Quanto curva a destra/sinistra
|
|
uniform float wave_frequency = 1.0; // Ogni quanto fa la curva
|
|
|
|
void vertex() {
|
|
// Creiamo un offset unico per ogni particella in modo che non si muovano tutte uguali
|
|
float random_seed_offset = INSTANCE_CUSTOM.x * 100.0;
|
|
float scaled_time = (TIME + random_seed_offset) * time_scale;
|
|
|
|
// Applichiamo SOLO la curva morbida all'asse X (o Z, a seconda di come orienti la scena)
|
|
// Usiamo VERTEX.y per far sì che la curva si propaghi lungo tutta la lunghezza della scia
|
|
VERTEX.x += sin(VERTEX.y * wave_frequency + scaled_time) * wave_amplitude;
|
|
|
|
// Niente più "VERTEX.y += t;", quindi niente più teletrasporti!
|
|
}
|
|
|
|
void fragment() {
|
|
// Il colore e l'alpha (per lo spawn dolce e la morte lenta)
|
|
// vengono comandati dalla Color Ramp del GPUParticles3D!
|
|
ALBEDO = COLOR.rgb;
|
|
ALPHA = COLOR.a;
|
|
} |