add fake shadow

This commit is contained in:
Matteo Sonaglioni
2026-03-16 00:47:06 +01:00
parent ccdfba2878
commit 461a08aa6d
31 changed files with 725 additions and 94 deletions

View File

@@ -25,9 +25,13 @@ uniform float light_steps : hint_range(1.0, 10.0, 1.0) = 3.0;
uniform float step_softness : hint_range(0.01, 1.0) = 0.1;
uniform vec4 shadow_color : source_color = vec4(0.4, 0.4, 0.6, 1.0);
uniform float shadow_offset : hint_range(-1.0, 1.0) = 0.0;
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
// ---> NUOVI PARAMETRI TOON SPECULAR <---
uniform float specular_size : hint_range(10.0, 200.0) = 60.0; // Più è alto, più il punto luce è piccolo
uniform float specular_softness : hint_range(0.0, 0.1) = 0.01; // Morbidezza del bordo del punto luce
uniform float specular_intensity_multiplier : hint_range(0.0, 2.0) = 0.5; // Forza del riflesso
group_uniforms Emission_Settings;
uniform vec4 emission_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform float emission_energy : hint_range(0.0, 16.0) = 0.0;
@@ -79,4 +83,22 @@ void light() {
float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION);
DIFFUSE_LIGHT += (final_toon_light * LIGHT_COLOR) * cutoff_mask;
// ---> AGGIUNTA TOON SPECULAR (Metodo 1) <---
// Calcoliamo la direzione a metà strada tra la vista e la luce
vec3 half_direction = normalize(VIEW + LIGHT);
float n_dot_h = max(0.0, dot(NORMAL, half_direction));
// Applichiamo la potenza (shininess) per definire la dimensione del punto luce
float spec_power = pow(n_dot_h, specular_size);
// Creiamo un gradino netto (Toon) invece della sfumatura classica PBR
float toon_specular = smoothstep(0.5 - specular_softness, 0.5 + specular_softness, spec_power);
// Moltiplichiamo il riflesso per il colore della luce (Sole o Luna)
vec3 specular_highlight = LIGHT_COLOR * toon_specular * specular_intensity_multiplier;
// Sommiamo il punto luce finale alla diffusione, mascherandolo con "cutoff_mask"
// per evitare che il riflesso brilli anche nelle zone in ombra profonda.
DIFFUSE_LIGHT += (specular_highlight * cutoff_mask);
}