Pour les gamers, ces deux mots doivent être familiers. Cependant, leurs définitions varient bien souvent d’une personne à l’autre. Nous entendons parfois même parler de « packs de textures », mais qu’en est-il vraiment ?
Les shaders, les matériaux et les textures sont bien sûr liés.
Si nous désirons faire en sorte que notre objet soit rendu avec une matière particulière comme le bois, nous lui créons et lui assignons un matériau que nous nommons bois. Ce matériau possède des propriétés (couleur, rugosité, brillance…) qui sont définies par le shader utilisé sur ce dernier. Enfin, ces propriétés peuvent faire appel à des textures pour s’exprimer et rendre le résultat visuel du bois plus convainquant. C’est donc une chaine relativement simple où chaque élément est interconnecté avec celui qui le précède.
Mais alors d’où vient donc toute cette confusion ? Si nous reprenons le domaine du jeu vidéo, nous constatons que certaines mises à jour ou modifications personnalisées (mods) avancent une révision des ressources, les fameux « ressources packs » ou « packs de textures ». Ce qu’il faut comprendre c’est que lorsque les shaders sont modifiés, les matériaux changent et par conséquent les textures aussi. Minecraft est un jeu d’aventure de type « bac à sable » développé par Mojang Studios et Microsoft. Ce jeu propose aux utilisateurs de télécharger des « ressources packs » pour personnaliser l’apparence du jeu. Il est courant de retrouver dans ces ressources de nouvelles bibliothèques de shaders qui viennent modifier l’expérience de jeu en altérant la façon qu’ont les matériaux d’agir avec la lumière. Parfois, ces shaders induisent une augmentation de la résolution et donc un nouveau pack de textures qui vient avec ce « ressources pack ». Ce que nous essayons de dire, c’est que toutes ces notions sont intimement liées et qu’il vous faudra toutes les modifier si vous souhaitez en modifier une seule d’entre elles.
Que sont exactement les shaders et les matériaux ?
Techniquement, un shader est un code qui permet de paramétrer une partie du processus de rendu par rapport à un matériau appliqué sur un objet dans une scène 3D. Il permet de décrire les propriétés d’un type de matériau (bois, métal, eau…) par rapport à divers aspects : absorption et diffusion de la lumière, réflexion et réfraction, émission de lumière et bien d’autres encore.
Un shader est un comportement par rapport à la lumière. Il se compose de « canaux d’action », c’est-à-dire des propriétés : c’est transparent, c’est mat, c’est rugueux, c’est lisse, c’est brillant etc. Un matériau est l’application du shader : c’est transparent comme ceci, c’est mat comme cela et ainsi de suite.
L’exemple du bois est assez parlant car la plupart des essences de bois ont des caractéristiques similaires. Ils ont une couleur, des noeuds plus ou moins présents, des rainures plus ou moins serrées... On dira que le shader est le bois et que les essences sont des matériaux, bien que tous différents, ils se comportent globalement de la même manière par rapport à la lumière.
Le chêne et le bouleau sont deux essences de bois qui diffèrent. Le bois de bouleau est pâle ou blanc et son grain (largeur des cernes) est fin et uniforme. Le bois de chêne est plus foncé, son grain est moins uniforme et une différence entre les cernes d'hiver et de printemps peut être observée.
Si nous devons rendre un objet en bois dans ces deux essences, nous choisirons un même shader pour les deux matériaux distincts. Le paramètre définissant la couleur serait pâle pour l’un et foncé pour l’autre. Le paramètre d’uniformité traduirait la différence entre les cernes du bois des deux essences, afin de différencier davantage les deux matériaux. Nous ajouterions ensuite toute une série d’autres paramètres afin d’accentuer les caractères de chaque essence. Plus un shader comportera de canaux, plus celui-ci permettra d’ajouter des caractéristiques aux matériaux qui l’utilisent.
Les textures sont exprimées dans les matériaux au travers des propriétés induites par le shader. Grâce à ces dernières, nous pouvons faire varier les propriétés sur la surface de l’objet. Ainsi, un matériau métallique utilisant un shader approprié pourrait voir apparaitre des rayures sur certaines zones de sa surface et pas sur d’autres. Dans ce cas particulier, par exemple, nous utiliserions une height-map agissant sur la propriété de rugosité. La rugosité varierait de 0 à 100%, selon que l’on se trouve sur une zone définie plutôt noire (0%) ou plutôt blanche (100%), en passant par des nuances de gris avec une rugosité d’environ 50%.
En pratique
Actuellement, nous créons les shaders de manière intuitive au travers des diagrammes nodaux. Nous construisons un type de matériau en ajoutant des briques les unes après les autres, la brique de la brillance, celle de la transparence, celle de la rugosité etc.
En fonction du mode de rendu, des shaders de natures différentes seront créés si la situation l’exige. Il s’agit d’une sous-étape qui peut prendre du temps et qui permettra d’exploiter au mieux les textures. Toutefois, il existe un certain nombre de shaders déjà créés, rendant cette tâche plus courte. Malgré tout, il convient de passer par une personnalisation de ces derniers qui apportera à coup sûr une touche d’originalité au projet.
Conclusion
Le shader définit donc l’apparence d’une série de matériaux obéissant à un même concept.
Les matériaux exploitent les propriétés du shader pour exprimer des matières en particulier.
Les textures terminent en s’exprimant au travers des propriétés.
On se retrouve dans le prochain article de la série qui traitera de l’éclairage sur les scènes 3D ? 😎
A très vite,
Jean-Philippe
Comments