Add Global Gradient on shader - Revamp lighting
This commit is contained in:
@@ -9,40 +9,56 @@ uniform vec4 albedo_color : source_color = vec4(1.0);
|
||||
uniform sampler2D albedo_texture : source_color, filter_nearest;
|
||||
uniform bool use_texture = true;
|
||||
uniform vec2 uv_scale = vec2(1.0, 1.0);
|
||||
// NUOVO PARAMETRO: Slider per scorrere la palette in verticale
|
||||
uniform float palette_shift_y : hint_range(0.0, 1.0) = 0.0;
|
||||
|
||||
// --- PARAMETRI GRADIENTE GLOBALE ---
|
||||
group_uniforms Height_Gradient;
|
||||
global uniform vec4 global_gradient_color_top;
|
||||
global uniform vec4 global_gradient_color_bot;
|
||||
global uniform float global_gradient_intensity;
|
||||
|
||||
uniform float gradient_start_y = 0.0; // Altezza MONDO dove il gradiente è 100% Bottom
|
||||
uniform float gradient_end_y = 10.0; // Altezza MONDO dove il gradiente è 100% Top
|
||||
|
||||
group_uniforms Toon_Lighting;
|
||||
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;
|
||||
|
||||
// NUOVO PARAMETRO IMPORTATO: Intensità delle ombre proiettate su questo materiale
|
||||
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
|
||||
|
||||
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;
|
||||
|
||||
varying float world_y;
|
||||
|
||||
void vertex() {
|
||||
world_y = (MODEL_MATRIX * vec4(VERTEX, 1.0)).y;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// 1. Albedo (Colore base dell'oggetto)
|
||||
// APPLICATO LO SHIFT SULL'ASSE Y SULLE UV
|
||||
vec2 final_uv = (UV * uv_scale) + vec2(0.0, palette_shift_y);
|
||||
vec4 tex = texture(albedo_texture, final_uv);
|
||||
|
||||
vec3 base_color = albedo_color.rgb;
|
||||
if (use_texture) base_color *= tex.rgb;
|
||||
|
||||
// Passiamo il colore crudo a Godot.
|
||||
// Godot si occuperà di moltiplicarlo per la luce alla fine.
|
||||
ALBEDO = base_color;
|
||||
// --- APPLICAZIONE GRADIENTE B我們 ---
|
||||
// Calcoliamo il mix tra l'altezza minima e massima (0.0 = Bottom, 1.0 = Top)
|
||||
float grad_factor = smoothstep(gradient_start_y, gradient_end_y, world_y);
|
||||
|
||||
// 2. Emission
|
||||
// Ricaviamo il colore attuale del gradiente per questa specifica altezza
|
||||
vec3 current_gradient_color = mix(global_gradient_color_bot.rgb, global_gradient_color_top.rgb, grad_factor);
|
||||
|
||||
// Miscela il colore base con il gradiente ottenuto, usando l'intensità globale
|
||||
base_color = mix(base_color, current_gradient_color, global_gradient_intensity);
|
||||
|
||||
ALBEDO = base_color;
|
||||
EMISSION = emission_color.rgb * emission_energy;
|
||||
}
|
||||
|
||||
// --- NUOVA LOGICA LUCE INTEGRATA ---
|
||||
void light() {
|
||||
float shadow_factor = mix(1.0 - cast_shadow_strength, 1.0, ATTENUATION);
|
||||
float n_dot_l = dot(NORMAL, LIGHT);
|
||||
@@ -60,7 +76,6 @@ void light() {
|
||||
|
||||
vec3 final_toon_light = mix(shaded_part, light_part, clamp(stepped_intensity, 0.0, 1.0));
|
||||
|
||||
// Porchiddio Michele
|
||||
float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION);
|
||||
|
||||
DIFFUSE_LIGHT += (final_toon_light * LIGHT_COLOR) * cutoff_mask;
|
||||
|
||||
Reference in New Issue
Block a user