Ray Tracing: todo lo que debes saber de esta nueva revolución en los videojuegos

Sin duda tras la presentación de la nueva serie de tarjetas gráficas RTX de NVIDIA la palabra más de moda en el sector es Ray Tracing. Esta tecnología sin duda va a cambiar el mundo de los videojuegos pero muchos se estarán preguntando en que consiste y como va a ser esa revolución de la que hablamos.
¿Qué es Ray Tracing o trazado de rayos?
El Ray Tracing (RT a partir de ahora) es una técnica basada en un algoritmo que creó Arthur Appel denominado Ray Casting (1968) a través de algoritmos de determinación de superficies visibles.
Gracias a el se pueden renderizar gráficos 3D con modelos de iluminación complejos simulando el comportamiento físico de la luz. Hasta ahora este proceso no se podía realizar en tiempo real, por lo que tenía que ser procesado primero y renderizado más tarde para conseguir dicho comportamiento de la luz.
Este proceso de renderizado 3D convencional ha usado hasta ahora un proceso llamado rasterización, la cual usa objetos creados a partir de una malla de triángulos o polígonos para representar un modelo en 3D de un objeto. Este «rendering pipeline» luego convierte cada triángulo de los modelos 3D en píxeles en una pantalla 2D, para así poder luego procesarse o «sombrearse» antes de la visualización final en la pantalla.
Bien, volviendo al RT, este calcula el color de los píxeles al trazar la ruta que tomaría la luz si viajara desde el ojo del espectador a través de la escena virtual en 3D. A medida que atraviesa la escena, la luz puede reflejarse de un objeto a otro (causando reflejos), bloquearse con objetos (causando sombras) o atravesar objetos transparentes o semitransparentes (que provocan refracciones). Todas estas interacciones se combinan para producir el color final de un píxel que luego se muestra en la pantalla.
Si bien el trazado de rayos ha sido durante mucho tiempo «el futuro» o el santo grial de la representación informática, ahora vemos con la llegada de las GPU de consumo que tienen capacidad informática suficiente para realizar cargas de trabajo de rastreo de rayos en tiempo real. Se espera que muchos casos empleen procesadores híbridos que combinan la rasterización y el trazado de rayos, por lo que la integración estrecha con una API de renderización existente es muy importante.
Para más información sobre este procesamiento híbrido os remito al articulo que encontraréis debajo de este párrafo donde desarrollamos y desmenuzamos en más profundidad este tema.
Actualmente existen 3 APIs claramente diferenciadas por tres puntos de vista distintos a la hora de trabajar. Creo que es importante hacer hincapié en ellas, ya que los motores gráficos van a tener que usar una o varias (según el soporte del mismo) para poder trabajar adecuadamente.
Las APIs son: OPTIX (desarrollada por NVIDIA), DirectX Ray Tracing (DXR, desarrollado por Microsoft) y Vulkan (Khronos Group)
NVIDIA OPTIX
Hace 10 años OptiX presentó el modelo de sombreador programable para trazado de rayos (OptiX GPU Ray Tracing). NVIDIA ha continuado invirtiendo en hardware, software y algoritmos para acelerar ese modelo de programación en sus GPU y es ahora cuando la han presentado terminada junto con su serie RTX.
La API OptiX es un marco de aplicación que aprovecha la tecnología RTX para lograr un rendimiento óptimo de trazado de rayos en la GPU. Proporciona una tubería (pipeline) simple, recursiva y flexible para acelerar los algoritmos de trazado de rayos. Además, la API de postprocesamiento incluye un eliminador de ruido acelerado por AI , que también aprovecha la tecnología RTX.
Desde películas y juegos hasta diseño y visualización científica, OptiX ha conseguido ser implementado con éxito en una amplia gama de aplicaciones comerciales. Estas aplicaciones van desde la visualización de software hasta la visualización científica (incluidos los finalistas del Premio Gordon Bell), aplicaciones de defensa, síntesis de audio y mapas de luz de computación para juegos.
Características principales
- Tubería (pipeline) de trazado de rayos acelerada por GPU programable.
- Modelo de programación de sombreado de un solo rayo usando C ++.
- Optimizado para generaciones actuales y futuras de arquitecturas para las GPU NVIDIA.
- Escala de forma transparente en múltiples GPU.
- Combina automáticamente la memoria de la GPU sobre NVLink para escenas grandes.
- Representación acelerada de AI.
- Gratis para uso comercial.
Si queréis información más técnica os dejamos con un vídeo muy amplio donde NVIDIA trata de forma exclusiva todo lo relacionado con su API:
Microsoft DirectX Ray Tracing o DXR
La API DirectX Ray Tracing (DXR) de Microsoft amplía DirectX 12 para admitir el trazado de rayos. DXR integra completamente el trazado de rayos en DirectX, lo que permite a los desarrolladores integrar esta tecnología con técnicas tradicionales de rasterización y cálculo aportando cuatro nuevos conceptos para la API DX12:
- La estructura de aceleración es un objeto que representa un entorno 3D completo en un formato óptimo para el recorrido por la GPU. Representada como una jerarquía de dos niveles, la estructura permite el cruce de rayos optimizado por la GPU, así como la modificación eficiente por parte de la aplicación de objetos dinámicos.
- Un nuevo método de lista de comandos, DispatchRays, es el punto de partida para rastrear rayos en la escena. Así es como el juego realmente envía cargas de trabajo DXR a la GPU.
- Un conjunto de nuevos tipos de sombreado HLSL, incluidos ray-generation, closest-hit, any-hit, and miss shaders. Estos especifican lo que la carga de trabajo DXR realmente hace computacionalmente. Cuando se llama a DispatchRays, se ejecuta el sombreador de generación de rayos. Usando la nueva función intrínseca TraceRay en HLSL, el sombreador de generación de rayos hace que los rayos sean rastreados en la escena. Dependiendo de dónde entra el rayo en la escena, se puede invocar uno de varios sombreadores para acertar o fallar en el punto de intersección. Esto permite que un juego asigne a cada objeto su propio conjunto de sombreadores y texturas, lo que da como resultado un material único.
- El raytracing pipeline state, un compañero “en espíritu” para los objetos de estado de tuberías de Computación y Gráficos actuales, encapsula los sombreadores de trazado de rayos y otro estado relevante para las cargas de trabajo de trazado de rayos.
DXR no presenta un nuevo motor de GPU junto con los motores gráficos y de cómputo existentes de DX12. Esto es intencional: las cargas de trabajo DXR se pueden ejecutar en cualquiera de los motores existentes de DX12. La razón principal de esto es que, fundamentalmente, DXR es una carga de trabajo similar a un cálculo complejo común. No requiere un estado mucho más complejo, como modos de fusión de salida o diseños de vértices de entrada. Una razón secundaria, sin embargo, es que representar DXR como una carga de trabajo de tipo informático se alinea con lo que vemos como el futuro de los gráficos, es decir, que el hardware será cada vez más general y finalmente la mayoría de las unidades de función fija serán reemplazadas por código HLSL (High Level Shader Language o lenguaje de sombreado de alto nivel).
El diseño del estado de la pipeline de trazado de rayos ejemplifica este cambio a través de su nombre y diseño en la API. Con DX12, el enfoque tradicional habría sido crear un nuevo método CreateRaytracingPipelineState. En cambio, decidieron ir con un sistema mucho más genérico y flexible, el método CreateStateObject. Este está diseñado para ser adaptable, de modo que, además de Raytracing, eventualmente se puede usar para crear estados de pipelines de gráficos y cálculos, así como para cualquier diseño futuro.
Vulkan
Vulkan es una API multiplataforma para el desarrollo de aplicaciones con gráficos 3D. Fue anunciada por primera vez en la GDC de 2015 por el Khronos Group. Inicialmente, fue presentada por Khronos como «la iniciativa OpenGL de próxima generación», pero luego el nombre fue descartado, quedando Vulkan como definitivo.
Vulkan está basado en Mantle, otra API de AMD, cuyo código fue cedido a Khronos con la intención de generar un estándar abierto similar a OpenGL, pero de bajo nivel. A diferencia de la API de Microsoft, Vulkan puede funcionar en una amplia gama de plataformas, incluyendo Windows 7, Windows 8, Windows 10, Android y Linux.
NVIDIA está desarrollando una extensión de rastreo de rayos para la API de computación y gráficos multiplataforma de Vulkan. Estará disponible pronto según NVIDIA, ya que esta extensión permitirá a los desarrolladores de Vulkan acceder a toda la potencia de las gráficas RTX. NVIDIA también está contribuyendo con el diseño de esta extensión al grupo Khronos como un aporte para llevar potencialmente una capacidad de seguimiento de rayos entre proveedores al estándar Vulkan.
Entonces ¿Qué juegos soportarán Ray Tracing?
Es algo todavía por ver, de momento no hay ni siquiera un benchmark que de soporte completo al trazado de rayos y lo más cercano a saber una lista completa de futuros títulos es la que NVIDIA dejó ver:
Esto no significa que esos 21 juegos soporten Ray Tracing, sino que también pueden hacer uso de la inteligencia artificial.
De todos ellos algunos si han confirmado soporte como son: Asetto Corsa Competizione, Atomic Heart, Battlefield V, Control, Enlisted, Justice, JX3, Mechwarrior V: Mercenaries, Metro Exodus, Shadow of the Tomb Raider y Project DH.
El único problema de esta tecnología es el alto consumo de recursos, ya que parece que tendremos que usar unidades específicas para aumentarlo, tal y como ha diseñado NVIDIA su arquitectura Turing.
Visto lo visto muchos son escépticos con Vulkan y DXR, ya que NVIDIA ha demostrado empíricamente que sin dichas unidades (RT Cores) el rendimiento se ve mermado en demasía.
Para ver las mejoras de dicha tecnología y para finalizar este artículo que mejor que verla en acción en 3 de los principales títulos AAA que van a salir o han salido ya al mercado: