DirectX e Vulkan: cosa sono e quali differenze hanno?
26 marzo 2021
1616757925000
Affrontiamo insieme la discussione su Vulkan e DirectX. Cosa sono? In cosa differiscono?
Quante volte avviando un gioco ci siamo ritrovati davanti alla scelta DirectX o Vulkan? Quante volte ci siamo detti “lasciami in pace, voglio solo giocare”? Cerchiamo di fare chiarezza sulla questione e cerchiamo di capire che cosa ci stia proponendo il programma.
#API
Vulkan e DirectX sono delle API (Application Programming Interface) grafiche, ovvero set di definizioni, protocolli e procedure attraverso i quali vengono realizzati ed integrati software applicativi. Esse consentono ad applicazioni, prodotti o servizi di comunicare con altri senza conoscerne l'implementazione e semplificando lo sviluppo.
Nel contesto grafico, piú nello specifico in quello videoludico, possiamo vedere le API come parte degli strumenti utilizzati dagli sviluppatori per costruire il videogioco e far sì che interagisca correttamente, passando per i driver, con l'hardware di riferimento.
Esaminiamo le due principali API grafiche sul mercato: DirectX e Vulkan.
#DirectX (DX)
DirectX, sviluppata da Microsoft, non è un’API grafica bensí una collezione di API. Esse sono pensate per la gestione di processi multimediali, nello specifico video e videogiochi, sulle piattaforme Microsoft.
#Composizione
DirectX, come detto, è composta da piú API:
- Direct3D (D3D): API di rendering 3D in tempo reale
- DXGI: Enumera gli adattatori e i monitor inoltre gestisce le catene di swap per Direct3D 10 e successive.
- Direct2D: API di grafica 2D
- DirectWrite: API per il rendering del testo
- DirectCompute: API per il calcolo generico su unità di elaborazione grafica
- DirectX Diagnostics (DxDiag): Uno strumento per diagnosticare e generare rapporti sui componenti relativi a DirectX, come i driver audio, video e di input
- XACT3: API audio di alto livello
- XAudio2: API audio di basso livello
- DirectX Raytracing (DXR): API di raytracing in tempo reale
- DirectStorage: API di I/O su file orientata alla GPU
- DirectML: API di apprendimento automatico e intelligenza artificiale accelerata dalle GPU
Le API il cui nome inizia con “Direct” sono state disegnate inizialmente per Windows.
Le API il cui nome inizia per “X” sono state disegnate inizialmente per Xbox.
Con DirectX 12 Ultimate le API per Windows e Xbox sono state unificate in un’unica collezione.
La stessa console di casa Microsoft prende il suo nome dalle DirectX, in quanto quella X sta ad indicare una console basata sulla tecnologia DirectX.
#Direct3D (D3D)
Direct3D è, ad oggi, il cuore pulsante della collezione. Si tratta dell’API piú famosa e utilizzata della collezione tant’è che non è raro vedere utilizzati, erroneamente, i termini “Direct3D” e “DirectX” in modo intercambiabile. D3D non è utilizzata unicamente nei videogiochi ma anche in ambito ingegneristico come, ad esempio, in software CAD\CAM.
Quest’API nasce per renderizzare grafica tridimensionale in contesti in cui le performance hanno molta importanza. Direct3D utilizza l’accelerazione hardware, ove disponibile, cosí da accelerare l’intera pipeline di rendering 3D o una parte di essa.
Permette inoltre l’emersione delle capacità grafiche avanzate dell'hardware grafico 3D, tra cui: Z-buffering, W-buffering, stencil buffering, anti-aliasing spaziale, alpha blending, color blending, mipmapping, texture blending, clipping, culling, effetti atmosferici, perspective-correct texture mapping, shader HLSL* programmabili ed effetti.
Durante lo sviluppo questa API è utilizzata con altre tecnologie della collezione DirectX e, attraverso opportune integrazioni, fornisce funzionalitá come video mapping, rendering 3D nei piani di sovrapposizione 2D e perfino sprites.
*HLSL (High Level Shader Language) è il linguaggio ad alto livello sviluppato da Microsoft per la scrittura degli shader da usare in DirectX, analogo di GLSL nelle librerie OpenGL.
#DirectX 12 (DX12)
DirectX 12 è la più recente versione di DirectX. Lanciata nel 2015 è stata aggiornata al DirectX 12 Ultimate nel Marzo 2020.
DX12 ha segnato una rivoluzione nel contesto DX, con questa collezione infatti è stata introdotta l’API Direct3D12 per la programmazione a basso livello, grazie alla quale è stato possibile ridurre l’overhead causato dai driver. Tutto ció si traduce in un miglioramento delle performance multi-threading ed in un decremento dell’utilizzo della CPU, questo avviene perché le istruzioni sono inviate alla GPU come una lista e tutte le informazioni ad essa necessarie sono quindi un unico package. La GPU è ora capace di calcolare ed eseguire queste istruzioni in un singolo processo evitando l’attesa d’informazioni aggiuntive dalla CPU. In DX11 queste istruzioni erano, invece, inviate una alla volta e processate sequenzialmente.
Altra feature introdotta con DX12 é stata il supporto multi-GPU su un unico sistema, precedentemente questo era possibile grazie a “NVIDIA SLI” o "AMD CrossFireX” e doveva quindi essere implementato direttamente dal produttore delle schede.
Nel 2018, viene introdotta una nuova API: DirectX RayTracing (DXR). Questa ha reso possibile l’utilizzo della tecnologia ray tracing in tempo reale su hardware che la supporta. Con l’aggiornamento a DX12 Ultimate sono state introdotte le API DXR 1.1 e il Variable Rate Shading, il quale permette agli sviluppatori il controllo sul livello di dettaglio dell’ombreggiatura.
#Compatibilitá hardware
API come Direct3D e DirectSound necessitano dell’interazione con l’hardware e ciò avviene attraverso i driver. I produttori devono scrivere driver compatibili per una particolare versione di DX e testare ogni componente affinché sia DirectX compatibile.
#Vulkan
Le API Vulkan sono state annunciate nel 2015 dal Khronos Group e rilasciate nel 2016.
Nate per succedere le API OpenGL, inizialmente si dovevano chiamare “OpenGL next”, si discostano da queste sia per l’implementazione che per il nome che ne vuole sottolineare la discontinuitá e l’innovazione.
Sono definite, per il loro approccio, API di basso livello (o low-overhead).
#Caratteristiche
Proprietá principale delle API Vulkan è il loro essere Open Source. Questa caratteristica è di per sé un quadro di ció che sono le Vulkan in quanto l’approccio open influenza profondamente gli obiettivi e l’implementazione di queste API.
A differenza delle DX, le quali sono sviluppate per lavorare su piattaforme Microsoft, l’alternativa sviluppata dal Khronos Group è multipiattaforma ed indipendente da qualsiasi OS, ponendosi l’obiettivo di diventare l’API multipiattaforma per eccellenza. Esiste un’unica API Vulkan, compatibile sia con sistemi desktop che mobili.
Vulkan predilige e favorisce la programmazione multi-threading ed una migliore scalabilitá sulle CPU multi-core. L’assottigliamento del livello driver, favorito da SPIR-V, permette allo sviluppatore un controllo diretto dell’hardware, una riduzione dell’overhead e un minor carico di lavoro sulla CPU.
#SPIR-V
L’approccio open source, come accennato precedentemente, si ripercuote ad ogni livello dello sviluppo di questa API: OpenGL utilizza un linguaggio ad alto livello per la scrittura degli shader, GLSL, forzando ogni driver OpenGL ad implementare il proprio compilatore GLSL. Questo é eseguito a run-time e traduce gli shader dell’applicazione nel linguaggio macchina corrispondente alle varie GPU. Vulkan fornisce, invece, un linguaggio intermediario binario chiamato SPIR-V (Standard Portable Intermediate Representation) così da ridurre l'onere sui fornitori di driver, permettere la pre-compilazione degli shader e concedere agli sviluppatori di scriverli anche in un linguaggio diverso da GLSL. Attraverso la pre-compilazione la velocitá d’inizializzazione dell’applicazione è maggiore, inoltre, in ogni scena, è possibile utilizzare una varietá maggiore di shader.
SPIR-V é ció che rende le API Vulkan rivoluzionarie ed indipendenti da qualsiasi linguaggio e piattaforma. Esso evita ai programmatori di costruire un compilatore specifico all’interno dei driver per ogni linguaggio di programmazione ad alto livello, riducendo in maniera significativa la complessità implementativa e permettendo l'utilizzo di una vasta gamma di linguaggi e framework front-end su diverse architetture hardware, evitando lo sviluppo di driver appositi.
#Vulkan Ray Tracing
Nel novembre 2020, Khronos Group, ha rilasciato la versione finale dell’estensione per Ray Tracing delle API Vulkan. Ad oggi queste sono ancora in fase di studio da parte degli sviluppatori e solo tre giochi, al momento, le supportano: Quake II RTX, Wolfstein: Youngblood e JX Online 3.
#Compatibilità giochi
Il vero limite di Vulkan è la ridotta adozione. Non sono molti i giochi ad implementarle, nonostante gli eccellenti risultati portati anche su giochi tripla A come Red Dead Redemption 2, Doom e Doom Eternal.
Nel caso volessimo provare un gioco che adotta le API Vulkan ecco una lista di quelli che le implementano.
#Compatibilitá hardware
Per lavorare con API Vulkan l’hardware necessita unicamente di una leggera ottimizzazione driver specifica per la GPU, ció comporta manutenzione più semplice e pacchetti driver piú piccoli.
DirectX e Vulkan si pongono obiettivi simili: migliorare le prestazioni multithreading, ridurre il driver overhead e di conseguenza i carichi di lavoro sulla CPU. Allo stesso modo esse appartengono a due mondi e filosofie completamente distinte e i mezzi attraverso i quali cercano di raggiungere i loro scopi sono una rappresentazione perfetta del loro credo.
Fonti:
Techquickie
Spir-V Withepaper
Tom's Hardware USA
Wikipedia
Fonte foto copertina:
Testing Games