L’article était intéressant, mais le diagramme présente à tort OpenGL / WebGL / WebGPU comme s’ils étaient construits sur Vulkan
WebGL et WebGPU fonctionnent directement au-dessus de D3D et Metal, sans passer par Vulkan
De plus, Vulkan n’est pas open source mais un standard
WebGPU n’est pas limité au navigateur ; il existe aussi via les bibliothèques Dawn pour C++ et WGPU pour Rust, ce qui permet de l’exécuter sur Windows, macOS, Linux, iOS, Android, etc.
Vulkan fonctionne sur un peu plus de plateformes que DirectX, mais n’est pas inclus par défaut dans Windows et ne fonctionne ni sur macOS ni sur iOS
Je voudrais ajouter que Vulkan n’est pas open source, mais un standard ouvert
L’implémentation réelle est assurée par chaque fabricant de matériel, et Vulkan n’est en gros qu’un ensemble de fichiers d’en-tête
Cela dit, il fonctionne aussi très bien sur les plateformes Apple via des couches de traduction Vulkan-vers-Metal comme MoltenVK ou KosmicKrisp
Vulkan n’est pas totalement cross-platform, mais il couvre un périmètre bien plus large que DirectX
DirectX est utilisé sur Windows et Xbox, tandis que Vulkan est disponible sur Linux, Android, Windows, Nintendo Switch, Switch 2, etc.
Il faudrait préciser que WebGPU est une API unifiée au-dessus des API natives de chaque plateforme (DirectX, Vulkan, Metal)
Les API de Khronos disposent d’un grand nombre d’extensions, mais certaines sont propriétaires, ce qui réduit la portabilité
PlayStation ne prend pas en charge Vulkan, et sur Switch, on utilise surtout NVN plutôt qu’OpenGL/Vulkan
Le simple fait que Vulkan fonctionne sur Windows le rend déjà plus généraliste que DirectX à mes yeux
Le fait que Vulkan ne marche pas dans certains environnements VNC sous Linux n’a rien de représentatif
La plupart des utilisateurs bénéficient de Vulkan via les pilotes GPU
La qualité du cours sur ce site est impressionnante
Si le livre était vendu, même sous forme de précommande, j’aurais envie de soutenir le projet
Je suis les publications depuis le premier article, et chacune est plus impressionnante que la précédente
Si vous voulez expérimenter avec les shaders, je recommande les IDE suivants
shadertoy – le plus simple et le plus populaire, directement dans le navigateur
Shadron – personnellement mon préféré grâce à sa bonne ergonomie, même s’il reste assez confidentiel
SHADERed – il faut un peu de temps pour s’habituer à l’UX, mais les fonctionnalités sont suffisantes
KodeLife – j’en ai entendu parler, mais je ne l’ai pas essayé moi-même
Cables(cables.gl) est aussi très sympa
Il y a des œuvres impressionnantes de Kirell Benzi
J’ai découvert wgshadertoy dans le gestionnaire de logiciels de Mint
Prend en charge de nombreuses plateformes, dont flatpak, AUR, macports et Windows
Sur macOS ou iPadOS, on peut facilement se lancer avec les shaders Metal via Playgrounds
Il y a aussi Bonzomatic, utilisé dans la demoscene pour les compétitions de live coding de shaders
Programmer consiste au fond à traduire ce qu’un humain comprend dans un langage que l’ordinateur peut comprendre
Mais la programmation GPU est bien plus difficile
Entre les nombreux pièges, les incohérences matériel/logiciel et le manque d’outils de débogage, l’expérience de développement est très pénible
C’est aussi regrettable que la communauté semble peu motivée pour améliorer cet état de fait
OpenGL et les versions antérieures à DirectX 12 tentaient d’abstraire les détails du matériel, mais au final cette abstraction s’est révélée nuisible
La partie la moins intuitive quand on écrit un fragment shader, c’est l’idée de recevoir des coordonnées en entrée et de produire une couleur en sortie
Contrairement au dessin au stylo, un shader calcule la position de chaque pixel pour en déterminer la couleur
Il faut penser en termes de manipulation de l’espace plutôt qu’en termes de déplacement d’objets
Les vertex shaders paraissent plus naturels, puisqu’ils produisent la position des triangles
Cela ne semble contre-intuitif que lorsqu’on abuse des fragment shaders
En pratique, ils s’occupent de la dernière étape du pipeline de rendu, comme l’échantillonnage de textures et le calcul de l’éclairage
En PBR ou en rendu différé, on partage généralement les mêmes shaders communs et on ne personnalise que les effets spéciaux
Il faut voir cela non comme un problème propre aux shaders, mais comme la différence entre graphismes raster et vectoriels
Le shading ne consiste pas à tracer des contours, mais à représenter des matériaux physiques
La peinture est plus proche du shading, contrairement au dessin au stylo
Utiliser un fragment shader pour dessiner un rectangle est une mauvaise approche
Un shader sert à ombrer (shading) un rectangle, pas à le dessiner
En réalité, le vertex shader définit les contours et le fragment shader remplit l’intérieur
Dans un cadre pédagogique, on omet parfois le vertex shader et on remplit tout l’écran avec un fragment shader
Le plus difficile quand on apprend à écrire du code GPU, c’est que la configuration initiale est complexe et obscure
Les concepts liés aux formats de données, à l’ordre des transformations ou à la frontière CPU-GPU sont difficiles, et la documentation manque souvent
Le système de variables globales du GPU est lui aussi déroutant
Une partie de ces questions concerne moins le GPU lui-même que la conception de l’API
Le GPU repose sur une architecture SIMT, donc la cohérence des accès aux données est importante
Les transformations sont appliquées séquentiellement dans chaque thread, et la frontière entre CPU et GPU peut être franchie plusieurs fois selon le budget de performance
Les variables globales sont des constantes transmises à l’identique à chaque thread, comme les uniforms
Dans CUDA, un accès global est possible via des opérations atomiques, mais avec un coût de performance élevé
Un cours d’introduction à WebGL ferait un bon point de départ
Le niveau de finition du site est étonnamment élevé
Les diagrammes, la barre de défilement et le style sont tous excellents
Les shaders sont apparus avant les GPU et peuvent aussi s’exécuter sur CPU
Le cœur du GPU, c’est son modèle d’exécution SIMT/SIMD, et un shader relève essentiellement de la notion de fonction de rappel
Je pense que le fait de pouvoir les écrire avec le même raisonnement séquentiel que sur CPU participe à la simplicité et à l’élégance des shaders
Le fait que toutes les illustrations aient été réalisées avec Figma est particulièrement impressionnant
J’ai laissé une réponse disant que le retour était excellent
Le travail est vraiment magnifique et très abouti
Entièrement d’accord. Je me demande si ce site est une application sur mesure construite avec Next.js
Excellent travail. J’ai pris beaucoup de plaisir à le parcourir
Je recommande la vidéo d’Iñigo Quilez, “This painting is a mathematical formula”
Elle montre très bien le concept des shaders où les coordonnées x et y de chaque pixel sont exprimées comme une fonction
1 commentaires
Commentaires sur Hacker News
WebGL et WebGPU fonctionnent directement au-dessus de D3D et Metal, sans passer par Vulkan
De plus, Vulkan n’est pas open source mais un standard
WebGPU n’est pas limité au navigateur ; il existe aussi via les bibliothèques Dawn pour C++ et WGPU pour Rust, ce qui permet de l’exécuter sur Windows, macOS, Linux, iOS, Android, etc.
Vulkan fonctionne sur un peu plus de plateformes que DirectX, mais n’est pas inclus par défaut dans Windows et ne fonctionne ni sur macOS ni sur iOS
L’implémentation réelle est assurée par chaque fabricant de matériel, et Vulkan n’est en gros qu’un ensemble de fichiers d’en-tête
Cela dit, il fonctionne aussi très bien sur les plateformes Apple via des couches de traduction Vulkan-vers-Metal comme MoltenVK ou KosmicKrisp
DirectX est utilisé sur Windows et Xbox, tandis que Vulkan est disponible sur Linux, Android, Windows, Nintendo Switch, Switch 2, etc.
PlayStation ne prend pas en charge Vulkan, et sur Switch, on utilise surtout NVN plutôt qu’OpenGL/Vulkan
Le fait que Vulkan ne marche pas dans certains environnements VNC sous Linux n’a rien de représentatif
La plupart des utilisateurs bénéficient de Vulkan via les pilotes GPU
Si le livre était vendu, même sous forme de précommande, j’aurais envie de soutenir le projet
Je suis les publications depuis le premier article, et chacune est plus impressionnante que la précédente
Il y a des œuvres impressionnantes de Kirell Benzi
Prend en charge de nombreuses plateformes, dont flatpak, AUR, macports et Windows
Mais la programmation GPU est bien plus difficile
Entre les nombreux pièges, les incohérences matériel/logiciel et le manque d’outils de débogage, l’expérience de développement est très pénible
C’est aussi regrettable que la communauté semble peu motivée pour améliorer cet état de fait
Contrairement au dessin au stylo, un shader calcule la position de chaque pixel pour en déterminer la couleur
Il faut penser en termes de manipulation de l’espace plutôt qu’en termes de déplacement d’objets
Les vertex shaders paraissent plus naturels, puisqu’ils produisent la position des triangles
En pratique, ils s’occupent de la dernière étape du pipeline de rendu, comme l’échantillonnage de textures et le calcul de l’éclairage
En PBR ou en rendu différé, on partage généralement les mêmes shaders communs et on ne personnalise que les effets spéciaux
Le shading ne consiste pas à tracer des contours, mais à représenter des matériaux physiques
La peinture est plus proche du shading, contrairement au dessin au stylo
Un shader sert à ombrer (shading) un rectangle, pas à le dessiner
Dans un cadre pédagogique, on omet parfois le vertex shader et on remplit tout l’écran avec un fragment shader
Les concepts liés aux formats de données, à l’ordre des transformations ou à la frontière CPU-GPU sont difficiles, et la documentation manque souvent
Le système de variables globales du GPU est lui aussi déroutant
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan exige beaucoup plus de boilerplate que WebGL
Le GPU repose sur une architecture SIMT, donc la cohérence des accès aux données est importante
Les transformations sont appliquées séquentiellement dans chaque thread, et la frontière entre CPU et GPU peut être franchie plusieurs fois selon le budget de performance
Les variables globales sont des constantes transmises à l’identique à chaque thread, comme les uniforms
Dans CUDA, un accès global est possible via des opérations atomiques, mais avec un coût de performance élevé
Un cours d’introduction à WebGL ferait un bon point de départ
Les diagrammes, la barre de défilement et le style sont tous excellents
Les shaders sont apparus avant les GPU et peuvent aussi s’exécuter sur CPU
Le cœur du GPU, c’est son modèle d’exécution SIMT/SIMD, et un shader relève essentiellement de la notion de fonction de rappel
Je pense que le fait de pouvoir les écrire avec le même raisonnement séquentiel que sur CPU participe à la simplicité et à l’élégance des shaders
Elle montre très bien le concept des shaders où les coordonnées x et y de chaque pixel sont exprimées comme une fonction