DirectX 12 inaugure la nouvelle génération des APIs graphiques « Direct3D » qui animent les jeux sous Windows. En offrant un accès optimisé aux GPU, DirectX 12 promet des scènes 3D plus détaillées, des animations plus fluides et une consommation énergétique moindre.
La plateforme ludique de Microsoft
DirectX est un ensemble d’API multimédias qui tire profit des performances des GPU et des processeurs sonores. DirectX, via son API Direct3D, est au cœur des moteurs de rendu des jeux sous Windows mais pas uniquement. Il est aussi largement utilisé par le Bureau, le navigateur Web et d’une manière générale par la plupart des applications modernes qu’elles affichent des éléments en 2D ou en 3D.
DirectX est apparu avec Windows 95 et n’a cessé d’évoluer. L’arrivée de Windows Vista et de DirectX 10 a inauguré une volonté, via les drivers WDDM, d’offrir aux développeurs un accès plus optimisé aux GPU. DirectX 11, introduit avec Windows 7, se focalisait sur le support de la « tessellation » et l’amélioration du multi-threading afin de tirer profit de la multiplication des processeurs multi-cœurs. DirectX 12 marque une nouvelle étape dans le développement de l’API multimédia et ludique de Microsoft. Cette évolution est le fruit de quatre ans de recherche et développement. Elle est le résultat d’un effort conjoint entre Microsoft, les fabricants de GPU et les créateurs de jeux. Toute sa conception se focalise sur une idée phare: réduire la surcharge imposée par les drivers et offrir un contrôle plus direct du GPU aux développeurs.
Ce que DirectX 12 fait mieux que DirectX 11
Depuis ses premiers pas, DirectX a toujours cherché à simplifier le travail des développeurs en gérant lui-même la mémoire, la distribution des tâches entre les cœurs et les problématiques de synchronisation. Cette approche universelle n’est pas optimale puisqu’elle fonctionne de façon similaire quels que soit les besoins spécifiques des jeux. Il en résulte une surcharge sur les CPU/GPU qui, non seulement, est consommatrice d’énergie mais ne permet pas de profiter pleinement de la puissance des GPU souvent mis en attente d’instructions et données en provenance des drivers.
DirectX 12 permet de paralléliser et de répartir plus efficacement les commandes de constructions des scènes entre les différents cœurs CPU. Il permet surtout aux développeurs de reprendre directement le contrôle des ressources et des GPU et ainsi d’optimiser leur utilisation pour les besoins spécifiques de leurs jeux.
En fournissant un niveau d’abstraction matérielle de bien plus bas niveau, il permet notamment de tirer pleinement profit du multithreading aussi bien sur les différents cœurs du CPU, sur les différents cœurs du GPU que sur les éventuels multiples GPU et cartes graphiques installés.
Il permet ainsi aux développeurs de jeux d’exécuter d’avantage de tâches en parallèle sur des GPUs séparés. Typiquement, tous les jeux 3D intègrent une phase de « postprocessing » pour un rendu visuel réussi. Avec DirectX 12, il est possible de confier la tâche de Postprocessing à un second GPU ce qui libère plus tôt le premier GPU et lui permet de commencer à calculer le rendu de l’image suivante plus rapidement.
L’une des grandes originalités de DirectX 12 est que cette parallélisation des traitements peut-être réalisée sur des GPUs différents.
Typiquement, bien des ordinateurs portables disposent de deux GPUs : un GPU intégré au processeur (Intel HD Graphics) et destiné à une utilisation en mode batterie, un autre spécialisé (NVidia/AMD) pour une utilisation ludique plus intensive lorsque l’ordinateur est relié au secteur. Jusqu’ici un seul des deux GPU pouvaient être utilisés à un instant « t ». Avec DirectX 12, les développeurs peuvent exploiter le GPU spécialisé pour le rendu des scènes et le GPU intégré pour le PostProcessing de la scène. Il en résulte un important gain dans le Framerate comme en témoigne la démonstration ci-dessous :
DirectX12 améliore également la gestion de la mémoire et réduit les effets de fragmentation. Surtout, il tend à offrir un frame-rate plus constant grâce à un nouveau mécanisme de mise en cache des objets.
Enfin, DirectX 12 introduit de nouvelles fonctionnalités de rendu et de nouvelles optimisations dans le pipeline de génération des scènes 3D qui permettent des gains très importants dans les algorithmes de détection des collisions, de gestion des transparences et d’optimisation géométrique (backface culling, occlusion culling, frustum culling, contribution culling).
Gains potentiels : premiers benchmarks
Officiellement, Microsoft considère que, dans les meilleures conditions, DirectX 12 peut doubler le frame-rate des jeux par rapport à DirectX 11. D’une manière générale, l’éditeur anticipe cependant un gain de performance de 20% en moyenne sur la plupart des jeux et applications 3D.
Les gains réels dépendent en réalité essentiellement des jeux eux-mêmes ainsi que de la capacité des développeurs à tirer profit des améliorations apportées à DirectX 12 et de la souplesse supplémentaire procurée par les nouvelles APIs.
La dernière version du logiciel 3DMARK, édité par Futuremark, contient un test « API Overhead Feature Test » qui permet de mettre en évidence la capacité de DirectX 12 à saturer les GPU pour en tirer tout leur potentiel. Sur un tel test, AMD a ainsi mesuré des gains de 1547% sur une Radeon R9 290X et de 953% sur une Radeon R7 260X, des valeurs très supérieures à celles officiellement anticipées par Microsoft.
En s’appuyant sur ce même test, PC World a lui aussi mesuré des gains qu’il qualifie de « Insane », autrement dit « indécents ». Avec un GPU Intel Iris Pro, l’indice 3DMark fait plus que tripler en passant de 645 940 sous DX11 à 2 126 150 sous DX12 ! Avec un GPU plus musclé comme le NVidia GeForce GTX Titan X, DirectX 12 se montre 20 fois plus rapide (le score 3D Mark passe de 658 056 à 13 429 183).
La vidéo suivante illustre clairement le gain de performances :
AnandTech a réalisé en février dernier quelques premiers tests à l’aide de Star Swarm Stress Test sur une version très préliminaire de Windows 10 dotée d’une version non encore finalisée de DirectX 12 et des drivers vidéos. Ce benchmark a la particularité de réaliser de nombreux « draw calls » (affichage d’objets à l’écran). Or le nouveau Pipeline unifié de DirectX 12 a été spécifiquement pensé pour mieux saturer le GPU et engendrer davantage de « draw calls ». Sur ce test, la réalité dépasse à nouveau la théorie. Les gains sont assez sidéraux. La GeForce GTX 980 se voit boostée passant de 26,7 FPS en DirectX 11 à 66,8 FPS en DirectX 12 ! La carte Radeon R9 290X affiche sur ce bench 42,9 FPS en DirectX 12 contre seulement 8,9 FPS en DirectX 11.
Il n’y a cependant pas que la performance brute qui compte. Windows 10 va nous amener à jouer sur toute une panoplie d’appareils et notamment des dispositifs mobiles comme les tablettes ou les ultra-portables pour lesquels l’autonomie est aussi essentielle que la performance. AMD a utilisé le bench 3DMark pour évaluer les performances de DirectX 12 par Watt. Le constructeur note que pour chaque Watt consommé, DirectX 12 réalise 6 fois plus de travaux que DirectX 11.
A taux de charge égal, la consommation énergétique de DirectX 12 serait deux fois moindre que celle de DirectX 11. De quoi très sérieusement booster l’autonomie des tablettes sur les jeux mais également l’autonomie des PC puisque tout l’affichage du bureau Windows repose sur DirectX.
Bien évidemment tous ces tests ne reflètent pas la réalité, les jeux étant plus que de simples générateurs d’images animées. Mais ils donnent une bonne idée du saut considérable que DirectX 12 représente face à DirectX 11. Dans un jeu bien d’autres éléments entrent en compte, autres que le simple stress des API et le nombre de « draw calls ». En outre, ces tests sont spécifiquement programmés pour DirectX 12. Il faudra que tous les développeurs et tous les moteurs de jeux (tels que Unity ou Unreal Engine, déjà compatibles DX12) implémentent l’ensemble des améliorations et en maîtrisent toutes les subtilités avant de profiter de gains aussi flagrants.
Les développeurs du jeu Ashes of Singularity ont cependant déjà déclaré que le passage à DirectX 12 engendrait un gain de performance de 70% sur leur propre jeu par exemple.
DIRECTX 12 & les cartes graphiques
La bonne nouvelle, c’est que nous pourrons profiter des bienfaits de DirectX 12 (et de la nouvelle génération de jeux en tirant profit) sans avoir à changer de PC ou de carte graphique.
Certes, certaines fonctionnalités avancées de DirectX 12 ne seront mises en œuvre que sur les tous derniers GPU et les prochaines cartes graphiques estampillées « Windows 10 ». Mais les constructeurs ont fait l’effort de créer des drivers DirectX 12 pour la plupart de leurs cartes existantes. Microsoft estime que 50% du parc de machines installées pourra ainsi profiter de DirectX 12 dès la sortie de Windows 10.
Plus concrètement, NVIDIA a annoncé que tous ses GPU de génération DirectX 11 supporteront DirectX 12, ce qui comprend tous les processeurs basés sur ses architectures Fermi, Kepler et Maxwell, autrement dit toutes les cartes NVidia GeForce à partir de la série « 400 ».
AMD offrira des pilotes DirectX 12 pour toutes ses cartes à base de GPU « GCN » 1.0, 1.1 et 1.2. Lancée en 2011, l’architecture GCN (Graphics Core Next) est au cœur des GPU Radeon HD 7000, HD 8000, R5, R7 et R9. DirectX 12 sera aussi supporté par les APUs A10 et A8.
Quant à Intel, on sait déjà que DirectX 12 est supporté par tous les Core-i de 4ème (Haswell) et 5ème (Broadwell) génération. A priori les machines à base de processeurs Core M et à base de SoCs Atom x3, x5 et x7 devraient également disposer de pilotes DX12.
Enfin, Qualcomm a également annoncé le support de DirectX 12 sur certains de ces processeurs mobiles Snapdragon (notamment les Snapdragon 805 et 810).
Multi-plateforme via Windows 10
Cette large compatibilité avec l’existant matériel est un atout clé pour les développeurs. Elle leur assure une audience potentielle importante et les encourage donc à optimiser dès à présent leurs jeux pour DirectX 12. Avec un bémol : DirectX 12 ne sera compatible qu’avec Windows 10. Heureusement, la mise à jour vers ce système sera gratuite (tout au moins pour ceux qui la réaliseront avant la fin 2016) pour tous les PC actuellement animés par Windows 7 et Windows 8. Et les gains de performance affichés par DirectX 12 sont tels, qu’ils pourraient à eux seuls encourager tous les utilisateurs actuels de Windows 7/8 à migrer rapidement vers Windows 10, même s’ils sont insensibles aux trouvailles ergonomiques et autres améliorations applicatives du système.
Reste que DirectX 12 n’est pas uniquement une plateforme dédiée au PC. Partie intégrante de Windows 10, elle animera les graphismes des jeux sur toutes les plateformes capables d’accueillir le prochain système d’exploitation de Microsoft.
En d’autres termes, DirectX 12 animera aussi bien les jeux sur PC, notebooks et ultrabooks, que ceux sur tablettes et même ceux sur smartphones. DirectX 12 sera même déployé sur la Xbox One. Les développeurs auront ainsi moins de travail d’adaptation pour porter leurs jeux sur toutes les machines Microsoft quelles que soient leur taille, leur mobilité, leurs processeurs.
Enfin, il faut signaler que DirectX 12 est aussi une technologie essentielle dans le fonctionnement des lunettes HoloLens et une brique essentielle à l’affichage de leurs univers virtuels holographiques.
XBOX & Direct X12
Le moins que l’on puisse dire, c’est que Microsoft reste jusqu’à présent très silencieux sur l’implémentation de DirectX 12 sur sa console et sur les gains que l’on peut en attendre.
Les développeurs ont d’ailleurs des avis assez partagés en la matière. Pour ceux de The Witcher 3 (dont le jeu tourne en 900p sur Xbox One), les améliorations de DirectX 12 ne peuvent à elles seules compenser les limitations matérielles et permettre une exécution en 1080p.
En revanche, ceux de Stardock Studios estiment que la façon dont DirectX 12 distribue plus intelligemment les tâches entre les cœurs et sa nouvelle fonctionnalité de cache d’objets ont un impact notable sur les performances et pourraient contribuer à permettre à davantage de développeurs d’atteindre l’objectif des 1080p.
Quoiqu’il en soit, il ne faut pas s’attendre à ce que l’arrivée de DirectX 12 sur la console engendre des changements dramatiques sur les capacités graphiques de la Xbox One, d’autant que la version DirectX 11 particulière qu’elle embarque dispose déjà de fonctionnalités plus proches du hardware et inspirées de DirectX 12. La nouvelle API apportera un petit plus de performances mais simplifiera surtout beaucoup le travail des développeurs dans leur volonté de proposer les mêmes jeux sur PC et sur console, et d’offrir du cross-gaming.
Toutes les démos actuelles
Pour vous en mettre plein les mirettes, nous avons enfin regroupé sur cette page les principales vidéos des démonstrations de DirectX 12.
Dévoilée lors de la conférence BUILD 2015, la démo technique de Square Enix intitulée « Witch Chapter 0 » s’appuie sur l’univers de Final Fantasy 15. Elle affiche 63 millions de polygones. C’est 6 à 12 fois plus que sous DirectX 11. Et elle utilise des textures 8K par 8K pour un rendu très naturel de la peau et des lèvres par exemple.
Egalement dévoilée à la BUILD 2015, cette vidéo de King of Wush de Snail démontre les gains de performance engendrés par DirectX 12 alors que les développeurs n’ont eut que 6 semaines pour adapter leurs algorithmes. La vidéo montre comment DirectX 12 permet d’afficher davantage de polygones par personnage, davantage de détails dans les scènes mais aussi davantage d’ennemis simultanément à l’écran.
Le moteur Unreal Engine 4 exploite déjà la puissance de DirectX 12. Cette démonstration créée par les auteurs de Fable Legends démontrent la capacité de la nouvelle API de Microsoft à afficher des environnements extrêmement détaillés.
Lors de la GDC 2014, Microsoft a montré une préversion de Forza 5 sur PC. Le rendu est réalisé sur une carte GTX Titan Black. Grâce à DirectX 12, les développeurs utilisent les mêmes fonctionnalités « bas niveau » que celles exploitées sur la version console.