stringtranslate.com

sombreador

Un ejemplo de dos tipos de sombreadores: sombreado plano a la izquierda y sombreado Phong a la derecha. El sombreado Phong es una mejora del sombreado Gouraud y fue uno de los primeros modelos de sombreado por computadora desarrollado después del sombreador plano básico, mejorando en gran medida la apariencia de las superficies curvas en los renderizados. Los sombreadores se utilizan más comúnmente para producir áreas iluminadas y sombreadas en la renderización de modelos 3D .
Otro uso de los sombreadores es para efectos especiales, incluso en imágenes 2D (por ejemplo, una foto de una cámara web ). La imagen inalterada y sin sombrear está a la izquierda, y la misma imagen tiene un sombreado aplicado a la derecha. Este sombreador funciona reemplazando todas las áreas claras de la imagen con blanco y todas las áreas oscuras con una textura de colores brillantes.

En gráficos por computadora , un sombreador es un programa de computadora 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 también 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), [1] 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. [ cita necesaria ]

Los sombreadores se utilizan ampliamente en el posprocesamiento cinematográfico , imágenes generadas por computadora y videojuegos para producir una variedad de efectos. Más allá de los modelos de iluminación simples, 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; produciendo 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 efectos llamados "pantalla azul/ pantalla verde "), detección de bordes y movimiento , como así como efectos psicodélicos como los que se ven en la demoscene . [ se necesita aclaración ]

Historia

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

A medida que evolucionaron las unidades de procesamiento de gráficos , 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. [3] 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. [4]

La canalización de gráficos básica es la siguiente:

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 gran matriz de píxeles o " frame buffer ".

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 independientes 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 llamados texturas en el campo de la infografía. 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. [5] Los sombreadores de píxeles varían 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 el 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 sólo 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). [6] 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 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. [7] 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 . [8]

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 se 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 aumentar la muestra de cualquier malla arbitraria, mientras que otros permiten "sugerencias" en las mallas para dictar los vértices y aristas más característicos.

Sombreadores primitivos y de malla

Alrededor de 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. [9] [10]

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. [11] [12] 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. [13]

En 2020, AMD y Nvidia lanzaron las microarquitecturas RDNA 2 y Ampere , que admiten sombreado de malla a través de DirectX 12 Ultimate . [14] 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 fotogramas o el número de triángulos en una escena en un orden de magnitud. [15] Intel anunció que las GPU Intel Arc Alchemist que se enviarán en el primer trimestre de 2022 admitirán sombreadores de malla. [dieciséis]

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 , [17] 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 procesos de gráficos, por ejemplo, para etapas adicionales en animación o algoritmos de 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 en 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 es muy adecuado para el 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 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.

Ver también

Referencias

  1. ^ "LearnOpenGL - Sombreadores". aprenderopengl.com . Consultado el 12 de noviembre de 2019 .
  2. ^ "La especificación de la interfaz de RenderMan".
  3. ^ Lilly publicado, Paul (19 de mayo de 2009). "De Voodoo a GeForce: la impresionante historia de los gráficos 3D". Jugador de PC : a través de www.pcgamer.com.
  4. ^ "Actualización de ShaderWorks - Blog de DirectX". 13 de agosto de 2003.
  5. ^ "Tutorial GLSL: sombreador de fragmentos". 9 de junio de 2011.
  6. ^ "Tutorial GLSL: sombreador de vértices". 9 de junio de 2011.
  7. ^ Sombreador de geometría - OpenGL. Recuperado el 21 de diciembre de 2011.
  8. ^ "Etapas de canalización (Direct3D 10) (Windows)". msdn.microsoft.com . 6 de enero de 2021.
  9. ^ "Se revela Radeon RX Vega: AMD promete rendimiento en juegos 4K por $ 499 - Reseñas confiables". 31 de julio de 2017.
  10. ^ "Se levanta el telón de la arquitectura Vega de AMD". 5 de enero de 2017.
  11. ^ "Arquitectura NVIDIA Turing en profundidad". 14 de septiembre de 2018.
  12. ^ "Introducción a los sombreadores de malla de Turing". 17 de septiembre de 2018.
  13. ^ "Lanzamiento del controlador DirectX 12 Ultimate Game Ready; también incluye soporte para 9 nuevos monitores de juegos compatibles con G-SYNC".
  14. ^ "Anuncio de DirectX 12 Ultimate". Blog para desarrolladores de DirectX . 19 de marzo de 2020 . Consultado el 25 de mayo de 2021 .
  15. ^ "Iluminación realista en la justicia con sombreado de malla". Blog para desarrolladores de NVIDIA . 21 de mayo de 2021 . Consultado el 25 de mayo de 2021 .
  16. ^ Smith, Ryan. "Día de la Arquitectura Intel 2021: un adelanto de la arquitectura de GPU Xe-HPG". www.anandtech.com .
  17. ^ "Lanzamiento de la especificación final de Vulkan Ray Tracing". Blog. Grupo Khronos . 23 de noviembre de 2020 . Consultado el 22 de febrero de 2021 .

Otras lecturas

enlaces externos