Derrière chaque image se cache du code
Lorsqu’un joueur traverse une forêt, observe les reflets à la surface d’un lac ou découvre la lueur étrange d’un artefact, il voit avant tout un univers graphique. Pourtant , derrière chacune de ces images se cachent de nombreux calculs réalisés en une fraction de seconde.
Les modèles 3D et les textures constituent une partie essentielle de cet univers, mais il suffisent pas à déterminer ce qui apparaîtra réellement à l’écran. Comme une surface. doit-elle réagir à la lumière ? Doit-elle être brillante, mate, transparente ou lumineuse ? Peut-elle se déformer, disparaître progressivement ou sembler parcourue par une énergie mystérieuse.
C’est notamment là qu’interviennent les Shaders.
Dans ce nouvel article consacré aux coulisses de Prophétie oubliée, nous allons découvrir ce qu’est un Shader, comprendre son fonctionnement, différencier Shader, Matériau et Texture, puis l’utilisation du Shader Graph dans Unity.
Chapitre I - Qu'est-ce qu'un Shader ?
Un Shader est un programme exécuté principalement par le processeur graphique, le GPU, afin de participer au calcul de l’image affichée à l’écran.
Contrairement à ce que son nom pourrait laisser penser, son rôle ne se limite pas à créer des ombres. Un Shader peut déterminer la couleur d’une surface, sa réaction à la lumière, son niveau de transparence, son aspect métallique, ses reflets ou encore certaines déformations.
Il peut également être utilisé pour réaliser des effets beaucoup plus spectaculaires : apparition progressive d’un objet, énergie parcourant une surface, hologramme, végétation animée par le vent, lave, eau, portail ou effet magique.
À retenir :
. Le modèle donne la forme.
. La texture apporte des informations visuelles.
. Le Shader participe à déterminer comment tout cela sera finalement rendu à l’écran.
Chapitre II - Texture, Matériau et Shader : comprendre la différence
Ces trois termes sont régulièrement employés dans la création 3D et peuvent facilement être confondus lorsqu’on débute.
. Une Texture est généralement une image ou un ensemble de données appliqué à un modèle. Certaines textures définissent sa couleur, tandis que d’autres contiennent des informations concernant son relief apparent, sa rugosité ou d’autres propriétés.
. Le Matériau, constitue en quelque sorte l’intermédiaire entre ces données et le moteur de rendu. Il rassemble les Textures et différents paramètres nécessaires à l »apparence d’une surface.
. Le Shader, quant à lui, contient les instructions permettant au moteur graphique de déterminer comment ces informations doivent être interprétées pour produire l’image.
Exemple dans Prophétie oubliée :
. Prenons l’écorce du chêne.
Sa géométrie constitue sa forme 3D. Une Texture peut représenter les détails de son écorce. un Matériau rassemble les différentes Textures et paramètres nécessaires. Enfin, le Shader détermine notamment comment cette surface réagit à la lumière et comment elle doit être affichée.
Nous obtenons donc une chaîne relativement simple à comprendre :
Modèle 3D → Textures → Matériau → Shader → Rendu à l’écran
Chapitre III - Comment fonctionne réellement un Shader ?
Pour comprendre les Shaders , il faut regarder brièvement ce qui se passe entre le modèle 3D et l’image affichée.
Un objet 3D est constitué notamment de points appelés sommets, ou vertices. Ces sommets forment des triangles qui constituent la surface du modèle.
Une partie du processus de rendu travaille sur ces sommets. Une autre permet ensuite de déterminer l’apparence des fragments qui contribueront aux pixels visibles à l’écran.
C’est ici que nous pourrons introduire deux notions fondamentales :
I. Le Vertex Shader
Il intervient sur les sommets du modèle. Il peut notamment participer à déterminer leur position à l’écran et peut également être utilisé pour produire certaines déformations.
II. Le fragment Shader
Il intervient plus tard dans le processus de rendu et contribue à déterminer l’apparence finale des fragments : couleur, propriétés de surface, transparence et autres informations selon la technique de rendu employée.
Chapitre IV - Le GPU : des millions de calculs en quelques instants
Pourquoi les Shaders sont-ils principalement associées à la carte graphique ?
Parce qu’une image de jeu vidéo représente une quantité considérable de calculs qui doivent être renouvelés plusieurs dizaines de fois chaque seconde.
Le GPU – Graphics Processing Unit – possède une architecture particulièrement adaptée à l’exécution en parallèle d’un très grand nombre d’opérations graphiques.
Cette capacité permet aux Shaders d’effectuer énormément de calculs nécessaires à la construction des images en temps réel.
Chapitre V - Les Shaders sont partout
Une fois leur principe compris, il devient intéressant d’observer combien ils sont présents dans un jeu moderne.
Ils peuvent participer à représenter :
- l’eau et ses mouvements;
- le verre et la transparence;
- les surfaces métalliques;
- la végétation animée;
- certaines représentations du feu;
- des hologrammes;
- des effets de dissolution;
- des champs d’énergie;
- des portails;
- des effets surnaturels.
Et surtout, deux objets utilisants le même modèle peuvent paraître complètement différents selon leurs matériaux et Shaders.
Chapitre VI - Shader Graph : créer visuellement un Shader
Il n’est pas nécessaire de commencer par écrire des dizaines de lignes de code.
Unity propose Shader Graph, un système permettant de construire graphiquement certains Shaders en reliant différents blocs appelés noeuds.
Chaque noeud possède une fonction : fournir une couleur, utiliser une texture, effectuer un calcul, créer du bruit, manipuler des coordonnées ou contrôler certaines propriétés du résultat final.
Les connexions entre ces noeuds permettent progressivement de construire le comportement souhaité.
Cette approche rend la création de Shaders beaucoup plus accessible visuellement, tout en permettant de découvrir progressivement les principes fondamentaux du rendu.
Chapitre VII - Et derrière Shader Graph : HLSL
Shader Graph ne signifie cependant pas que la programmation des Shaders a disparu.
Derrière les outils graphiques se trouvent toujours des instructions destinées au GPU. Dans l’écosystème Unity, le langage HLSL – High-Level Shading Language – occupe notamment une place importante.
Un développeur peut donc commencer par Shader Graph afin de comprendre visuellement les différentes opérations, puis approfondir progressivement ses connaissances en étudiant le code et le fonctionnement du pipeline graphique.
Chapitre VIII - Quand un Shader devient un outil narratif
Un Shader n’est pas uniquement destiné à rendre un jeu plus beau.
Il peut également transmettre une information au joueur.
Dans Prophétie oubliée, imaginons qu’Armand s’approche d’un endroit apparemment ordinaire. Une faible manifestation lumineuses apparaît progressivement. Certaines marques deviennent visibles. L’environnement semble réagir à sa présence.
Aucun message n’a besoin d’apparaître à l’écran pour expliquer que quelque choses d’inhabituel vient de se produire.
L’effet visuel participe alors directement à la narration environnementale.
Et c’est probablement l’un des usages les plus intéressants des Shaders pour un jeu fondé sur le mystère et la découverte.
Chapitre IX - Attention aux performances
Créer un effet spectaculaire est une chose. Pouvoir l’afficher correctement pendant que le jeu fonctionne en est une autre.
Les Shaders utilisent les ressources GPU. leur coût dépend de nombreux facteurs : complexité des calculs, transparence, nombre de textures consultées, nombre d’objets concernés, résolution de l’affichage et différentes caractéristiques du pipeline de rendu.
Un effet parfaitement fluide sur un objet isolé peut devenir problématique s’il est appliqué simultanément à des milliers d’éléments.
La création d’un Shader demande donc également de rechercher un équilibre :
Qualité visuelle ↔ Complexité ↔ Performances
L’optimisation ne consiste pas nécessairement à supprimer les beaux effets, mais à déterminer où ils sont réellement utiles.
Chapitre X - Par où commencer lorsqu'on veut apprendre ?
Pour quelqu’un souhaitant se lancer dans la création de jeux vidéo, les Shaders peuvent sembler particulièrement complexes.
Il n’est pourtant pas nécessaire de tout apprendre immédiatement.
La progression est la suivante :
. Créer un matériau simple →
- Comprendre les textures
- Découvrir les propriétés d’un Shader
- Commencer Shader Graph
- Manipuler couleurs et textures
- Découvrir UV et masques
- créer un effet animé
- comprendre Vertex et Fragment
- s’intéresser aux performances
- découvrir progressivement HLSL
Ainsi, quelqu’un qui découvre Unity peut expérimenter très rapidement tout en construisant progressivement ses connaissances.
Chapitre XI - Conclusion
Les Shaders constituent l’une de ces technologies que le joueur ne remarque pas nécessairement, mais dont il observe constamment les résultats.
Ils contribuent à transformer des modèles, des textures et des données numériques en surfaces capables de réagir à la lumière, de se déformer, de disparaître ou de donner naissance à des phénomènes impossibles dans le monde réel.
Dans Prophétie oubliée, leur rôle ne sera donc pas uniquement esthétique.
Ils permettront de donner une existence visuelle à ce qui, justement, ne devrait peut-être pas être visible.