El primer competidor serio de las DirectX 12 ha llegado en forma de la versión 1.0 de la especificación de Vulkan. Su desarrollo está a cargo de Khronos Group, basándose en el trabajo previo de los controladores Mantle de AMD, un grupo también al cargo del desarrollo de las especificaciones de OpenGL y el estándar de programación paralela OpenCL.
Lo ha hecho con cierto retraso, pero lo ha hecho por todo lo alto, ya que la especificación llega junto a los controladores para tarjetas gráficas AMD y Nvidia, y el juego The Talos Principle siendo el primero en el mercado en ser compatible para esta nueva biblioteca gráfica, y disponible en Steam.
Qué es Vulkan
Vulkan es una biblioteca gráfica de bajo nivel para la creación de gráficos 3D y efectos, aunque también se llaman API o interfaz de programación, puesto que se trata de una especificación de cómo se tiene que comunicarse una aplicación con los controladores que implementan esta especificación.
El otro representante significativo de las bibliotecas de bajo nivel es DirectX 12, aunque en el mundillo de las consolas llevan siendo utilizadas desde hace décadas. El término bajo nivel hace referencia en programación a un lenguaje que carece prácticamente de abstracción, por lo que no es obvio a primera vista lo que hace cada línea de código salvo que sepas programar en ese lenguaje. El más representativo es el lenguaje ensamblador.
Bajo nivel contra alto nivel
Los lenguajes de alto nivel suelen representar un alto grado de abstracción, como por ejemplo C o Java, en los que para realizar un bucle se usan términos extraídos del habla, como las estructura Si ocurre algo entonces haces algo (clásico if...else). Por tanto resulta más sencillo codificar con ellos.
Llevándolo al terreno de las bibliotecas gráficas, que son programación al fin y al cabo pero con una sintaxis especial, las bibliotecas de alto nivel toman el control de la gestión de diversos recursos del sistema, mejoran la abstracción durante la programación, y el desarrollador se puede centrar en lo que realmente le importa que es el movimiento de los personajes, creación de escenas o efectos.
Sin embargo, las bibliotecas de bajo nivel permiten codificar a algo más fácilmente entendible y rápido de ejecutar por las GPU, ceden al programador el control de lo que ocurre en su interior, y por tanto es más fácil crear desarrollos pobres o que tomen mucho más tiempo en crearse si no se tiene la suficiente experiencia con ellas.
Las mejoras de Vulkan
Khronos Group recibió hace algo menos de dos años un gran regalo por parte de AMD cuando la compañía le cedió todo el trabajo realizado hasta la fecha con los controladores Mantle de bajo nivel. Pero ese sólo fue el comienzo de todo, puesto que Khronos Group tenía que asegurarse de que la especificación de Vulkan sería compatible con cualquier plataforma y arquitectura.
Vulkan se mantendrá como la biblioteca gráfica multiplataforma de bajo nivel, mientras que OpenGL será la biblioteca gráfica de alto nivel. Entre otras ventajas (a costa de esfuerzo de desarrollo), Vulkan permite optimizar las cabeceras de las solicitudes a la API para la generación de gráficos, eliminación de las capas no esenciales en desarrollos finales (como las de validación y depuración), una mejor gestión del procesamiento paralelo en las tarjetas gráficas, y reduciendo las necesidades de procesamiento de CPU.
También simplifica el desarrollo de los shaders o sombreadores, encargados de crear efectos especiales y transformaciones en los juegos, son el elemento diferenciador y realmente el más complejo en un videojuego. Gestionan elementos como humo, fuego o sombras, que es en realidad lo que dota a los juegos actuales de una mayor calidad y profundidad gráfica. Además, SPIR-V es un formato de binarios que simplifican en parte desarrollar sombreadores para Vulkan con otros lenguajes en un formato precompilado.
Se ha distribuido a la vez el software de desarrollo (SDK) llamado LunarG para que los programadores puedan ir probando la API en su plataforma preferida, y está disponible para Linux y Windows gracias al apoyo de Valve, y en breve debería estar disponible en Android. En Android dependerá de Google. Su ventaja es que es de código abierto, con documentación, ejemplos y herramientas de depuración, capas de validación y otras utilidades que simplifican la creación de juegos.
Para qué sistemas operativos está disponible
Como biblioteca multiplataforma, Vulkan cuenta un amplio apoyo en la industria de los videojuegos. Uno de los apoyos más fervientes procede de Gabe Newell, el dueño de Valve y Steam, y por tanto es una pieza clave en el futuro éxito de Steam OS puesto que con los actuales controladores OpenGL no es capaz de aproximarse en muchos casos al rendimiento de las DirectX 11.
Cada sistema operativo necesita a su vez una especificación de Vulkan diferente debido a cómo interactúan los diversos componentes del propio sistema operativo, como por ejemplo con el kernel o núcleo del sistema. Si bien para Windows y Linux el desarrollo de la especificación depende de Khronos Group, con Valve contribuyendo porque le interesa ese desarrollo para Steam OS, en el caso de Android al ser una plataforma cuyos derechos de desarrollo pertenecen a Google, será esta la que libere la especificación.
En estos casos, cada especificación puede tener limitaciones en cuanto a las características permitidas. Por ejemplo, por limitaciones del propio modelo de vídeo de Android podría no ser compatible, o Google decidir que ciertas tareas que consuman más recursos no son apropiadas en Android. La especificación de Google y las características compatibles serán conocidas más adelante.
Las buenas noticias es que Vulkan estará disponible para las versiones anteriores de Windows, y no de manera exclusiva para Windows 10 como ocurre con las DirectX 12. Están disponibles para Nvidia y AMD.
El caso Apple
Aquí es donde llegamos a Apple. Puesto que la compañía de la manzana lleva años desarrollando su propia API de bajo nivel llamada Metal, incluida actualmente en OS X e iOS, Apple se retiró del desarrollo de Vulkan para centrarse en Metal. Por tanto, y puesto que los controladores gráficos para OS X depende de Apple, no parece que vaya a haber compatibilidad para Vulkan en el futuro próximo.
Pero Metal no incluye las mejoras en el modelo de los sombreadores que sí incluyen Vulkan y DirectX 12, por lo que su rendimiento es inferior a las otras bibliotecas de bajo nivel. Al menos en la versión actual, pero es algo que Apple podría cambiar simplemente actualizando la especificación de Metal en próximas versiones de iOS y OS X.
Tarjetas gráficas compatibles
El desarrollo de Vulkan se inició con la meta autoimpuesta de que el hardware que pudiera usar OpenGL fuera compatible con la nueva API. Eso implica que hay una gran cantidad de GPU compatibles, aunque debido a que cada compañía tiene que desarrollar los controladores (la implementación de la especificación de Vulkan) para sus tarjetas gráficas, la realidad es un poco distinta.
Por ejemplo, AMD proporciona compatibilidad a Vulkan en las tarjetas gráficas con chip compatible con Graphics Core Next (GCN) 1.0 o superior. Eso son todas las tarjetas gráficas de hace unos cuatro años a esta parte, que tampoco está mal, e incluyen las Radeon HD 7700 en adelante. Nvidia da compatibilidad a Vulkan en las tarjetas gráficas de arquitectura Kepler y Maxwell (serie 600 en adelante). Que se sepa, Intel da compatibilidad por ahora a Vulkan en las gráficas integradas en procesadores Broadwell (Iris Pro 6200, por ejemplo) y posteriores.
En el apartado de las GPU de dispositivos móviles, la compatibilidad dependerá en gran medida de los fabricantes. ARM tiene su controlador para Linux en desarrollo, así como Imagination Technologies (las GPU PowerVR usadas en los chips de Apple y otros), así como Qualcomm. Pero por el momento no se sabe qué chips concretos serán compatibles porque depende de la especificación que libere Google.
Todos los motores gráficos importantes están siendo adaptados para hacer uso de Vulkan. Eso incluye a empresas y los productos de Oxide, Lucasfilm, Blizzard, Electronic Arts, Unity, Epic Games o Valve. Un amplio apoyo que tendrá sus recompensas a medio plazo, puesto que la creación de videojuegos AAA con una API de bajo nivel no es sencillo ni rápido, y menos cuando la especificación no ha estado disponible hasta ahora.
Los problemas de Vulkan
El principal problema de Vulkan en Windows 10 para competir de cara a cara con DirectX 12 en realidad es su carácter de sistema multiplataforma. Debido a ello han tenido que prescindir de usar WDDM 2.0 (Windows Display Driver Model, o controlador de vídeo de Windows) que fue diseñado por Microsoft para mejorar el rendimiento de los controladores gráficos.
Por tanto es difícil que, hagan lo que hagan, Vulkan vaya a tener mejor rendimiento en Windows 10 que las DirectX 12, por no decir imposible. El carácter multiplataforma de cualquier arquitectura de este tipo (como ocurre con Java) evita que se saquen partido a los atajos para mejorar el rendimiento que se toman en ciertos sistemas operativos.
Puesto en contexto, las tarjetas gráficas con DirectX 12 tienen una comunicación más directa con el sistema operativo a través de WDDM, mientras que Vulkan tendrá que tomar rutas alternativas de comunicación que impactarán en su rendimiento.
Otro problema que tienen es que los controladores van a tardar en optimizarse. AMD, Nvidia e Intel avisan que son controladores en beta, con todo lo que ello implica, y en las pruebas de The Talos Principle realizadas con Vulkan dan un rendimiento inferior al de DirectX 11, pero aun así notablemente superiores a OpenGL 11.
Otros juegos con Vulkan
Los juegos que utilizan el motor Source 2 de Valve serán actualizados a no demasiado tardar puesto que Valve está muy interesada en el éxito de Vulkan para Steam OS. Eso incluye solo a DotA 2, aunque Counter-Strike: Global Offensive también podría ser actualizado.
Debido a queda todavía mucho trabajo por realizar por parte de los desarrolladores de los drivers, es más que probable que no haya grandes lanzamientos de juegos usando Vulkan hasta el próximo año. Algo similar a lo que ha ocurrido con las DirectX 12, que es ahora cuando va a haber juegos que las utilicen.
Trasparencias de presentación
Fuente: Khronos Group. Vía: AnandTech.