Sombreador

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Un ejemplo de dos tipos de sombreadores: La sombra plana a la izquierda y Phong a la derecha. El afeitado de Phong es una mejora en el afeitado Gouraud, y fue uno de los primeros modelos de afeitado de computadora desarrollados después del sombreador plano básico, mejorando enormemente la apariencia de superficies curvas en los renderizados. Las afeitadas se utilizan más comúnmente para producir áreas iluminadas y sombreadas en el renderizado de modelos 3D.
Otro uso de sombreadores es para efectos especiales, incluso en imágenes 2D, (por ejemplo, una foto de una webcam). La imagen sin alterar y sin afeitar está a la izquierda, y la misma imagen tiene un tono aplicado a la derecha. Este sombreador funciona reemplazando todas las áreas de luz de la imagen con blanco, y todas las áreas oscuras con una textura de color brillante.

En gráficos por computadora, un sombreador es un programa informático que calcula los niveles apropiados de luz, oscuridad y color durante la representación de una escena 3D, un proceso conocido como sombreado. Los sombreadores han evolucionado para realizar una variedad de funciones especializadas en efectos especiales de gráficos por computadora y posprocesamiento de video, así como computación de propósito general en unidades de procesamiento de gráficos.

Los sombreadores tradicionales calculan los efectos de renderizado en el hardware de gráficos con un alto grado de flexibilidad. La mayoría de los sombreadores están codificados para (y se ejecutan en) una unidad de procesamiento de gráficos (GPU), aunque este no es un requisito estricto. Los lenguajes de sombreado se utilizan para programar el canal de renderizado de la GPU, que en su mayor parte ha reemplazado el canal de funciones fijas del pasado que solo permitía funciones comunes de transformación de geometría y sombreado de píxeles; Con sombreadores, se pueden utilizar efectos personalizados. La posición y el color (tono, saturación, brillo y contraste) de todos los píxeles, vértices y/o texturas utilizados para construir una imagen renderizada final se pueden alterar utilizando algoritmos definidos en un sombreador y se pueden modificar mediante variables o texturas externas. introducido por el programa de computadora que llama al sombreador.

Los sombreadores se utilizan ampliamente en el posprocesamiento cinematográfico, en imágenes generadas por computadora y en videojuegos para producir una variedad de efectos. Más allá de los simples modelos de iluminación, los usos más complejos de los sombreadores incluyen: alterar el tono, la saturación, el brillo (HSL/HSV) o el contraste de una imagen; producir desenfoque, floración de luz, iluminación volumétrica, mapeo normal (para efectos de profundidad), bokeh, sombreado de celdas, posterización, mapeo de relieve, distorsión, incrustación cromática (para los llamados efectos de "pantalla azul/pantalla verde"), borde y detección de movimiento, así como efectos psicodélicos como los que se ven en la escena de demostración.

Historia

Este uso del término "shader" Pixar lo presentó al público con la versión 3.0 de su Especificación de interfaz RenderMan, publicada originalmente en mayo de 1988.

A medida que las unidades de procesamiento de gráficos evolucionaron, las principales bibliotecas de software de gráficos, como OpenGL y Direct3D, comenzaron a admitir sombreadores. Las primeras GPU con capacidad de sombreado solo admitían el 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. Los sombreadores geométricos se introdujeron con Direct3D 10 y OpenGL 3.2. Con el tiempo, el hardware de gráficos evolucionó hacia un modelo de sombreado unificado.

Diseño

Los sombreadores son programas simples que describen las características de un vértice o de un píxel. Los sombreadores de vértices describen los atributos (posición, coordenadas de textura, colores, etc.) de un vértice, mientras que los sombreadores de píxeles describen los rasgos (color, profundidad z y valor alfa) de un píxel. Se llama a un sombreador de vértices para cada vértice en una primitiva (posiblemente después de la teselación); por lo tanto, un vértice adentro, un vértice (actualizado) afuera. Luego, cada vértice se representa como una serie de píxeles en una superficie (bloque de memoria) que eventualmente se enviará a la pantalla.

Los sombreadores reemplazan una sección del hardware de gráficos generalmente llamada canalización de funciones fijas (FFP), llamada así porque realiza mapeos de iluminación y texturas de manera codificada. Los sombreadores proporcionan una alternativa programable a este enfoque codificado.

