shader_type spatial;

uniform vec3 colore_base : source_color = vec3(0.2, 0.2, 0.2);
uniform vec3 colore_variazione : source_color = vec3(0.3, 0.3, 0.3);
uniform sampler2D noise_tex;
uniform float scala_noise = 0.1; // Più è basso, più la variazione è ampia e morbida

varying vec3 world_pos;

void vertex() {
	// Calcoliamo la posizione del vertice nello spazio del mondo
	world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
}

void fragment() {
	// Usiamo le coordinate X e Z del mondo come UV per il noise
	// Questo rende il noise "immobile" rispetto al mondo, perfetto per i chunk
	vec2 uv_mondo = world_pos.xz * scala_noise;
	
	// Campioniamo il noise
	float n = texture(noise_tex, uv_mondo).r;
	
	// Mescoliamo i colori in base al valore del noise
	vec3 colore_finale = mix(colore_base, colore_variazione, n);
	
	ALBEDO = colore_finale;
	METALLIC = 0.0;
	ROUGHNESS = 0.8;
}