add snow
This commit is contained in:
32
Shaders/snow.gdshader
Normal file
32
Shaders/snow.gdshader
Normal file
@@ -0,0 +1,32 @@
|
||||
shader_type spatial;
|
||||
// Blend mix ci permette di sovrapporre la neve senza nascondere l'oggetto sotto
|
||||
render_mode blend_mix, depth_draw_opaque;
|
||||
|
||||
// Legge la variabile globale che abbiamo creato nelle impostazioni!
|
||||
global uniform float global_snow_amount;
|
||||
|
||||
uniform vec4 snow_color : source_color = vec4(0.95, 0.98, 1.0, 1.0); // Bianco leggermente azzurrino
|
||||
|
||||
void fragment() {
|
||||
// 1. Calcoliamo la normale (la direzione) della faccia nello spazio del mondo
|
||||
vec3 world_normal = (INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz;
|
||||
|
||||
// 2. Il dot product ci dice quanto la faccia punta verso l'alto (Y = 1.0)
|
||||
// Se punta esattamente in alto restituisce 1.0, se punta di lato 0.0, in basso -1.0
|
||||
float up_dot = dot(world_normal, vec3(0.0, 1.0, 0.0));
|
||||
|
||||
// 3. Creiamo la "maschera" della neve basata sul parametro globale
|
||||
// Usiamo smoothstep per avere un bordo un po' sfumato e non seghettato
|
||||
float snow_mask = smoothstep(1.0 - global_snow_amount, 1.1 - global_snow_amount, up_dot);
|
||||
|
||||
// Assicuriamoci che se il global_snow_amount è 0, la maschera sia 0
|
||||
snow_mask *= step(0.01, global_snow_amount);
|
||||
|
||||
// 4. Applichiamo il colore e la trasparenza
|
||||
ALBEDO = snow_color.rgb;
|
||||
ALPHA = snow_mask; // Se la maschera è 1 (guarda in alto), è opaco. Altrimenti è invisibile.
|
||||
|
||||
// Rendiamo la neve leggermente riflettente/ghiacciata
|
||||
ROUGHNESS = 0.3;
|
||||
SPECULAR = 0.5;
|
||||
}
|
||||
Reference in New Issue
Block a user