El proceso de gráficos básico es el siguiente:

  • La CPU envía instrucciones (programas de lenguaje compilado) y datos de geometría a la unidad de procesamiento de gráficos, ubicada en la tarjeta gráfica.
  • Dentro del tono del vértice, la geometría se transforma.
  • Si un sombreador de geometría está en la unidad de procesamiento gráfico y activo, se realizan algunos cambios de las geometrías en la escena.
  • Si un sombreador de tessellation está en la unidad de procesamiento gráfico y activo, las geometrías en la escena pueden ser subdivididas.
  • La geometría calculada es triangulada (subdividida en triángulos).
  • Los triángulos se descomponen en cuádruples fragmentados (un cuádruplo fragmento es un 2 × 2 fragmento primitivo).
  • Los cuádruples de fragmento se modifican de acuerdo con el sombreador de fragmentos.
  • La prueba de profundidad se realiza; fragmentos que pasan se escribirán a la pantalla y podrían mezclarse en el búfer de marco.

El proceso gráfico utiliza estos pasos para transformar datos tridimensionales (o bidimensionales) en datos bidimensionales útiles para su visualización. En general, se trata de una matriz de píxeles grande o "búfer de fotogramas".

Tipos

Hay tres tipos de sombreadores de uso común (sombreadores de píxeles, vértices y geometría), y se agregaron varios más recientemente. Mientras que las tarjetas gráficas más antiguas utilizan unidades de procesamiento separadas para cada tipo de sombreador, las tarjetas más nuevas cuentan con sombreadores unificados que son capaces de ejecutar cualquier tipo de sombreador. Esto permite que las tarjetas gráficas hagan un uso más eficiente de la potencia de procesamiento.

Sombreadores 2D

Los sombreadores 2D actúan sobre imágenes digitales, también llamadas texturas en el campo de los gráficos por ordenador. Modifican atributos de píxeles. Los sombreadores 2D pueden participar en la representación de la geometría 3D. Actualmente, el único tipo de sombreador 2D es un sombreador de píxeles.

Sombreadores de píxeles

Los sombreadores de píxeles, también conocidos como sombreadores de fragmentos, 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. Los sombreadores de píxeles van desde simplemente generar siempre el mismo color hasta aplicar un valor de iluminación, realizar mapeo de relieve, sombras, luces especulares, translucidez y otros fenómenos. Pueden alterar la profundidad del fragmento (para almacenamiento en 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 una escena (es decir, datos de vértice). Sin embargo, los sombreadores de píxeles tienen conocimiento de las coordenadas de la pantalla que se están dibujando y pueden muestrear la pantalla y los píxeles cercanos si el contenido de toda la pantalla se pasa como una textura al sombreador. Esta técnica puede permitir una amplia variedad de efectos de posprocesamiento bidimensionales, como desenfoque o detección/mejora de bordes para sombreadores de dibujos animados/celdas. Los sombreadores de píxeles también se pueden aplicar en etapas intermedias a cualquier imagen bidimensional (sprites o texturas) en proceso, 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 transmisión de vídeo después de haber sido rasterizado.

Sombreadores 3D

Los sombreadores 3D actúan sobre modelos 3D u otra geometría, pero también pueden acceder a los colores y texturas utilizados para dibujar el modelo o la malla. Los sombreadores de vértices son el tipo más antiguo de sombreadores 3D y generalmente realizan modificaciones por vértice. Los sombreadores de geometría más nuevos pueden generar nuevos vértices desde dentro del sombreador. Los sombreadores de teselación son los sombreadores 3D más nuevos; actúan sobre lotes de vértices todos a la vez para agregar detalles, como subdividir un modelo en grupos más pequeños de triángulos u otras primitivas en tiempo de ejecución, para mejorar cosas como curvas y protuberancias, o cambiar otros atributos.

Sombreadores de vértices

Los sombreadores de vértices son el tipo de sombreador 3D más establecido y común y se ejecutan una vez por cada vértice asignado al procesador de gráficos. 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). Los sombreadores de vértices pueden manipular propiedades como posición, color y coordenadas de textura, pero no pueden crear nuevos vértices. La salida del sombreador de vértices pasa a la siguiente etapa del proceso, que es un sombreador de geometría, si está presente, o el rasterizador. Los sombreadores de vértices pueden permitir un poderoso control 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 disponible en OpenGL 2.0+ con el uso de extensiones. Este tipo de sombreador puede generar nuevas primitivas de gráficos, como puntos, líneas y triángulos, a partir de aquellas primitivas que se enviaron al comienzo del proceso de gráficos.

Los programas de sombreado de geometría se ejecutan después de los sombreadores de vértices. Toman como entrada una primitiva completa, posiblemente con información de adyacencia. Por ejemplo, cuando se opera con triángulos, los tres vértices son la entrada del sombreador de geometría. Luego, el sombreador puede emitir cero o más primitivas, que se rasterizan y sus fragmentos finalmente pasan a un sombreador de píxeles.

