shader_type spatial;
render_mode blend_mix, depth_draw_always, diffuse_burley, specular_schlick_ggx;

uniform vec3 colore_sabbia : source_color = vec3(0.9, 0.85, 0.7);
uniform vec3 colore_solco : source_color = vec3(0.75, 0.7, 0.55);
uniform float frequenza = 10.0;
uniform float inclinazione_normale : hint_range(0.0, 2.0) = 1.0;
uniform float ampiezza_ombra : hint_range(0.0, 1.0) = 0.4;

varying vec3 local_pos;

void vertex() {
    local_pos = VERTEX;
}

void fragment() {
    float d = distance(local_pos.xz, vec2(0.0));
    
    // Taglio netto della decal (Alpha Scissor)
    if (d > 0.5) {
        discard;
    }
    
    float cerchio = fract(d * frequenza);
    
    // --- LOGICA COLORE ---
    // Crea un anello scuro in corrispondenza del cambio di pendenza
    float maschera_colore = smoothstep(0.5 - ampiezza_ombra, 0.5, cerchio) - smoothstep(0.5, 0.5 + ampiezza_ombra, cerchio);
    vec3 colore_finale = mix(colore_sabbia, colore_solco, maschera_colore);
    
    // --- LOGICA NORMALE ---
    vec2 dir_radiale = normalize(local_pos.xz);
    float lato = sign(cerchio - 0.5);
    vec3 n = NORMAL;
    n.xz += dir_radiale * lato * inclinazione_normale;
    
    ALBEDO = colore_finale;
    NORMAL = normalize(n);
    ROUGHNESS = 0.8;
    SPECULAR = 0.0;
}