Tutoriales

DirectX 12 Vs Vulkan: La pelea por el mejor motor gráfico

claves y diferencias entre estos dos API de bajo nivel

Actualmente para el mundo del PC existen dos API gráficas de primer orden que manejan con autoridad el mercado. Por este motivo os traemos la comparativa DirectX 12 Vs Vulkan.

Ambas tienen una extensa historia detrás y toda una horda de defensores y detractores. Hoy veremos las diferencias, las claves de cada una e intentaremos ofrecer algo de luz sobre ellas.

API gráfico de bajo nivel y “Driver overhead”

API son las siglas de “aplicación programming interface” y es un conjunto de subrutinas que puede usar un desarrollador que incluye también protocolos de comunicación y utilidades que facilita el desarrollo de software. Las podemos encontrar para casi todo y es habitual que cada proveedor de servicios disponga de este tipo de ayudas para implantar sus sistemas de forma sencilla y accesible.

Las API de bajo nivel aprovechan mejor los recursos de la GPU, liberando de carga a la CPU, pero también son capaces de aprovechar mejor los procesadores de múltiples núcleos que tenemos en la actualidad.

Tanto DirectX 12 como Vulkan 1.1 son API orientadas al desarrollo de juegos y aplicaciones que requieran de la asistencia de motores gráficos modernos. A su vez son API soportadas por los controladores de los mas importantes diseñadores de chipsets gráficos y por tanto una forma rápida y económica de acceder a sus prestaciones sin necesidad de conocer el diseño de las mismas a muy bajo nivel.

Un API de bajo nivel, como estas, permite trabajar con el hardware con una capa muy ligera de interpretación lo que permite al desarrollador aprovechar mejor el hardware logrando mejores resultados a nivel de rendimiento y eficiencia permitiendo además liberar a otros subsistemas de carga adicional. En el mundo del PC, o de los teléfonos móviles supone menos dependencia de la CPU generalista del sistema.

directx 12 vs vulkan

Las dos API de las que hablaremos hoy se pueden considerar APIs de bajo nivel y ambos desarrollos se ha traducido en una cada vez menor dependencia de la CPU del sistema a la vez que se logran mejores resultados a nivel de rendimiento y acceso a funciones gráficas más avanzadas. Son dos API vivos que están recibiendo actualizaciones de forma anual para mantenerlas en línea con la que el publico general y los desarrolladores esperan.

Los API de bajo nivel tienen un efecto directo en otro concepto computacional que conocemos como “driver overhead” que es, en resumidas cuentas, los recursos secundarios que necesitamos para ejecutar cierto tipo de operaciones en una computadora. En el caso de los gráficos se refiere a los recursos extra que requiere la tarjeta gráfica para hacer su trabajo y en este caso es fundamentalmente tiempos de proceso de CPU central. Los API de bajo nivel que aquí describiremos reducen esta dependencia y de hecho la dependencia tiende a 0.

DirectX de Microsoft

DirectX surge como una necesidad para estandarizar diferentes subsistemas multimedia de Windows y es el substituto de WinG para Windows 3.1. Se adopta en Windows 95 como un paquete añadido y su segunda versión, DirectX 2.0, pasa a ser un componente fundamental de Windows 95 OSR2.

Dentro de DirectX encontramos múltiples API independientes como Direct3D, que es realmente el que nos ocupa, DirectDraw, DirectMusic, DirectPlay y DirectSound. DirectX fue una forma de nombrar los avances comunes en todos estos sub-API. Es un API para Windows pero que también se usa para el desarrollo de juegos en sus consolas Xbox por lo que podemos considerarlo un API Multiplataforma pero no libre, como es el caso de Vulkan.

DirectX 12, su ultima versión, lleva con nosotros desde 2014 y no se ha estado quieto y hace pocos meses recibió mejoras importantes como la subrutina Direct RayTracing (DXR) que se incluyó en la versión 1809 october update de Windows 10.

Los API de bajo nivel como DirectX 12 tienen una ventaja fundamental que es la reducción del “driver overhead”. Ahora los programadores están habilitados a diseñar como la GPU se comportará en sus programas y pueden gestionar mejor los recursos de la GPU sobre todo aprovechando la paralelización de proceso.  Esto incluye un mejor soporte de múltiples GPU en un sistema e incluso aunque estas no sean del mismo fabricante.

directx 12 vs vulkan

Pueden ejecutar diferentes tipos de operaciones, normalmente “integer” o “coma flotante” aprovechando las capacidades de las gráficas compatibles y también la división de operaciones complejas en más simples procesándolas en paralelo en esos buses mas grandes. Un buen ejemplo es como AMD o Nvidia, ahora, pueden procesar operaciones de 16-Bit en sus buses de 32-Bit mejorando la eficiencia de sus gráficas de forma sustancial.

Este API ha acercado la eficiencia de uso de una GPU de consola, donde los programadores conocen perfectamente el hardware disponible, hasta el heterogéneo ecosistema que forma un PC con infinidad de posibilidades diferentes de hardware.

Actualmente DirectX 12 esta disponible, por sorpresa, para Windows 7 y Windows 10 y aunque no es directamente compatible con Xbox One, lo cierto es que se usa prácticamente al 90% de su funcionalidad para PC, las diferencias son mínimas y eso ha permitido a los desarrolladores rápidas adaptaciones de sus juegos de PC para Xbox One y viceversa.

Vulkan de Khronos

