Proyecto Final de Shaders
Redactado por
Sebastian V. Fecha de publicación
05/06/2026
Tiempo de lectura
10 min
Tema
Shaders GLSL
El Arquitecto del Lienzo Digital
Has conquistado el nivel más profundo y técnico del diseño web interactivo. Entendiste cómo engañar a la geometría deformando sus vértices, cómo pintar un millón de píxeles al mismo tiempo usando matemáticas, y cómo usar ruido para simular la vida orgánica de la naturaleza.
Proyecto 1 — El Orbe Procedural
Una esfera hiper-subdividida deformada completamente con ruido Perlin 3D en el Vertex Shader. Los colores de su superficie también son procedurales: responden directamente a cuánto se deformó cada vértice en 3D, creando una sintonía perfecta entre geometría y color.
Proyecto 2 — El Portal Dimensional
Un portal 2D puro usando solo un plano y matemáticas en el Fragment Shader. Sin geometría 3D. Sin texturas externas. Solo coordenadas UV, la función atan() para el ángulo y length() para la distancia, creando anillos que giran y pulsan en el tiempo.
Consejo profesional
Estos dos proyectos resumen los dos grandes poderes de los Shaders: el Vertex Shader transforma la geometría (forma), y el Fragment Shader transforma el color (apariencia). Dominar ambos es dominar la GPU por completo.
Proyecto 1 — El Orbe Procedural
Una esfera deformada con ruido 3D Perlin tanto en vértices como en color. La paleta responde a la intensidad de la deformación física.
// Classic Perlin 3D Noise by Stefan Gustavson
// (Función cnoise completa arriba del main)
uniform float u_time;
varying float vDistortion;
void main() {
// Deformamos los vértices con ruido 3D
float noise = cnoise(normal * 2.0 + u_time * 0.5);
vDistortion = noise;
// Empujamos cada vértice a lo largo de su normal
vec3 newPosition = position + normal * (noise * 0.3);
gl_Position = projectionMatrix * viewMatrix
* modelMatrix * vec4(newPosition, 1.0);
} Arrastra para rotar. Una esfera que respira usando puras matemáticas de ruido 3D.
Proyecto 2 — El Portal Dimensional
Un portal puro en 2D. Solo matemáticas de ángulo y distancia en el Fragment Shader. Cero geometría 3D, cero texturas.
uniform float u_time;
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1.0);
} Anillos que giran y pulsan generados con atan(), length() y sin(). Todo procedural.
Desafío final
Combina ambos proyectos y crea la portada de tu portfolio.