Semestre 02, 2026
La GPU no trae efectos integrados. Cada efecto visual de una escena es un shader distinto o una variante de uno.
Un motor no usa un único shader. Cada material, cada tipo de luz y cada pase de render requiere su propio programa, y las combinaciones de opciones multiplican el número de variantes.
| Lenguaje | API | Plataforma |
|---|---|---|
| GLSL | OpenGL, Vulkan | Multiplataforma |
| HLSL | DirectX | Windows y Xbox |
| MSL | Metal | macOS e iOS |
| WGSL | WebGPU | Navegador |
Además del vertex y el fragment shader, el pipeline moderno admite tres tipos de shader más.
| Shader | Se ejecuta una vez por | Produce |
|---|---|---|
| Tessellation | Parche de la malla | Vértices nuevos que subdividen el parche |
| Geometry | Primitiva | Cero o más primitivas nuevas |
| Compute | Elemento de trabajo | Datos arbitrarios en buffers, fuera del pipeline gráfico |
Unidad que resulta de compilar y enlazar los shaders de cada etapa. El vertex shader y el fragment shader son obligatorios, y el resto de etapas es opcional.
Cada invocación de un shader es independiente de las demás. La GPU puede ejecutarlas en cualquier orden y al mismo tiempo, porque ninguna depende del resultado de otra.
Grupo de invocaciones que la GPU ejecuta en bloque con una sola unidad de control. Todas ejecutan la misma instrucción al mismo tiempo, cada una con sus propios datos.
Situación en la que las invocaciones de un mismo warp toman ramas distintas de una condición. El warp ejecuta una rama con las invocaciones de la otra desactivadas, y luego la otra.
Funciones matemáticas que todo lenguaje de shaders trae integradas para transformar un valor en otro sin usar condiciones. Son la herramienta básica para evitar la divergencia.
Transición suave entre cero y uno a lo largo del intervalo de \(e_0\) a \(e_1\), con derivada nula en los dos extremos.
Estrategia que decide en qué punto de la superficie se evalúa la ecuación de iluminación y cómo se reparte el resultado sobre el resto del triángulo.
La iluminación se evalúa una vez por cara con la normal de la cara, y todos los fragmentos del triángulo reciben ese mismo color.
La iluminación se evalúa en el vertex shader con la normal de cada vértice, y la rasterización interpola los tres colores resultantes sobre el triángulo.
La rasterización interpola las normales de los vértices, y el fragment shader evalúa la iluminación en cada fragmento con su normal interpolada.
| Modelo | Etapa de la luz | Lo que se interpola | Especular |
|---|---|---|---|
| Flat | Una vez por cara | Nada | Por cara |
| Gouraud | Vertex shader | El color | Se pierde o salta |
| Phong | Fragment shader | La normal | Correcto |
Variante del modelo de Phong que cambia solo la componente especular. Mide el brillo con el vector medio \(H\) entre la luz y la cámara, en lugar del rayo reflejado \(R\).
Regla que decide qué texel devolver cuando la coordenada UV cae fuera del rango de cero a uno. Se configura por separado para cada eje.
| Modo | Comportamiento |
|---|---|
| Repeat | Usa la parte fraccionaria y repite la imagen. |
| Mirrored repeat | Repite la imagen reflejada en cada repetición. |
| Clamp to edge | Estira el último texel del borde. |
| Clamp to border | Devuelve un color de borde fijo. |
Regla que calcula el color cuando la coordenada no cae justo en el centro de un texel. Importa sobre todo en la magnificación, cuando un texel cubre varios píxeles.
Cuando la superficie se aleja, un solo píxel cubre muchos texels. Si el sampler toma una sola muestra, el color salta de un píxel al siguiente y aparecen patrones de moiré que parpadean al moverse.
Cadena de copias de la textura, cada una con la mitad del tamaño de la anterior y ya promediada. El sampler lee del nivel cuyo tamaño de texel se parece más a la huella del píxel.
Una textura guarda cuatro números por texel, y el shader decide qué significan.
Técnica que reemplaza la normal interpolada por una leída de textura, para simular relieve sobre una superficie plana.
Shader que calcula el color a partir de una fórmula, en lugar de leerlo de una imagen. La entrada suele ser la coordenada UV o la posición del fragmento.
Multiplicar la UV por \(n\) y quedarse con la parte fraccionaria divide la superficie en \(n\) celdas que repiten el rango de cero a uno. Cualquier figura dibujada en una celda se repite en todas.
Función pseudoaleatoria y continua, donde puntos cercanos devuelven valores parecidos. Es la base de nubes, terreno, mármol, fuego y agua.
Se asigna un valor aleatorio a cada esquina de una cuadrícula y se interpola entre esquinas con smoothstep, para que no se noten los bordes de las celdas.
Suma de varias capas de ruido, llamadas octavas, cada una con más frecuencia y menos amplitud que la anterior. Agrega detalle fino sobre la forma general.
Se requiere sombrear una esfera para que parezca un planeta con océanos, costas, vegetación y montañas nevadas, sin usar ninguna textura.
Efecto que mueve cada vértice antes de aplicar las matrices, en función de su posición, del tiempo o de una textura de altura.
Cada vértice se desplaza en la dirección de su normal según una onda que avanza con el tiempo, que llega como uniform.
$$ p' = p + n \cdot A \sin(\omega\, x + t) $$El vertex shader no agrega detalle. Una onda más fina que la separación entre vértices no se puede representar, sin importar la fórmula.
Estilo que cuantiza la intensidad de la luz en pocas bandas planas, imitando el sombreado de una ilustración o de una caricatura.
Luz que aparece en el borde de la silueta, donde la normal es casi perpendicular a la dirección de la cámara.
Instrucción discard del fragment shader, que abandona el fragmento sin escribir color ni profundidad. El píxel conserva lo que ya tenía.
Efectos que se aplican sobre la imagen ya renderizada y no sobre la geometría. La escena se dibuja en una textura y un segundo pase la procesa.
Cada fragmento solo necesita su propio color.
$$ Y = 0.2126\,R + 0.7152\,G + 0.0722\,B $$El fragmento lee varios texels alrededor de su posición y los combina con un kernel de pesos.
$$ K_{blur} = \frac{1}{9}\begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} \qquad G_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} $$| Efecto | Etapa | Se ejecuta una vez por |
|---|---|---|
| Ondas y desplazamiento | Vertex shader | Vértice |
| Gouraud shading | Vertex shader | Vértice |
| Phong shading y normal mapping | Fragment shader | Fragmento |
| Patrones, ruido, toon y disolución | Fragment shader | Fragmento |
| Filtrado y mipmaps | Unidad de textura | Lectura del sampler |
| Desenfoque y bordes | Segundo pase | Píxel de la imagen |
| Término | Definición |
|---|---|
| Programa de shaders | Shaders de cada etapa compilados y enlazados como una unidad. |
| Warp | Grupo de invocaciones que ejecuta la misma instrucción a la vez. |
| Divergencia | Ramas distintas dentro de un warp, que se ejecutan una tras otra. |
| Smoothstep | Transición suave entre cero y uno dentro de un intervalo. |
| Phong shading | Iluminación evaluada por fragmento con la normal interpolada. |
| Discard | Abandono de un fragmento sin escribir color ni profundidad. |
| Término | Definición |
|---|---|
| Sampler | Uniform que da acceso a una textura con sus reglas de lectura. |
| Wrapping | Regla para coordenadas UV fuera del rango de cero a uno. |
| Mipmap | Cadena de copias reducidas y promediadas de una textura. |
| Normal map | Textura que guarda una normal por texel. |
| Ruido | Función pseudoaleatoria continua. |
| fBm | Suma de octavas de ruido con frecuencia creciente. |