
En gráficos por computadora , un sombreador es una operación programable que se aplica a los datos a medida que se mueven a través del pipeline de renderizado . [ 1 ] [ 2 ] Los sombreadores actúan sobre datos como vértices y primitivas, generan o transforman geometrías y fragmentos , y calculan los colores en una imagen renderizada. [ 2 ]
Los sombreadores pueden ejecutar una amplia variedad de operaciones. En los gráficos por computadora modernos en tiempo real , los sombreadores se ejecutan en unidades de procesamiento gráfico (GPU), hardware dedicado que proporciona ejecución paralela de programas. Debido a que la renderización de imágenes es un problema fácilmente paralelizable (con un índice de Amdahl de uno), los sombreadores se benefician enormemente de la computación paralela , como el hardware SIMD . El impulso por una renderización más rápida ha producido procesadores altamente paralelos, como las GPU, que ahora se utilizan para computación de propósito general . [ 3 ] [ 4 ] Los sombreadores utilizados para propósitos generales se denominan comúnmente sombreadores de cómputo .
Historia
El término "shader" fue introducido por primera vez al público por Pixar con la versión 3.0 de su especificación de interfaz RenderMan , publicada originalmente en mayo de 1988. [ 5 ]
A medida que evolucionaron las unidades de procesamiento gráfico , las principales bibliotecas de software gráfico como OpenGL y Direct3D comenzaron a admitir sombreadores. Las primeras GPU con capacidad para sombreadores solo admitían sombreado de píxeles , pero los sombreadores de vértices se introdujeron rápidamente una vez que los desarrolladores se dieron cuenta del poder de los sombreadores. La primera tarjeta de video con un sombreador de píxeles programable fue la Nvidia GeForce 3 (NV20), lanzada en 2001. [ 6 ] Los sombreadores de geometría se introdujeron con Direct3D 10 y OpenGL 3.2. El hardware gráfico evolucionó hacia un modelo de sombreador unificado , haciendo que todos los sombreadores fueran iguales.
sombreadores gráficos
El uso tradicional de los sombreadores consiste en operar con datos en la canalización gráfica para controlar la representación de una imagen. Los sombreadores gráficos se clasifican según su posición en la canalización, los datos que manipulan y la API gráfica que utilizan.
sombreadores de vértices
Los sombreadores de vértices se ejecutan una vez por cada vértice 3D que se le pasa al procesador gráfico. El propósito es transformar la posición 3D de cada vértice en el espacio virtual a la coordenada 2D en la que aparece en la pantalla (así como un valor de profundidad para el búfer Z). [ 7 ] Los sombreadores de vértices pueden manipular propiedades como la posición, el color y las coordenadas de textura, pero no pueden crear nuevos vértices. La salida del sombreador de vértices va a la siguiente etapa de la canalización, que es un sombreador de geometría si está presente, o el rasterizador . Los sombreadores de vértices pueden permitir un control potente sobre los detalles de posición, movimiento, iluminación y color en cualquier escena que involucre modelos 3D .
sombreadores de geometría
Los sombreadores de geometría se introdujeron en Direct3D 10 y OpenGL 3.2; anteriormente estaban disponibles en OpenGL 2.0+ mediante el uso de extensiones. [ 8 ] Este tipo de sombreador puede generar nuevas primitivas gráficas , como puntos, líneas y triángulos, a partir de las primitivas que se enviaron al inicio de la canalización gráfica. [ 9 ]
Los programas de sombreado de geometría se ejecutan después de los sombreadores de vértices. Reciben como entrada una primitiva completa, posiblemente con información de adyacencia. Por ejemplo, al trabajar con triángulos, los tres vértices son la entrada del sombreador de geometría. El sombreador puede entonces generar cero o más primitivas, que se rasterizan y cuyos fragmentos se pasan finalmente a un sombreador de píxeles .
Entre los usos típicos de un sombreador de geometría se incluyen la generación de sprites de puntos, la teselación de geometría , la extrusión de volumen de sombras y la renderización en una sola pasada a un mapa cúbico . Un ejemplo típico del mundo real de las ventajas de los sombreadores de geometría sería la modificación automática de la complejidad de la malla. Una serie de franjas de líneas que representan puntos de control para una curva se pasan al sombreador de geometría y, según la complejidad requerida, el sombreador puede generar automáticamente líneas adicionales, cada una de las cuales proporciona una mejor aproximación de la curva.
sombreadores de fragmentos
Los sombreadores de fragmentos, también conocidos como sombreadores de píxeles , calculan el color y otros atributos de cada "fragmento": una unidad de trabajo de renderizado que afecta como máximo a un único píxel de salida . Los tipos más simples de sombreadores de píxeles generan un píxel de la pantalla como valor de color; también son posibles sombreadores más complejos con múltiples entradas/salidas. [ 10 ] Los sombreadores de píxeles abarcan desde generar siempre el mismo color, hasta aplicar un valor de iluminación , realizar mapeo de relieve , sombras , reflejos especulares , translucidez y otros fenómenos. Pueden alterar la profundidad del fragmento (para el búfer Z ) o generar más de un color si hay varios objetivos de renderizado activos. En gráficos 3D, un sombreador de píxeles por sí solo no puede producir algunos tipos de efectos complejos porque opera solo en un único fragmento, sin conocimiento de la geometría de la escena (es decir, datos de vértices). Sin embargo, los sombreadores de píxeles sí conocen la coordenada de la pantalla que se está dibujando y pueden muestrear la pantalla y los píxeles cercanos si el contenido de toda la pantalla se pasa como textura al sombreador. Esta técnica permite una amplia variedad de efectos de posprocesamiento bidimensionales, como el desenfoque o la detección /mejora de bordes para sombreadores de estilo cómic/cel . Los sombreadores de píxeles también se pueden aplicar en etapas intermedias a cualquier imagen bidimensional ( sprites o texturas) en el flujo de trabajo , mientras que los sombreadores de vértices siempre requieren una escena 3D. Por ejemplo, un sombreador de píxeles es el único tipo de sombreador que puede actuar como posprocesador o filtro para una secuencia de vídeo después de haber sido rasterizada .
sombreadores de teselación
OpenGL 4.0 y Direct3D 11 introdujeron una nueva clase de sombreador llamada sombreador de teselación. Añadió dos nuevas etapas de sombreador al modelo tradicional: sombreadores de control de teselación (también conocidos como sombreadores de envoltura) y sombreadores de evaluación de teselación (también conocidos como sombreadores de dominio ), que en conjunto permiten subdividir mallas más simples en mallas más finas en tiempo de ejecución según una función matemática. Esta función puede relacionarse con diversas variables, principalmente la distancia a la cámara de visualización, para permitir el escalado activo del nivel de detalle . Esto permite que los objetos cercanos a la cámara tengan detalles finos, mientras que los más alejados pueden tener mallas más gruesas, pero con una calidad aparentemente comparable. También puede reducir drásticamente el ancho de banda de la malla requerido, ya que permite refinarla una vez dentro de las unidades de sombreado en lugar de submuestrear mallas muy complejas desde la memoria. Algunos algoritmos pueden sobremuestrear cualquier malla arbitraria, mientras que otros permiten "sugerencias" en las mallas para determinar los vértices y aristas más característicos.
Shaders primitivos y de malla
Hacia 2017, la microarquitectura AMD Vega añadió soporte para una nueva etapa de sombreado —sombreadores primitivos— algo similar a los sombreadores de cómputo con acceso a los datos necesarios para procesar la geometría. [ 11 ] [ 12 ]
Nvidia introdujo sombreadores de malla y de tareas con su microarquitectura Turing en 2018, los cuales también están modelados a partir de sombreadores de cómputo. [ 13 ] [ 14 ] Nvidia Turing es la primera microarquitectura de GPU del mundo que admite sombreado de malla a través de la API DirectX 12 Ultimate, varios meses antes del lanzamiento de la serie Ampere RTX 30. [ 15 ]
En 2020, AMD y Nvidia lanzaron las microarquitecturas RDNA 2 y Ampere , que admiten sombreado de malla a través de DirectX 12 Ultimate . [ 16 ] Estos sombreadores de malla permiten que la GPU maneje algoritmos más complejos, descargando más trabajo de la CPU a la GPU y, en renderizado intensivo de algoritmos, aumentando la velocidad de fotogramas o el número de triángulos en una escena en un orden de magnitud. [ 17 ] Intel anunció que las GPU Intel Arc Alchemist que se lanzarán en el primer trimestre de 2022 admitirán sombreadores de malla. [ 18 ]
sombreadores de trazado de rayos
Microsoft admite sombreadores de trazado de rayos mediante DirectX Raytracing , Khronos Group mediante Vulkan , GLSL y SPIR-V , [ 19 ] y Apple mediante Metal . Nvidia y AMD denominaron a las partes del hardware responsables de ejecutar estos sombreadores "núcleos de trazado de rayos". [ 20 ]
Núcleos de cálculo
Los núcleos de cómputo son rutinas compiladas para aceleradores de alto rendimiento (como unidades de procesamiento gráfico (GPU), procesadores de señales digitales (DSP) o matrices de puertas programables en campo (FPGA)), separadas de un programa principal (que normalmente se ejecuta en una unidad central de procesamiento ) pero utilizadas por este. Pueden especificarse mediante un lenguaje de programación independiente como " OpenCL C ", como "sombreadores de cómputo" escritos en un lenguaje de sombreado , o incrustados directamente en el código de la aplicación escrito en un lenguaje de alto nivel . [ 21 ] [ 22 ] Los núcleos de cómputo se corresponden aproximadamente con bucles internos al implementar algoritmos en lenguajes tradicionales (excepto que no hay una operación secuencial implícita), o con código pasado a iteradores internos . Microsoft admite esto como DirectCompute .
Este paradigma de programación de un solo programa y múltiples datos se adapta bien a los procesadores vectoriales : se asume que cada invocación de un kernel dentro de un lote es independiente, lo que permite la ejecución paralela de datos . Sin embargo, en algunos casos, se pueden usar operaciones atómicas para la sincronización entre elementos (para trabajo interdependiente). A cada invocación individual se le asignan índices (en una o más dimensiones) a partir de los cuales se puede realizar un direccionamiento arbitrario de los datos del búfer (incluidas las operaciones de dispersión y recolección ), siempre que se respete la suposición de no superposición.
La API Vulkan proporciona la representación intermedia SPIR-V para describir tanto sombreadores gráficos como núcleos de cómputo de forma independiente del lenguaje y de la máquina . El objetivo es facilitar la evolución del lenguaje y ofrecer una capacidad más natural para aprovechar las capacidades de cómputo de la GPU, en consonancia con los avances de hardware como la Arquitectura de Memoria Unificada y la Arquitectura de Sistema Heterogéneo . Esto permite una mayor colaboración entre la CPU y la GPU.
Se ha trabajado mucho en el campo de la generación de kernels mediante LLM como medio para optimizar el código. KernelBench, [ 23 ] creado por el Scaling Intelligence Lab de Stanford , proporciona un marco para evaluar la capacidad de los LLM para generar kernels de GPU eficientes. Cognition creó Kevin 32-B para crear kernels CUDA eficientes que, a mayo de 2025, era el modelo con mejor rendimiento en KernelBench. [ 24 ]
Shaders de cómputo
Los sombreadores de cómputo se refieren a núcleos de cómputo escritos en un lenguaje de sombreado . Estos sombreadores comparten unidades de ejecución con los sombreadores de vértices y los sombreadores de píxeles en las GPU, un ejemplo de operación GPGPU . Pueden utilizarse en pipelines gráficos para fines tales como etapas adicionales en algoritmos de animación o iluminación (por ejemplo, renderizado directo en mosaico ) o para fines no gráficos. Algunas API de renderizado permiten que los sombreadores de cómputo compartan fácilmente recursos de datos con el pipeline gráfico, lo que facilita la integración de gráficos y cómputo.
sombreadores tensoriales
Los sombreadores tensoriales son programas aceleradores que manejan operaciones matriciales en grandes matrices , un tipo de operación comúnmente utilizada en la IA basada en redes neuronales . Pueden ejecutarse en NPU o GPU . Los sombreadores tensoriales son compatibles con Microsoft a través de DirectML , Khronos Group a través de OpenVX , Apple a través de Core ML , Google a través de TensorFlow y Linux Foundation a través de ONNX . [ 25 ] Nvidia y AMD denominaron a las partes del hardware responsables de ejecutar estos sombreadores "núcleos tensoriales". [ 26 ]
Programación
Existen varios lenguajes de programación específicos para escribir sombreadores, y el que se utilice dependerá del entorno de destino. El lenguaje de sombreado para OpenGL es GLSL , y Direct3D utiliza HLSL . El framework Metal , utilizado por los dispositivos Apple, tiene su propio lenguaje de sombreado llamado Metal Shading Language .
Cada vez más, en las API gráficas modernas, los sombreadores se compilan en SPIR-V , un lenguaje intermedio , antes de distribuirse al usuario final. Este estándar permite una elección más flexible del lenguaje de sombreado, independientemente de la plataforma de destino. [ 27 ] Inicialmente compatible con Vulkan y OpenGL, SPIR-V también está siendo adoptado por Direct3D. [ 28 ]
Editores de sombreado con interfaz gráfica de usuario
Las plataformas modernas de desarrollo de videojuegos, como Unity , Unreal Engine y Godot, incluyen cada vez más editores basados en nodos que permiten crear sombreadores sin necesidad de escribir código. En su lugar, el usuario dispone de un grafo dirigido de nodos conectados que le permite dirigir diversas texturas, mapas y funciones matemáticas hacia valores de salida como el color difuso, el color y la intensidad especular, la rugosidad/metalicidad, la altura, la normal, etc. Posteriormente, el grafo se compila en un sombreador.
En el ámbito del desarrollo web, también han surgido herramientas de sombreado visuales y basadas en componentes. Plataformas como shaders.com ofrecen composición de sombreadores basada en componentes para su integración en frameworks frontend como Vue , React y Svelte , mientras que herramientas como Shadertoy y FragCoord.xyz se centran en la creación y depuración de sombreadores de bajo nivel.
Véase también
Referencias
- ↑ "Vulkan® 1.4.323 - Una especificación" . Khronos Group . Consultado el 28 de julio de 2025 .
- 1 2 "El sistema gráfico OpenGL®: una especificación" (PDF) . Khronos Group. pág. 87. Consultado el 28 de julio de 2025 .
- ↑ "Enciclopedia Británica: unidad de procesamiento gráfico" . Enciclopedia Británica . Consultado el 28 de julio de 2025 .
- ↑ Boggan, Sha'Kia; Pressel, Daniel (2007). GPUs: una plataforma emergente para computación de propósito general (PDF) . Laboratorio de Investigación del Ejército .
- ↑ "Especificación de la interfaz RenderMan" . Archivado del original el 25 de junio de 2018.
- ↑ Lillypublished, Paul (19 de mayo de 2009). "De Voodoo a GeForce: La increíble historia de los gráficos 3D" . PC Gamer – vía www.pcgamer.com.
- ↑ "Tutorial de GLSL – Sombreador de vértices" . 9 de junio de 2011.
- ↑ Sombreador de geometría - OpenGL . Consultado el 21 de diciembre de 2011.
- ↑ "Etapas de la canalización (Direct3D 10) (Windows)" . msdn.microsoft.com . 6 de enero de 2021.
- ↑ "Tutorial de GLSL: Fragment Shader" . 9 de junio de 2011.
- ↑ "Radeon RX Vega al descubierto: AMD promete rendimiento en juegos 4K por 499 dólares - Trusted Reviews" . TrustedReviews . 31 de julio de 2017.
- ↑ "Se levanta el telón sobre la arquitectura Vega de AMD" . 5 de enero de 2017.
- ↑ "Arquitectura Turing de Nvidia en profundidad" . 14 de septiembre de 2018.
- ↑ "Introducción a los sombreadores de malla de Turing" . 17 de septiembre de 2018.
- ↑ "Lanzado el controlador DirectX 12 Ultimate Game Ready; también incluye compatibilidad con 9 nuevos monitores para juegos compatibles con G-SYNC" .
- ↑ "Anuncio de DirectX 12 Ultimate" . Blog para desarrolladores de DirectX . 19 de marzo de 2020. Consultado el 25 de mayo de 2021 .
- ↑ "Iluminación realista en Justice con sombreado de malla" . Blog de desarrolladores de Nvidia . 21 de mayo de 2021. Consultado el 25 de mayo de 2021 .
- ↑ Smith, Ryan. "Día de la Arquitectura de Intel 2021: Un vistazo a la arquitectura de la GPU Xe-HPG" . AnandTech . Archivado del original el 19 de agosto de 2021.
- ↑ "Lanzamiento de la especificación final de Vulkan Ray Tracing" . Blog. Khronos Group . 23 de noviembre de 2020. Consultado el 22 de febrero de 2021 .
- ↑ "RTSL: un lenguaje de sombreado para trazado de rayos" (PDF) . Archivado del original (PDF) el 12 de octubre de 2011.
- ↑ Introducción a la programación de computadoras en Metal , 14 de octubre de 2014
- ↑ Tutorial de CUDA - El núcleo , 11 de julio de 2009
- ↑ https://scalingintelligence.stanford.edu/blogs/kernelbench/ KernelBench
- ↑ Baronio, Carlo; Marsella, Pietro; Pan, Ben; Alberti, Silas (6 de mayo de 2025). "Kevin-32B: Aprendizaje por refuerzo multiturno para escribir kernels CUDA | Cognition" . cognition.com .
- ↑ "Guía de migración de NNAPI" . Desarrolladores de Android . Consultado el 1 de agosto de 2024 .
- ↑ "Análisis de la arquitectura de la GPU" (PDF) . Archivado del original (PDF) el 6 de septiembre de 2024.
- ^ Kessenich, Juan (2015). "Una introducción a SPIR-V" (PDF) . Grupo Khronos .
- ↑ Discuss, Aleksandar K (20 de septiembre de 2024). "Microsoft DirectX 12 cambia a SPIR-V como formato de intercambio predeterminado" . TechPowerUp . Consultado el 8 de septiembre de 2025 .
Lecturas adicionales
- Upstill, Steve (1990). The RenderMan Companion: A Programmer's Guide to Realistic Computer Graphics . Addison-Wesley. ISBN 0-201-50868-0.
- Ebert, David S .; Musgrave, F. Kenton ; Peachey, Darwyn ; Perlin, Ken ; Worley, Steven (1994). Texturizado y modelado: un enfoque procedimental . AP Professional. ISBN 0-12-228730-4.
- Fernando, Randima ; Kilgard, Mark (2003). El tutorial de Cg: La guía definitiva para gráficos programables en tiempo real . Addison-Wesley Professional. ISBN 0-321-19496-9.
- Rost, Randi J (2004). Lenguaje de sombreado OpenGL . Addison-Wesley Professional. ISBN 0-321-19789-5.
Enlaces externos
- Extensión del sombreador de geometría de OpenGL
- Tutorial de Riemer sobre DirectX y HLSL : Tutorial de HLSL usando DirectX con mucho código de ejemplo.
- Etapas de la canalización (Direct3D 10)
- Sombreado