Squashed commit of the following:

commit d8496f4cc7
Author: Matteo Sonaglioni <sonaglioni.matteo7@gmail.com>
Date:   Wed Apr 29 11:01:07 2026 +0200

    tweak enviromentconfig

commit 84538679f3
Author: Matteo Sonaglioni <sonaglioni.matteo7@gmail.com>
Date:   Wed Apr 29 09:29:48 2026 +0200

    museum_map
This commit is contained in:
Matteo Sonaglioni
2026-04-29 11:02:24 +02:00
parent b868584b78
commit ead4e557c4
5 changed files with 497 additions and 33 deletions

View File

@@ -1,31 +1,26 @@
shader_type spatial;
render_mode unshaded;
global uniform float global_wind_speed = 1.0; //0.0 = calm, 1.0 = normal, 2.0+ = strong
global uniform vec2 global_wind_direction = vec2(1.0, 0.0);
uniform float wave_frequency = 1.0;
uniform float base_amplitude = 0.5;
uniform float secondary_ratio = 0.6;
uniform float time_scale_base = 3.0;
// --- 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() {
float random_seed_offset = INSTANCE_CUSTOM.x * 100.0;
float scaled_time = (TIME + random_seed_offset) * (time_scale_base * global_wind_speed);
float amplitude = base_amplitude * global_wind_speed;
vec2 wind_dir = normalize(global_wind_direction);
vec2 wind_perp = vec2(-wind_dir.y, wind_dir.x); //90° perpendicular
float primary_sway = sin(VERTEX.y * wave_frequency + scaled_time) * amplitude;
float secondary_sway = sin(VERTEX.y * wave_frequency * 1.3 + scaled_time * 0.7 + 1.57)
* (amplitude * secondary_ratio);
VERTEX.x += primary_sway * wind_dir.x + secondary_sway * wind_perp.x;
VERTEX.z += primary_sway * wind_dir.y + secondary_sway * wind_perp.y;
// 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;
}