Suite au billet de mon blog qui annonçait sa venue, voici une page destinée aux débutants et amateurs, comportant des ressources sur les shaders. Elle regroupera des informations, tutoriaux et liens concernant leur développement.

- Les bases
- Un shader, c'est quoi ?
- Langages
- Par où commencer ?
- Logiciels utiles
- Tutoriaux
- Ressources

De même que l'on a développé des langages de programmation pour s'affranchir du code assembleur du processeur, des langages ont été développés pour le GPU (processeur graphique de la carte 3D).
Parmi tous les langages de programmation de shaders temps réel, seule une petite poignée à su perdurer ; ils sont désormais indétrônables.
- GLSL : OpenGL shading language, s'utilise avec OpenGL. Comme OpenGL, il est donc multiplateforme : fonctionne sous Linux, Mac OS, Windows.
- HLSL : DirectX High-Level Shader Language, s'utilise avec Direct3D, la librairie de DirectX permettant de faire de la 3D temps réel (en pratique, on a parfois tendance à utiliser Direct3D et DirectX de façon interchangeable, car Direct3D est la partie la plus connue de DirectX). HLSL et DirectX ont été développés par Microsoft. On les retrouve notamment dans les systèmes Windows, ou dans les Xbox.
- Cg : Cg programming language, développé par NVIDIA. Langage très proche de HLSL car développé en parallèle ; Cg fonctionne par contre à la fois sous Direct3D et OpenGL. CgFx est une extension de Cg ; il permet notamment d'encapsuler plusieurs shaders dans un même fichier ; on obtient donc un "bloc" qui contient tout ce qui est nécessaire à l'effet 3D voulu. HLSL dispose aussi d'une extension similaire.
Le choix du langage dépendra des contraintes techniques du projet (à quelle(s) plateformes l'application est-elle destinée ?), des connaissances préalables du programmeur, de la volonté d'utiliser le plus répandu ou non... Reste que tous ces langages sont proches du C, et pas si différents les uns des autres ; en maîtriser un permet souvent de comprendre sans trop de difficultés les grandes lignes d'un shader codé dans un autre langage.
Il n'est pas nécessaire :
- de connaître Direct3D ou OpenGL avant de s'initier aux shaders (même si c'est utile) ; ceci dit, par la force des choses, et puisques les langages de programmation sont liés à Direct3D / OpenGL, vous apprendrez forcément des choses sur ces API tout en apprenant à coder des shaders.
- De disposer d'une carte 3D à 500 euros ; tout ordinateur relativement récent et qui sait faire tourner des jeux 3D devrait faire l'affaire. Une carte 3D récente sera plus à même de gérer un shader complexe (rendu plus rapide, gestion de davantage de données en mémoire, etc), mais pour commencer, vous n'en aurez pas besoin. Dites vous qu'une carte 3D peu puissante vous forcera à travailler un point très important en 3D temps réel : l'optimisation !
Ce qui est par contre utile :
- Choisir un outil de développement : on peut certes programmer uniquement avec un éditeur de texte, d'autant plus que les shaders sont des programmes assez courts en général ; mais les outils spécifiques apportent des fonctionnalités plus qu'utiles lors de la programmation, du debugging ou de l'optimisation. Ça tombe très bien, je parle justement des outils de développement dans la partie "logiciels utiles".
- Choisir un langage dans la liste du point précédent : sur ce point, je ne peux pas forcément vous aider... Pour information, j'ai débuté en Cg/CgFx et je m'en porte très bien.
Ce qui est aussi possible :
- Ne pas choisir de langage, ne pas vouloir programmer. Certains logiciels permettent de créer des shaders sans taper une ligne de code. Une approche qui peut donc séduire les artistes, même si les possibilités ne seront pas forcément aussi étendues.

