Un lenguaje de sombreado es un lenguaje de programación gráfica diseñado para programar efectos de sombreado en la unidad de procesamiento gráfico (a diferencia de otros lenguajes de programación, que envían instrucciones a la unidad central de procesamiento ). Por ello, los lenguajes de sombreado suelen ser de bajo nivel y generalmente utilizan tipos de datos especiales como "vector", " matriz ", "color" y " normal ".
Renderizado sin conexión
Los lenguajes de sombreado utilizados en la renderización offline suelen ser muy similares al lenguaje natural , por lo que no se requieren conocimientos especiales de programación. La renderización offline busca producir imágenes de máxima calidad, aunque esto implica un mayor tiempo y capacidad de procesamiento que la renderización en tiempo real.
Lenguaje de sombreado de RenderMan
El lenguaje de sombreado RenderMan [ 1 ] (RSL o SL, para abreviar), definido en la especificación de la interfaz RenderMan , es un lenguaje de sombreado común para renderizado con calidad de producción. También es uno de los primeros lenguajes de sombreado que se implementaron.
Define seis tipos principales de sombreadores:
- Los sombreadores de fuentes de luz calculan el color de la luz emitida desde un punto de una fuente de luz a un punto de una superficie objetivo.
- Los sombreadores de superficie modelan el color y la posición de los puntos en la superficie de un objeto, basándose en la luz incidente y las propiedades físicas del objeto.
- Los sombreadores de desplazamiento manipulan la geometría de la superficie independientemente del color.
- Los sombreadores de deformación transforman todo el espacio. Solo una implementación de RenderMan, el renderizador AIR de SiTex Graphics, implementó este tipo de sombreador, que solo admite una única transformación lineal aplicada al espacio.
- Los sombreadores de volumen manipulan el color de la luz a medida que pasa a través de un volumen. Crean efectos como la niebla .
- Los sombreadores de imagen describen una transformación de color a valores de píxeles finales. Esto es similar a un filtro de imagen , con la diferencia de que el sombreador de imagen opera sobre datos antes de la cuantización . Dichos datos tienen un rango dinámico y una resolución de color mayores que los que puede mostrar un dispositivo de salida típico.
Lenguaje de sombreado VEX de Houdini
El lenguaje de sombreado Houdini VEX (Vector Expressions) (a menudo abreviado como "VEX") se basa en gran medida en RenderMan. Sin embargo, su integración en un paquete 3D completo permite que el creador del sombreador acceda a la información interna del mismo, una característica que no suele estar disponible en un contexto de renderizado. Las diferencias entre RSL y VEX son principalmente sintácticas, además de las diferencias en los nombres de varias operaciones de sombreado . [ 2 ]
Lenguaje de sombreado de helado
El lenguaje de sombreado de Gelato , [ 3 ] al igual que VEX de Houdini , está inspirado en RenderMan. Las diferencias entre el lenguaje de sombreado de Gelato y RSL son principalmente sintácticas: Gelato usa punto y coma en lugar de comas para separar los argumentos en las definiciones de funciones y algunas operaciones de sombreado tienen nombres y parámetros diferentes.
Lenguaje de sombreado abierto
El Open Shading Language (OSL) fue desarrollado por Sony Pictures Imageworks para su uso en Autodesk Arnold Renderer. También lo utiliza Cycles, el motor de renderizado de Blender . Los sombreadores de superficie y volumen de OSL definen cómo las superficies o los volúmenes dispersan la luz, lo que permite el muestreo de importancia; por lo tanto, es ideal para renderizadores basados en la física que admiten el trazado de rayos y la iluminación global .
Renderizado en tiempo real
Los lenguajes de sombreado para renderizado en tiempo real están ahora muy extendidos. Proporcionan una mayor abstracción del hardware y un modelo de programación más flexible que los paradigmas anteriores, que codificaban de forma rígida las ecuaciones de transformación y sombreado. Ofrecen mayor control y contenido más rico con menor sobrecarga.
Los sombreadores diseñados para ejecutarse directamente en la GPU se volvieron útiles para el procesamiento general de alto rendimiento debido a su modelo de programación de flujo ; esto llevó al desarrollo de sombreadores de cómputo que se ejecutan en hardware similar (ver también: GPGPU ).
Históricamente, unos pocos idiomas de este tipo dominaron el mercado; se describen a continuación.
Lenguaje ensamblador ARB
El OpenGL Architecture Review Board estableció el lenguaje ensamblador ARB en 2002 como un conjunto de instrucciones de bajo nivel estándar para procesadores gráficos programables. [ 4 ]
Los lenguajes de sombreado de alto nivel de OpenGL suelen compilarse a lenguaje ensamblador ARB para su carga y ejecución. A diferencia de estos lenguajes, el ensamblador ARB no admite el flujo de control ni las bifurcaciones. Sin embargo, se sigue utilizando cuando se requiere portabilidad entre diferentes GPU.
lenguaje de sombreado OpenGL
También conocido como GLSL o glslang , este lenguaje de sombreado estandarizado está diseñado para usarse con OpenGL . [ 5 ]
El lenguaje unifica el procesamiento de vértices y fragmentos en un único conjunto de instrucciones, permitiendo bucles y bifurcaciones condicionales . GLSL fue precedido por el lenguaje ensamblador ARB . [ 6 ]
lenguaje de programación Cg
El lenguaje Cg , desarrollado por Nvidia , [ 7 ] fue diseñado para una integración fácil y eficiente en la cadena de producción. Ofrece independencia de API y viene con muchas herramientas gratuitas.para mejorar la gestión de activos. El desarrollo de Cg se detuvo en 2012 y el lenguaje ahora está obsoleto.
Lenguaje ensamblador para sombreadores de DirectX
El lenguaje ensamblador de sombreadores en Direct3D 8 y 9 es el lenguaje de programación principal para los sombreadores de vértices y píxeles en Shader Model 1.0/1.1, 2.0 y 3.0. Es una representación directa del código de bytes intermedio del sombreador que se pasa al controlador gráfico para su ejecución.
El lenguaje ensamblador de sombreadores no se puede utilizar directamente para programar Shader Model 4.0, 4.1, 5.0 y 5.1 unificados, aunque conserva su función como representación del código de bytes intermedio para fines de depuración. [ 8 ]
Lenguaje de sombreado de alto nivel de DirectX
El lenguaje de sombreado de alto nivel (HLSL) es un lenguaje de sombreado estilo C para DirectX 9 y versiones posteriores, así como para consolas de videojuegos Xbox. Está relacionado con Cg de Nvidia, pero solo es compatible con DirectX y Xbox. Los programas HLSL se compilan en código de bytes equivalente al lenguaje ensamblador de sombreado de DirectX.
HLSL se introdujo como una alternativa opcional al lenguaje ensamblador de sombreadores en Direct3D 9, pero se convirtió en un requisito en Direct3D 10 y versiones posteriores, donde el lenguaje ensamblador de sombreadores está obsoleto.
Adobe Pixel Bender y lenguaje ensamblador de Adobe Graphics
Adobe Systems añadió Pixel Bender como parte de la API de Adobe Flash 10. Pixel Bender solo podía procesar datos de píxeles, pero no de vértices 3D. Flash 11 introdujo una API 3D completamente nueva llamada Stage3D , que utiliza su propio lenguaje de sombreado llamado Adobe Graphics Assembly Language (AGAL), que ofrece compatibilidad total con la aceleración 3D. [ 9 ] [ 10 ] La aceleración por GPU para Pixel Bender se eliminó en Flash 11.8. [ 11 ] [ 12 ]
AGAL es un lenguaje de sombreado de bajo nivel pero independiente de la plataforma, que se puede compilar, por ejemplo, al lenguaje ensamblador ARB o GLSL .
Lenguaje de sombreado de PlayStation
Sony anunció PlayStation Shader Language (PSSL) como un lenguaje de sombreado similar a Cg/HLSL, pero específico para PlayStation 4. Se dice que PSSL es en gran medida compatible con el lenguaje de sombreado HLSL de DirectX 12, pero con características adicionales para las plataformas PS4 y PS5. [ 13 ]
Lenguaje de sombreado metálico
Apple ha creado una API gráfica de bajo nivel , llamada Metal , que se ejecuta en la mayoría de los Mac fabricados desde 2012, iPhones desde el 5S y iPads desde el iPad Air . Metal tiene su propio lenguaje de sombreado llamado Metal Shading Language (MSL), que se basa en C++14 y se implementa usando clang y LLVM . MSL unifica el procesamiento de vértices, fragmentos y cómputo. [ 14 ]
Lenguaje de sombreado WebGPU
El lenguaje de sombreado WebGPU (WGSL) es el lenguaje de sombreado para WebGPU . Es decir, una aplicación que utiliza la API de WebGPU utiliza WGSL para expresar los programas, conocidos como sombreadores, que se ejecutan en la GPU. [ 15 ]
Traducción
Para portar sombreadores de un lenguaje de sombreado a otro, se utilizan algunos enfoques: [ 16 ]
- Defina una interfaz común. Por ejemplo, Cg/HLSL, GLSL y MSL implementan macros de preprocesador de C , por lo que es posible encapsular todas las operaciones en una interfaz común. Source 2 de Valve y FXAA 3.11 de NVIDIA hacen esto.
- Traducir un idioma a otro. Por ejemplo, el código de bytes de DirectX se puede convertir parcialmente a GLSL mediante HLSLcc, y existen varias herramientas para convertir GLSL a HLSL, como ANGLE y HLSL2GLSL .
- Defina un lenguaje intermedio. SPIR-V está diseñado parcialmente para este propósito. Puede generarse a partir de HLSL o GLSL y descompilarse en HLSL, GLSL o MSL. [ 17 ]
Notas
- ^ Los lenguajes de sombreado de vértices anteriores (sin un orden en particular) para OpenGL incluyenEXT_vertex_shader,NV_vertex_program, el mencionadoARB_vertex_programArchivadoel 26/12/2007 enWayback Machine,NV_vertex_program2yNV_vertex_program3.
- ^ Para el sombreado de fragmentos, nvparsees posiblemente el primer lenguaje de sombreado que presenta una abstracción de alto nivel basada enNV_register_combiners,NV_register_combiners2para matemáticas de píxeles yNV_texture_shader,NV_texture_shader2yNV_texture_shader3para búsquedas de texturas.ATI_fragment_shaderni siquiera proporcionaba una función de análisis "orientada a cadenas" (aunque posteriormente fue añadida porATI_text_fragment_shader).ARB_fragment_programArchivadoel 2 de enero de 2008 enWayback Machine, ha tenido mucho éxito.NV_fragment_programyNV_fragment_program2son en realidad similares, aunque este último proporciona una funcionalidad mucho más avanzada con respecto a los demás.
- ^ Compositor de efectos desde la página principal de NVIDIA
- Rudy Cortes y Saty Raghavachary : The RenderMan Shading Language Guide , Course Technology PTR, 1.ª edición (27 de diciembre de 2007), ISBN 1-59863-286-8
Referencias
- ↑ "The RISpec" . Pixar . 1986–2012. Archivado del original el 25 de julio de 2011. Recuperado el 9 de junio de 2012 .
- ↑ "Houdini" . Side FX . Side Effects Software Inc. Archivado del original el 22 de julio de 2008. Consultado el 9 de junio de 2012 .
- ↑ "NVIDIA Gelato 2.0 con Sorbetto" . NVIDIA Corporation. Archivado del original el 26 de abril de 2006. Consultado el 9 de junio de 2012 .
- ↑ "ARB_fragment_program" . Grupo Khronos . 8 de octubre de 2013.
- ↑ "Especificación de OpenGL 4.6 (Core)" (PDF) . Khronos Group . 5 de mayo de 2022. pág. 4.
- ↑ "Especificación del lenguaje de sombreado OpenGL 1.2" (PDF) . Khronos Group . 7 de septiembre de 2006.
- ↑ "Cg Toolkit" . Zona de desarrolladores de NVIDIA . NVIDIA Corporation. 2012. Consultado el 9 de junio de 2012 .
- ↑ "Referencia de sombreadores Asm" . learn.microsoft.com . 10 de diciembre de 2019.
- ↑ Joseph Labrecque (2011). Novedades de Adobe AIR 3. O'Reilly Media, Inc. págs. 17-26 . ISBN 978-1-4493-1108-7.
- ↑ Remi Arnaud (2011). "3D en un navegador web". En Eric Lengyel (ed.). Game Engine Gems 2. CRC Press. pp. 207–212 . ISBN 978-1-56881-437-7.
- ↑ "Stage3D" . scratch.mit.edu . Consultado el 5 de agosto de 2014 .
- ↑ "Adobe Flash Player 11.8 - Error 3591185" . Archivado del original el 22 de abril de 2014.
- ↑ Richard Stenson; Chris Ho. "PlayStation Shading Language para PS4" . GDC Europe 2013 .
- ↑ "Especificación del lenguaje de sombreado metálico" . 3.2. Apple. 6 de junio de 2024.
- ↑ "Lenguaje de sombreado WebGPU" . W3C. 22 de marzo de 2025.
- ^ Aras Pranckevičius (28 de marzo de 2014). "Sombreadores multiplataforma en 2014" . Aras Pranckevičius.
- ↑ "SPIR-V Toolchain" . LunarXchange . Archivado del original el 9 de julio de 2022.
- Clasificación de lenguajes de programación
- Lenguajes de sombreado