IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel Vulkan complet


précédentsommairesuivant

I. Introduction

I-A. À propos

Ce tutoriel vous enseignera les bases de l'utilisation de la bibliothèque Vulkan pour afficher des graphismes et pour réaliser des calculs sur GPU. Vulkan est une nouvelle bibliothèque créée par le groupe Khronos (notamment connu pour OpenGL). Cette bibliothèque offre une bien meilleure abstraction des cartes graphiques modernes. En effet, la nouvelle interface vous permet de mieux décrire ce que votre application souhaite faire. Cela peut permettre d’obtenir de meilleures performances ainsi qu’un comportement moins surprenant des pilotes graphiques comme cela pouvait être le cas avec OpenGL et Direct3D. Les concepts introduits par Vulkan sont similaires à ceux de Direct3D 12 et Metal. Cependant Vulkan a l'avantage d'être complètement multiplateforme et permet donc de développer pour Windows, Linux, Mac et Android en même temps.

Il y a cependant un contrecoup à ces avantages : la bibliothèque est plus verbeuse. Tout ce qui concerne le rendu graphique doit être intégralement défini par votre application : cela inclut la création du tampon d’image initial, ou encore, la gestion de la mémoire pour les tampons ou les textures. Le pilote graphique ne vous tient plus par la main. Cela signifie qu’il y a plus de choses à faire dans l’application pour obtenir un comportement correct.

Le message véhiculé ici est que Vulkan n'est pas fait pour tout le monde. Cette bibliothèque est conçue pour les programmeurs intéressés par la programmation GPU haute performance et qui sont prêts à y travailler sérieusement. Si vous vous intéressez au développement de jeux vidéo et non particulièrement aux rendus graphiques, vous devriez plutôt continuer d'utiliser OpenGL et DirectX, qui ne seront pas prochainement dépréciés en faveur de Vulkan. Une autre option serait d'utiliser un moteur de jeu comme Unreal Engine ou Unity, qui sont capables d'utiliser Vulkan tout en exposant une bibliothèque de plus haut niveau.

