first commit
This commit is contained in:
66
Shaders/Palette_Cel.gdshader
Normal file
66
Shaders/Palette_Cel.gdshader
Normal file
@@ -0,0 +1,66 @@
|
||||
shader_type spatial;
|
||||
render_mode specular_disabled;
|
||||
|
||||
// --- TEXTURE E COLORE BASE ---
|
||||
uniform sampler2D albedo_texture : source_color, filter_nearest_mipmap;
|
||||
uniform vec4 color_tint : source_color = vec4(1.0);
|
||||
|
||||
// --- CORREZIONE IMMAGINE ---
|
||||
uniform float saturation : hint_range(0.0, 2.0) = 1.0;
|
||||
uniform float brightness : hint_range(0.0, 2.0) = 1.0;
|
||||
|
||||
// --- LUCE E OMBRA ---
|
||||
uniform float light_steps = 4.0; // Gradini di luce
|
||||
uniform float shadow_intensity : hint_range(0.0, 1.0) = 0.5; // Quanto è scura l'ombra (0=nera)
|
||||
|
||||
// *** NUOVO PARAMETRO ***
|
||||
// Colore con cui tingere le ombre. Default: Grigio-Bluastro (Cool shadows)
|
||||
uniform vec4 shadow_tint : source_color = vec4(0.6, 0.6, 0.7, 1.0);
|
||||
|
||||
void vertex() {
|
||||
// Vuoto per prop statici
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec4 tex_color = texture(albedo_texture, UV);
|
||||
vec3 base_rgb = tex_color.rgb * color_tint.rgb;
|
||||
|
||||
// --- SATURAZIONE ---
|
||||
float luminance = dot(base_rgb, vec3(0.299, 0.587, 0.114));
|
||||
vec3 saturated_color = mix(vec3(luminance), base_rgb, saturation);
|
||||
|
||||
// --- LUMINOSITA' ---
|
||||
ALBEDO = saturated_color * brightness;
|
||||
|
||||
ROUGHNESS = 1.0;
|
||||
SPECULAR = 0.0;
|
||||
}
|
||||
|
||||
void light() {
|
||||
// --- CEL SHADING ---
|
||||
float NdotL = dot(NORMAL, LIGHT);
|
||||
float light_amount = clamp(NdotL, 0.0, 1.0);
|
||||
|
||||
// Gradini
|
||||
light_amount = ceil(light_amount * light_steps) / light_steps;
|
||||
|
||||
// Ombre proiettate (attenuazione)
|
||||
float shadow = ATTENUATION;
|
||||
shadow = ceil(shadow * light_steps) / light_steps;
|
||||
|
||||
// Calcolo quanta luce totale riceve il pixel (0.0 = ombra totale, 1.0 = luce piena)
|
||||
float final_light_factor = light_amount * shadow;
|
||||
|
||||
// --- IL TRUCCO DEL HUE SHIFT ---
|
||||
// Invece di moltiplicare solo per la luce, facciamo un mix tra:
|
||||
// A) Colore in Ombra (Albedo * Tinta Ombra * Intensità minima)
|
||||
// B) Colore Illuminato (Albedo * Colore Luce)
|
||||
|
||||
vec3 lit_color = ALBEDO * LIGHT_COLOR;
|
||||
vec3 shadowed_color = ALBEDO * shadow_tint.rgb * shadow_intensity; // L'ombra si colora!
|
||||
|
||||
// Mischiamo i due stati in base alla luce ricevuta
|
||||
vec3 final_color = mix(shadowed_color, lit_color, final_light_factor);
|
||||
|
||||
DIFFUSE_LIGHT += final_color / PI;
|
||||
}
|
||||
Reference in New Issue
Block a user