Los usos típicos de un sombreador de geometría incluyen generación de sprites de puntos, teselación de geometría, extrusión de volumen de sombra y renderizado de una sola pasada en un mapa de cubo. Un ejemplo típico del mundo real de los beneficios 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, dependiendo de la complejidad requerida, el sombreador puede generar automáticamente líneas adicionales, cada una de las cuales proporciona una mejor aproximación de una curva.

Sombreadores de teselación

A partir de OpenGL 4.0 y Direct3D 11, se agregó una nueva clase de sombreador llamado sombreador de teselación. Agrega dos nuevas etapas de sombreado al modelo tradicional: sombreadores de control de teselación (también conocidos como sombreadores de casco) 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 a una función matemática. La función se puede relacionar con una variedad de variables, en particular la distancia desde la cámara de visualización para permitir una escala activa 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 parecen comparables en calidad. También puede reducir drásticamente el ancho de banda de malla requerido al permitir que las mallas se refinen una vez dentro de las unidades de sombreado en lugar de reducir la resolución de las muy complejas desde la memoria. Algunos algoritmos pueden sobremuestrear cualquier malla arbitraria, mientras que otros permiten "insinuar" que el resultado sea un problema. en mallas para dictar los vértices y aristas más característicos.

Sombreadores primitivos y de malla

Circa 2017, la microarquitectura AMD Vega agregó soporte para una nueva etapa de sombreado (sombreadores primitivos), algo similar a los sombreadores informáticos con acceso a los datos necesarios para procesar la geometría.

Nvidia introdujo sombreadores de malla y tareas con su microarquitectura Turing en 2018, que también están modelados a partir de sombreadores informáticos. Nvidia Turing es la primera microarquitectura de GPU del mundo que admite sombreado de malla a través de DirectX 12 Ultimate API, varios meses antes del lanzamiento de la serie Ampere RTX 30.

En 2020, AMD y Nvidia lanzaron las microarquitecturas RDNA 2 y Ampere, que admiten sombreado de malla a través de DirectX 12 Ultimate. 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 el procesamiento intensivo de algoritmos, aumentando la velocidad de cuadros o la cantidad de triángulos en una escena en un orden de magnitud. Intel anunció que las GPU Intel Arc Alchemist que se enviarán en el primer trimestre de 2022 admitirán sombreadores de malla.

Sombreadores de trazado de rayos

Los sombreadores de trazado de rayos son compatibles con Microsoft a través de DirectX Raytracing, por Khronos Group a través de Vulkan, GLSL y SPIR-V, y por Apple a través de Metal.

Sombreadores de cálculo

Los sombreadores informáticos no se limitan a aplicaciones gráficas, sino que utilizan los mismos recursos de ejecución para GPGPU. Se pueden utilizar en canalizaciones de gráficos, p. para etapas adicionales en algoritmos de animación o iluminación (por ejemplo, renderizado en mosaico). Algunas API de renderizado permiten que los sombreadores informáticos compartan fácilmente recursos de datos con la canalización de gráficos.

Procesamiento paralelo

Los sombreadores están escritos para aplicar transformaciones a un gran conjunto de elementos a la vez, por ejemplo, a cada píxel en un área de la pantalla o a cada vértice de un modelo. Esto se adapta bien al procesamiento paralelo y la mayoría de las GPU modernas tienen múltiples canales de sombreado para facilitar esto, lo que mejora enormemente el rendimiento de cálculo.

Un modelo de programación con sombreadores es similar a una función de orden superior para renderizado, tomando los sombreadores como argumentos y proporcionando un flujo de datos específico entre resultados intermedios, permitiendo tanto el paralelismo de datos (entre píxeles, vértices, etc.) como el paralelismo de canalización (entre etapas). (ver también reducción de mapa).

Programación

El lenguaje en el que se programan los sombreadores depende del entorno de destino. El lenguaje de sombreado oficial OpenGL y OpenGL ES es OpenGL Shading Language, también conocido como GLSL, y el lenguaje de sombreado oficial Direct3D es High Level Shader Language, también conocido como HLSL. Nvidia desarrolló Cg, un lenguaje de sombreado de terceros que genera sombreadores OpenGL y Direct3D; sin embargo, desde 2012 ha quedado obsoleto. Apple lanzó su propio lenguaje de sombreado llamado Metal Shading Language como parte del marco Metal.

Editores de sombreadores de GUI

Las plataformas modernas de desarrollo de videojuegos como Unity, Unreal Engine y Godot incluyen cada vez más editores basados en nodos que pueden crear sombreadores sin la necesidad de código real; en cambio, al usuario se le presenta un gráfico dirigido de nodos conectados que le permite dirigir varias texturas, mapas y funciones matemáticas a valores de salida como el color difuso, el color especular y la intensidad, rugosidad/metal, altura, normal, etc.. Luego, la compilación automática convierte el gráfico en un sombreador compilado real.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save