La biblioteca gráfica DirectX 12 todavía no ha terminado de asentarse, después de que se anunciara en 2014 y llegara a mediados de 2015 junto a Windows 10. Estamos en 2018, y el número de juegos que la implementan son bastante pocos, y muchos de los que lo implementan no aportan diferencias de rendimiento significativas entre DirectX 11 y DirectX 12. Pero el desarrollo de esta biblioteca gráfica prosigue, y para diferenciarse de DX11 nada mejor que añadir el trazado de rayos o ray tracing a ella como una nueva API disponible a los desarrolladores.

Las técnicas de trazado de rayos permiten exactamente eso, y referirse a ello en inglés puede hacer que se pierda de vista su propósito: trazar una serie de rayos desde el observador e iluminación circundante hasta cada píxel de los objetos de la escena. El objetivo es establecer claramente aquellos objetos que son visibles para el observador en función de los rayos de luz, su nivel de sombreado en función de las fuentes de luz locales y cualquier otro rayo de luz indirecto que pueda afectar a su nivel de sombreado.

1024px-ray_trace_diagram.svg_575px.png
Henrik, licencia CC BY-SA 4.0

Las escenas renderizadas son más fieles a como se verían en el mundo real. Los algoritmos de trazado de rayos suelen tener un alto coste de computación, ya que se crea un rayo por cada píxel de la escena y por cada rayo reflejado, refractado, etc., en cada uno de ellos. De ahí que el renderizado en tiempo real con trazado de rayos fuera algo de ciencia ficción para los videojuegos, y se dejara para películas de animación que son prerrenderizadas.

Lo que añade la nueva API de Microsoft para el trazado de rayos es su generación en tiempo real, y por tanto la posibilidad de utilizarlo en todo tipo de videojuegos. Se hará combinándola con el proceso actual de rasterización de las escenas, menos fiable que el trazado de rayos, pero la mezcla aportará la rapidez de la rasterización con toques de mayor calidad de escenas gracias al trazado de rayos. La forma de hacerlo es exponiendo a través de DirectX 12 las capacidades especiales para este terreno que tienen las unidades gráficas actuales en vez de usar de manera genérica los sombreadores —por ejemplo, núcleos CUDA de Nvidia— para el trazado de rayos.

También se podrán crear de manera genérica a través de la cola de cómputo de DX12 —las otras dos son gráficos y copia— para las tarjetas gráficas que no dispongan de unidades gráficas especiales para el trazado de rayos, que actualmente se limita a las Volta de Nvidia. AMD se limitará a añadir compatibilidad a su controlador Radeon a través de la cola de cómputo, aunque es de esperar que sus próximas unidades gráficas (GPU) incluyan componentes específicos para el trazado de rayos. Aunque en el futuro lejano, en la industria de las GPU es probable que se mueva hacia el abandono de la rasterización de imágenes y abrace únicamente la generación mediante el trazado de rayos.

La calidad de las escenas generadas en tiempo real mediante el trazado de rayos lo podéis ver en la imagen de abajo. Hay gran cantidad de detalles de reflejos de superficies y sombras, y bastante mejores de las que se pueden crear actualmente. Estas técnicas quizás aparezcan en algún juego o programa puntual que lo implementen en 2018 o 2019, pero juegos que hagan un uso extensivo del trazado de rayos no se esperan hasta al menos 2020. DirectX 12 avanza lentamente, y esta técnica dependiente del hardware aún más.

seed-screenshot.jpg

Vía: AnandTech.