06 Capítulo 6 · Lección 4

Fragment Shaders

Redactado por
Author Sebastian V.
Fecha de publicación

02/04/2026

Tiempo de lectura

7 min

Tema

Shaders GLSL

Los pintores de la GPU

Si el Vertex Shader acomodó las esquinas de tu plano en la pantalla, ahora tienes un espacio vacío entre esos vértices. Aquí entra el Fragment Shader. La GPU lo ejecutará ciegamente millones de veces, una vez por cada píxel (fragmento) que forme parte de esa geometría en tu monitor.

Su única misión en la vida es responder: "¿Qué color RGBA le asigno a este píxel microscópico?".

La Variable Sagrada: gl_FragColor

Todo el código de tu Fragment Shader converge en un solo objetivo: construir un vector de 4 dimensiones (R, G, B, Alpha) y entregárselo a la variable reservada de salida gl_FragColor.

Pintar a ciegas

Imagina que tienes un millón de empleados trabajando en habitaciones oscuras sin verse entre ellos. Les dices: "Pinta de rojo si estás en la coordenada X mayor a 0.5". Ellos no saben qué están dibujando en conjunto. Tu habilidad en Fragment Shaders es inventar reglas matemáticas basadas en coordenadas para que, al ver a todos los empleados juntos, formen una imagen, una textura o un gradiente.

Consejo profesional

En un Material normal de Three.js (MeshStandardMaterial), Three.js inyecta toneladas de código de Fragment Shader complejo por debajo para calcular las sombras, luces y reflejos. Cuando usas un ShaderMaterial personalizado, TODO eso desaparece. Eres tú contra el negro puro. Tendrás que dibujar tu propia luz (o aprender a importar los 'chunks' de Three.js).

El Gradiente por Coordenadas

> _
void main() {
  // gl_FragCoord.xy nos da las coordenadas del píxel en la pantalla
  // Aquí creamos una lógica inventada: 
  // Si la X es pequeña, será menos rojo.
  // Haremos cálculos estáticos.

  vec3 colorA = vec3(0.98, 0.36, 0.49); // Rosa FC5D7D
  vec3 colorB = vec3(0.34, 0.69, 0.98); // Azul 57B0FB

  // Dividimos la coordenada actual por una resolución ficticia para obtener un % entre 0 y 1
  float mixValue = gl_FragCoord.x / 800.0;

  // mix() es una función de GLSL equivalente a lerp o transiciones
  vec3 colorFinal = mix(colorA, colorB, mixValue);

  gl_FragColor = vec4(colorFinal, 1.0);
}
> _

Mezclando dos colores según en qué píxel X de la pantalla esté trabajando el shader.

Errores comunes

01
Pantalla en negro Olvidaste asignar un valor a gl_FragColor, o el valor que asignaste tiene todos sus canales en 0.0. Prueba a poner gl_FragColor = vec4(1.0); para depurar (blanco puro).
02
Usar coordenadas de pantalla sin u_resolution Si usas gl_FragCoord.x directamente sin dividir por u_resolution, el gradiente dependerá del tamaño del monitor. Un monitor 4K verá algo completamente diferente a uno HD.

Practica lo aprendido

Sé el maestro del color.

01 Comprende que el Fragment se ejecuta por cada píxel.
02 Aprende a usar la función mix(colorA, colorB, porcentaje) en GLSL.
03 Asigna el color a la variable vec4 gl_FragColor.