-
Logiciels gratuits pour programmer les shaders :
- Fx Composer : Environnement de développement de shaders complet pour programmeurs et artistes. Support de DirectX, OpenGL, HLSL, Collada FX, CgFx, .fbx, .f, ...
Comporte de nombreux outils pour le débogage, les tests de performances, l'ajustement de variables, une bibliothèque de shaders, ...
Fx Composer inclut en outre Mental Mill Artist Edition, qui permet de créer des shaders visuellement en connectant des boîtes entre elles.
Si l'interface de fx Composer manque parfois de clarté ou de simplicité, sa puissance est impressionnante.
- RenderMonkey : Environnement de développement de shaders complet pour programmeurs et artistes.
Support de HLSL, GLSL. Export possible en .fx
RenderMonkey est en quelque sorte l'équivalent de Fx Composer chez ATI.
- glslDevil : Outil de debugging de shaders GLSL. Il permet de faire du debugging de shaders utilisés dans dans un programme OpenGL arbitraire sans avoir besoin de recompiler le code source, et même sans avoir besoin d'avoir accès au code source. Les données utilisées sont directement issues du pipeline graphique.
Il permet donc à la fois de faire du debugging et de l'analyse de programme.
Permet aussi de générer des traces OpenGL
- Shader Designer : outil de développement de shaders GLSL disponible dans le SDK OpenGL.
- Lumina : Environnement de développement de shaders GLSL pour programmeurs et artistes.
- InteliShade : plug-in pour Visual Studio ajoutant diverses fonctionnalités pour la création et l'édition de shaders HLSL.
- Création de shaders sans programmation :
- Mental Mill Artist Edition permet de créer et modifier des shaders en utilisant un système de noeuds à connecter entre eux. Attention, pas de programmation ne veut pas forcément dire que vous pourrez utiliser le logiciel sans rien connaître sur les shaders... Mental Mill Artist Edition est inclus dans le téléchargement de Fx Composer.

Bien souvent, les liens ci-dessus vous donneront aussi accès à des exemples de shaders.

-
The Cg Tutorial
[img_assist|nid=264|title=The Cg Tutorial|desc=|link=none|align=right|width=120|height=150]Désormais disponible gratuitement en ligne sur le site de Nvidia. Si The Cg Tutorial se veut avant tout le livre de référence sur la programmation en Cg/CgFx, le livre peut aussi être perçu comme une approche complète de la 3D temps réel : pipeline graphique, transformations, éclairage, techniques classiques telles que le bump mapping, ... Il présuppose néanmoins d'avoir quelques connaissances en 3D temps réel : pour le débutant absolu, le livre pourra sembler moins digeste, et il faudra le compléter par exemple par des recherches en ligne.
-
GPU Gems 1
[img_assist|nid=265|title=GPU Gems 1|desc=|link=none|align=left|width=121|height=150]Le premier de la série des GPU Gems, ce livre est divisé en grandes parties dont chacune regroupe plusieurs chapitres consacrés à des techniques particulières de 3D temps réel.
On trouvera par exemple une méthode d'approximation du subsurface scattering, des techniques de rendu réaliste de l'eau, ou encore du rendu volumique.
Certes, tout ça date un peu (2004, c'est vieux à l'échelle de la 3D), mais ça reste très utile pour tout amateur de shaders / 3D temps réel. Tout comme The Cg Tutorial, GPU Gems est désormais disponible en ligne gratuitement.
-
GPU Gems 2
GPU Gems 2
Le livre contient des techniques concernant la géométrie, une partie sur l'éclairage et les shaders (avec notamment un chapitre portant sur le jeu S.T.A.L.K.E.R. ) ou encore du GPGPU (technique qui consiste à utiliser les cartes 3D pour des calculs n'ayant pas forcément grand chose à voir avec l'imagerie 3D). Suite logique et indispensable de GPU Gems 1, il peut tout à fait être lu séparément.
GPU Gem 2 sur le site de NVIDIA
-
GPU Gems 3
GPU Gems 3 n'est pas gratuit, mais est également une très bonne référence.
-
OpenGL Slading Language
La référence en programmation GLSL. Disponible sur amazon pour 50$ environ...
[img_assist|nid=270|title=OpenGL Shading Language|desc=|link=none|align=center|width=114|height=150]
-
ShaderX
Une série de livres sur la programmation de shaders, en DirectX et OpenGL. Les deux premiers sont disponbles gratuitement en ligne.

Enregistrez/recherchez cette page sur :