El grupo Khronos, quien mantiene la API gráfica Vulkan, la cual es sucesora de OpenGL. Acaba de terminar las extensiones oficiales para el Ray Tracing, por lo que por fin tengamos una API completamente abierta y no asociada a una plataforma o un hardware concreto. ¿Pero va a cambiar la situación realmente o se va a quedar en una anécdota?
La API Vulkan es en estos momentos la API gráfica más abierta de todas, por no decir que es la única de su naturaleza en el mercado. Mientras que los diferentes fabricantes tienen cada uno su propia API asociada a su hardware o su sistema operativo, Vulkan es completamente agnóstica en ambas partes y en teoría se puede utilizar en cualquier plataforma. ¿El problema? Fuera del mundo del PC y de los sistemas operativos de Google, el resto llevan tiempo bloqueando el uso de Vulkan en sus sistemas.
El trazado de rayos ha llegado oficialmente a Vulkan
Vulkan es una API que se basa en una librería principal que se va extendiendo en funcionalidad con el tiempo, pero en vez de hacerlo con nuevas versiones completas lo hace a través de extensiones o librerías suplementarias:
- Las extensiones oficiales que mantiene el Khronos Group y cuya funcionalidad no puede ser reemplazada por las extensiones de terceros. Si una nueva característica llega a la API oficial entonces todas las extensiones de terceros que realizaban esa misma característica quedan desfasadas.
- Las extensiones de terceros para dar soporte a características del hardware gráfico que no tienen soporte de manera oficial.
Hace ya casi un par de años, NVIDIA creo que extensión de Vulkan para sus tarjetas RTX 2000, mientras que el grupo Khronos, que son los que mantienen la librería oficial, empezaron a trabajar en la implementación del Ray Tracing en la librería oficial de Vulkan desde el pasado mes de marzo:
El motivo por el cual Khronos ha tardado tanto en empezar la implementación del Ray Tracing en Vulkan es muy simple, hasta el pasado mes de marzo que fue cuando AMD confirmo Ray Tracing en RDNA 2 que el grupo Khronos no pudo plantearse una versión completamente agnóstica de plataforma, ya que hasta ese momento el Ray Tracing era cosa solo de NVIDIA.
Vulkan RT no difiere en casi nada de DirectX Ray Tracing
De la misma manera que Direct3D y OpenGL hacen uso del mismo pipeline para renderizar los gráficos, nos encontramos con que DXR y Vulkan con las extensiones oficiales para Ray Tracing funcionan exactamente de la misma manera, pero con una serie de diferencias en lo particular.
Aparte del pipeline, la parte en la que se parecen el DXR y el Vulkan RT es en los Ray Queries, una habilidad disponible también DXR 1.1 que permite invocar la unidad de intersección no para atravesar la estructura de datos espacial para la aceleración, el BVH, sino para realizar una simple petición a un punto concreto de esa estructura y por tanto sin atravesar el árbol BVH.
En cuanto al elemento diferencial lo encontramos en la construcción de las propias estructuras de datos espaciales aceleración, Vulkan al contrario de DirectX permite el uso de la CPU para construirlas a partir de la información de la geometría de la escena de la GPU. Esta habilidad pide que la CPU tenga acceso a la VRAM.
¿Qué librerías componen la extensión oficial para Ray Tracing en Vulkan?
En cuanto a la librería principal sus extensiones son las siguientes:
- VK_KHR_acceleration_structure
- VK_KHR_ray_tracing_pipeline
- VK_KHR_ray_query
- VK_KHR_pipeline_library
- VK_KHR_deferred_host_operations
Las extensiones a SPIR-V añadidas son:
- SPV_KHR_ray_tracing
- SPV_KHR_ray_query
Y en cuanto al GLSL nos encontramos con las siguientes extensiones:
- GLSL_EXT_ray_tracing
- GLSL_EXT_ray_query
- GLSL_EXT_ray_flags_primitive_culling
Todas estas son extensiones oficiales a la API Vulkan, por lo que ya no será necesario crear extensiones de terceros para darle soporte al trazado de rayos en Vulkan.