104 lines
3.7 KiB
Plaintext
104 lines
3.7 KiB
Plaintext
shader_type canvas_item;
|
|
// Shader per i menu di secondo livello P2A e P3A.
|
|
// Coordinate UV relative al TextureRect del mockup (2796x1290).
|
|
// Tracciate e verificate ad alto contrasto con fondo nero:
|
|
// 1. Stella centrata sul numero 1
|
|
// 2. 20 lucine lungo le due falde del tetto a cono
|
|
// 3. 4 grandi punti di ancoraggio sulla balza ondulata
|
|
|
|
uniform float lights_strength : hint_range(0.0, 1.5) = 1.0;
|
|
uniform float star_strength : hint_range(0.0, 1.5) = 1.0;
|
|
uniform vec2 star_center = vec2(0.269671, 0.155039);
|
|
uniform float garland_fps : hint_range(1.0, 60.0) = 12.5;
|
|
|
|
const vec3 GOLD_CORE = vec3(0.945, 0.80, 0.385);
|
|
const vec3 GOLD_HALO = vec3(1.0, 0.78, 0.35);
|
|
|
|
// 20 lampadine lungo le due falde del tetto a cono
|
|
// Coordinate UV nella texture del mockup (2796x1290), z = fase del loop (4, 2, 0)
|
|
// Coordinate rilevate automaticamente dal PNG 2a_tendone.png:
|
|
// dodici lampadine reali per lato, non dieci e non interpolate su una retta.
|
|
const vec3 p2a_bulbs[24] = vec3[24](
|
|
// Sinistra, dal colletto verso il bordo esterno
|
|
vec3(0.251808, 0.249698, 4.0), // L0
|
|
vec3(0.234388, 0.289171, 2.0), // L1
|
|
vec3(0.214765, 0.320653, 0.0), // L2
|
|
vec3(0.194605, 0.356896, 4.0), // L3
|
|
vec3(0.181462, 0.375494, 2.0), // L4
|
|
vec3(0.167428, 0.398533, 0.0), // L5
|
|
vec3(0.150578, 0.433674, 4.0), // L6
|
|
vec3(0.129082, 0.459304, 2.0), // L7
|
|
vec3(0.107434, 0.492707, 0.0), // L8
|
|
vec3(0.088943, 0.512666, 4.0), // L9
|
|
vec3(0.070246, 0.536780, 2.0), // L10
|
|
vec3(0.042324, 0.560880, 0.0), // L11
|
|
// Destra, dal colletto verso il bordo esterno
|
|
vec3(0.285755, 0.241321, 0.0), // R0
|
|
vec3(0.300670, 0.272138, 2.0), // R1
|
|
vec3(0.320168, 0.303235, 4.0), // R2
|
|
vec3(0.339147, 0.339426, 0.0), // R3
|
|
vec3(0.357906, 0.370273, 2.0), // R4
|
|
vec3(0.376152, 0.403834, 4.0), // R5
|
|
vec3(0.393310, 0.431054, 0.0), // R6
|
|
vec3(0.413618, 0.461451, 2.0), // R7
|
|
vec3(0.439441, 0.496182, 4.0), // R8
|
|
vec3(0.462399, 0.522573, 0.0), // R9
|
|
vec3(0.482340, 0.544497, 2.0), // R10
|
|
vec3(0.500324, 0.560728, 4.0) // R11
|
|
);
|
|
|
|
// 4 grandi punti di ancoraggio lungo la balza ondulata del tendone
|
|
const vec3 p2a_anchor_bulbs[4] = vec3[4](
|
|
vec3(0.08727, 0.46822, 4.0), // A0 (Estremità sinistra della balza)
|
|
vec3(0.19170, 0.51783, 0.0), // A1 (Angolo ingresso SX)
|
|
vec3(0.27182, 0.51783, 2.0), // A2 (Angolo ingresso DX)
|
|
vec3(0.37697, 0.46822, 4.0) // A3 (Estremità destra della balza)
|
|
);
|
|
|
|
float chase_intensity(float d) {
|
|
if (d < 1.0) return 0.30;
|
|
if (d < 2.0) return 0.60;
|
|
if (d < 3.0) return 1.00;
|
|
if (d < 4.0) return 0.95;
|
|
return 0.0;
|
|
}
|
|
|
|
void fragment() {
|
|
vec4 color = texture(TEXTURE, UV);
|
|
|
|
// 1. Stella grande in cima al tendone
|
|
if (star_strength > 0.001) {
|
|
vec2 aspect_diff = (UV - star_center) * vec2(2.1674, 1.0);
|
|
float star_dist = length(aspect_diff);
|
|
float star_area = 1.0 - smoothstep(0.020, 0.060, star_dist);
|
|
float pulse = 0.88 + 0.12 * sin(TIME * 5.0);
|
|
vec3 gold_glow = vec3(1.0, 0.75, 0.20) * star_area * star_strength * pulse;
|
|
color.rgb += gold_glow;
|
|
}
|
|
|
|
// 2. Lucine lungo le falde del tetto e punti sulla balza
|
|
if (lights_strength > 0.001) {
|
|
float frame_time = TIME * garland_fps;
|
|
float cycle = mod(floor(frame_time), 6.0);
|
|
|
|
// 20 Lucine lungo le due falde del tetto a cono
|
|
for (int i = 0; i < 24; i++) {
|
|
float d = mod(cycle - p2a_bulbs[i].z + 6.0, 6.0);
|
|
float intensity = chase_intensity(d);
|
|
if (intensity <= 0.0) {
|
|
continue;
|
|
}
|
|
vec2 delta = (UV - p2a_bulbs[i].xy) * vec2(2796.0, 1290.0);
|
|
float r = length(delta);
|
|
float core = 1.0 - smoothstep(4.0, 10.0, r);
|
|
float halo = exp(-r / 15.0);
|
|
float ga = clamp(intensity * lights_strength, 0.0, 1.0);
|
|
color.rgb = mix(color.rgb, GOLD_CORE, core * ga);
|
|
color.rgb += GOLD_HALO * (halo * ga * 0.75 * (1.0 - core));
|
|
}
|
|
}
|
|
|
|
color.rgb = min(color.rgb, vec3(1.0));
|
|
COLOR = color;
|
|
}
|