1uniform float u_Time;
2uniform sampler2D u_Tex0;
3uniform sampler2D u_Tex1;
4varying vec2 v_TexCoord;
5uniform vec2 u_Resolution;
6
7void main(void)
8{
9 vec3 bgcol = texture2D(u_Tex0, v_TexCoord).xyz;
10
11 // Resoluciones para escala estable
12 float resX = u_Resolution.x > 0.0 ? u_Resolution.x : 800.0;
13 float resY = u_Resolution.y > 0.0 ? u_Resolution.y : 600.0;
14 vec2 screenUV = gl_FragCoord.xy / resX;
15
16 // DOBLE CAPA VISIBLE:
17 // Capa A
18 vec2 uvA = (screenUV * 0.3) + (vec2(0.8, 0.3) * u_Time * 0.04);
19 vec3 fogA = texture2D(u_Tex1, uvA).rgb;
20
21 // Capa B (Dirección opuesta para dinamismo)
22 vec2 uvB = (screenUV * 0.5) + (vec2(-0.5, 0.7) * u_Time * 0.06);
23 vec3 fogB = texture2D(u_Tex1, uvB).rgb;
24
25 // Promedio de color y fuerza de la nube
26 vec3 combinedColor = (fogA + fogB) * 0.5;
27 float combinedIntensity = (fogA.r + fogB.r) * 0.5;
28
29 // Evitar luz (Antorchas)
30 float brightness = dot(bgcol, vec3(0.299, 0.587, 0.114));
31 float lightAvoidance = 1.0 - smoothstep(0.3, 0.85, brightness);
32
33 // Máscara HUD
34 float mask = clamp(gl_FragCoord.y / (resY * 0.4), 0.0, 1.0);
35
36 // RESULTADO VISIBLE: Aumentamos el multiplicador a 1.5
37 float finalAlpha = mask * 1.5 * lightAvoidance * combinedIntensity;
38
39 // Mezcla con brillo extra para que las nubes destaquen
40 vec3 result = mix(bgcol, combinedColor * 1.4, finalAlpha);
41
42 gl_FragColor = vec4(result, 1.0);
43}
44