Vulkan es la evolución a API de bajo nivel de OpenGL y esta soportado por la corporación Khronos. En el mundo del PC tienen un papel secundario sobre DirectX 12 pero sus diferentes adaptaciones a diferentes plataformas, como Android, le han convertido en un referente en gráficos para movilidad. Es compatible también con Linux siendo la gran alternativa de juego en sistemas libres.

Su gran virtud es su gran capacidad de proceso en paralelo siendo tremendamente eficiente en CPU y GPUs modernas logrando bajos usos de lo primero y un gran aprovechamiento del hardware de lo segundo. Esta especialmente pensado para aprovechar procesadores de múltiples núcleos logrando una excelente distribución de carga en este tipo de procesadores, de hecho, es tanto más eficiente por cuantos más núcleos podamos aportarle.

La historia de Vulkan data de un año después de DirectX 12 y Khronos, que es una compañía sin animo de lucro, lo mantiene con tanta o más frecuencia que Microsoft hace con su propio API. Se fundamenta en el API Mantle que AMD desarrollo para su arquitectura GCN y que era otro API de bajo nivel para un reducido “driver overhead”. AMD dono sus desarrollos a Khronos y estos son los cimientos de uno de los mejores APIs gráficos del mercado.

Además de una paralelización superior este diseño permite también eliminar la precompilación de operaciones de sombreado en la GPU, pudiendo tener más efectos y en pantalla con mayor velocidad de carga, además de un ajuste mas detallado de como el hardware procesa las operaciones o como accedemos al frame buffer disponible. Es seguramente el API para PC que mas se acerca al propio hardware, incluso mejor que DirectX 12.

directx 12 vs vulkan
Vulkan introduce también las mejoras de un API de bajo nivel en Android y otras plataformas.

Su última versión, Vulkan 1.1, presentada a finales de 2018 añade mejoras importantes como el soporte de HLSL, que es la alternativa de DirectX 12 a la gestión de operaciones de shaders sin necesidad de precompilación, mejor compatibilidad con DirectX 12 (a sus muchas subrutinas a parte de los gráficos), soporte explicito para sistemas Multi-GPU con independencia del fabricante y, como no, soporte para RayTracing.

Puntos fuertes y débiles de DirectX 12 vs Vulkan

Además de las prestaciones comunes ya descritas, como el mejor aprovechamiento del hardware, más control del mismo y mejor aprovechamiento de la paralelización tanto de GPU como de CPU estos dos API también añaden la posibilidad de realizar operaciones de computo general con los chips gráficos con los que son compatibles. Esto habilita a motores gráficos compatibles, varias generaciones ya, a poder realizar operaciones matemáticas complejas que pueden ser aprovechadas por programas de toda índole, incluidos aquellos sin componentes gráficos.

En juegos también se pueden aprovechar para operaciones secundarias cada vez mas importantes como el cálculo de física realista, inteligencia artificial, efectos de sonido posicional, etc.

Ambos API tienen un gran soporte por los grandes de los gráficos, tanto AMD como Nvidia se afanan para ofrecer a estos API los controladores adecuados para lograr tanto ofrecer a sus usuarios las ultimas mejoras como afianzar el rendimiento y la estabilidad de los juegos que usan uno u otro API.

El “driver overhead” de ambos es muy reducido, de hecho, como veréis en nuestras pruebas apenas hay diferencias entre uno y otro, lo que también es un signo de la optimización importante de los controladores de ambos fabricantes.

Hemos limitado los el framerate a 120FPS para una demostracion de Driver Overhead. En Dota 2 el consumo de CPU se reduce de forma sustancial con los mismos FPS.

La única diferencia mas evidente es que Vulkan tiene algo menos de dependencia de la CPU, con menor consumo medio y que también es mucho mas abierto a diferentes plataformas, incluida Windows y Linux y su homogenización con OpenGL ES, que es su versión de móviles, está en camino unificando aun mas las plataformas sobre las que se mueve.

DirectX 12 tiene a su favor la gran aceptación por parte de los desarrolladores, que parecen encontrar en este API el ecosistema perfecto para reducir sus costes ya que incluso tiene una gran integración en frameworks tan extendidos como .NET Framework donde se integra a las mil maravillas sin apenas perdida de rendimiento.

Diferencias de rendimiento en juegos con doble API

Como el movimiento se demuestra andando hemos realizado algunas pruebas de rendimiento en diferentes juegos y benchmarks que tienen capacidad para usar estos dos API para su ejecución.

3DMark Driver Overhead Test. Resultados en millones de peticiones, más es mejor.
Ashes of the singulity. Resultados en FPS, más es mejor.
Strange Brigade. Resultados en FPS, más es mejor.

Como veis, los resultados son parejos y vemos diferencias entre programas a favor y en contra de uno y de otro. Esto nos deja con la incógnita sobre cual es mejor y la respuesta es clara, depende del programa y de como su desarrollador sepa o quiera aprovechar sus prestaciones. Lo que nos queda es pensar que en cada juego los desarrolladores usaran precisamente el API que mejor aproveche las prestaciones de nuestra gráfica aunque esta claro que ambas opciones parecen mas que competentes. ¿Qué os ha parecido nuestro artículo sobre Directx 12 vs Vulkan? ¡Queremos saber vuestra opinión!

D.Romero

"Cacharreando" profesionalmente desde hace mas de 20 años, amante del hardware y profesional del desarrollo. Me apasiona cualquier cosa relacionada con la informática, en todos sus ámbitos.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en [email protected]
Botón volver arriba