Cela étant dit, présentons quelques prérequis pour ce tutoriel :

  • une carte graphique et un pilote compatibles avec Vulkan (NVIDIA, AMD, Intel) ;
  • une expérience avec le C++ (connaissance du RAIIResource Acquisition Is Initialization, listes d'initialisation) ;
  • un compilateur supportant les fonctionnalités du C++17 (Visual Studio 2017 ou supérieur, GCC 7 ou supérieur, Clang 5 ou supérieur) ;
  • un minimum d'expérience dans le domaine de la programmation graphique 3D.

Ce tutoriel ne considérera pas comme acquis les concepts d'OpenGL et de Direct3D, mais il requiert que vous connaissiez les bases du rendu 3D. Il n'expliquera pas non plus les mathématiques derrière, par exemple, la projection de perspective. Lisez ce livre pour une bonne introduction des concepts de rendu 3D. Voici aussi d'autres ressources pour le développement d'applications graphiques :

Si vous le souhaitez, vous pouvez utiliser le C à la place du C++. Toutefois vous devrez utiliser une autre bibliothèque d'algèbre linéaire et vous devrez restructurer vous-même le code. Nous utiliserons des fonctionnalités du C++ (RAII, classes) pour organiser la logique et gérer la durée de vie des ressources. Il existe aussi une autre version de ce tutoriel pour les développeurs Rust.

Pour faciliter la tâche des développeurs utilisant d'autres langages de programmation, et pour acquérir de l'expérience avec la bibliothèque de base, nous allons utiliser l'API C originelle pour manipuler Vulkan. Cependant, si vous utilisez le C++, vous pourrez préférer utiliser Vulkan-Hpp, qui permet de s'éloigner de certains détails ennuyeux et d'éviter certains types d'erreurs.

I-B. Structure du tutoriel

Nous allons commencer par un aperçu du fonctionnement de Vulkan et le travail nécessaire pour obtenir notre premier triangle à l’écran. Le but de chaque petite étape et d’offrir une meilleure compréhension de leur rôle dans l’ensemble. Ensuite, nous préparerons l'environnement de développement, avec le SDK Vulkan, la bibliothèque GLM pour les opérations d'algèbre linéaire et GLFW pour la création d'une fenêtre. Ce tutoriel couvrira leur mise en place sur Windows avec Visual Studio et sur Linux Ubuntu avec GCC.

Après cela, nous implémenterons tous les éléments nécessaires à un programme Vulkan pour afficher le premier triangle. Chaque chapitre suivra approximativement la structure suivante :

  • introduction d'un nouveau concept et de son utilité ;
  • utilisation de tous les appels correspondants à la bibliothèque pour leur mise en place dans votre programme ;
  • placement d'une partie de ces appels dans des fonctions pour une réutilisation future.

Bien que chaque chapitre soit écrit comme suite du précédent, il est également possible de lire chacun d'entre eux comme un article introduisant une fonctionnalité précise de Vulkan. Ainsi ce tutoriel peut être utilisé comme référence. Toutes les fonctions et les types provenant de Vulkan sont liés à leur documentation : vous pouvez donc cliquer dessus pour en apprendre plus. Vulkan est une bibliothèque récente, il peut donc y avoir des lacunes dans la spécification elle-même. Vous êtes encouragé à transmettre vos retours dans ce dépôt de Khronos.

Comme indiqué plus haut, Vulkan est une bibliothèque assez prolixe, avec de nombreux paramètres, pensés pour vous fournir un maximum de contrôle sur le matériel graphique. Ainsi des opérations simples comme créer une texture se font en de nombreuses étapes devant être répétées à chaque fois. Nous créerons notre propre collection de fonctions d'aide tout au long du tutoriel.

Chaque chapitre se conclura avec un lien menant à la totalité du code écrit jusqu'à ce point. Vous pourrez vous y référer si vous avez un quelconque doute quant à la structure du code, ou si vous rencontrez un bogue et que vous voulez comparer. Tous les codes ont été testés sur les cartes graphiques des différents constructeurs et fonctionnent. Si vous avez un quelconque souci, vous pouvez utiliser le forum. Veuillez y indiquer votre plateforme, la version de votre pilote, votre code source, le comportement attendu et celui obtenu pour nous aider à vous aider.

Après avoir accompli le rituel de l'affichage de votre premier triangle avec Vulkan, nous étendrons le programme pour y inclure les transformations linéaires, les textures et les modèles 3D.

Si vous avez déjà utilisé une bibliothèque graphique auparavant, vous devez savoir qu'il peut y avoir de nombreuses étapes avant l’affichage de la première géométrie à l'écran. Il y en a encore plus avec Vulkan, mais vous verrez que chacune d'entre elles est simple à comprendre et n'est pas redondante. Gardez aussi à l'esprit qu'une fois que vous savez afficher ce triangle – certes ennuyant – l’affichage d’un modèle 3D texturé ne nécessite pas beaucoup plus de travail. À partir de ce moment, chaque étape est plus satisfaisante.

Prêt à vous lancer dans le futur des bibliothèques graphiques de haute performance ? Allons-yAperçu de Vulkan!

I-C. Communauté

Ce tutoriel est destiné à être un effort de communauté. Vulkan est encore une bibliothèque très récente et les meilleures manières d'arriver à un résultat n'ont pas encore été déterminées. Si vous avez un quelconque retour sur le tutoriel et le site lui-même, n'hésitez alors pas à en discuter ici. N’hésitez pas à watch le dépôt officiel afin d'être notifié des dernières mises à jour du site.

Si vous rencontrez un problème en suivant ce tutoriel, vérifiez d'abord dans la section des problèmes courantsRésolution des problèmes ne contient pas déjà une solution. Si vous êtes toujours coincé après cela, demandez de l'aide sur le forum.

I-C-1. Contributeurs

Le tutoriel original, écrit en anglais, a été réalisé par Alexander Overvoorde. La traduction française a été principalement réalisée par Alexis Ronez. La liste complète des contributeurs peut être trouvée sur GitHub. La version hébergée sur Developpez.com a été revue par Alexandre Laurent (LittleWhite). De plus, cette version a reçu une relecture orthographique effectuée par ClaudeLELOUP, escartefigue et -FloT-.

Un grand merci à Alexander Overvoorde et Alexis Ronez.

Le tutoriel est sous licence CC BY-SA 4.0 et le code sous licence CC0 1.0 Universal.


précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Contributeurs Github et Developpez.com et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.