Graphes de matériaux
Les types de matériaux standards couvrent l'essentiel des besoins d'un projet. Quand ils ne suffisent pas, vous pouvez bâtir un matériau en graphe : connectez des nœuds, et l'éditeur les compile en un vrai shader.
Recourez-y quand vous voulez quelque chose qu'un matériau fixe ne peut pas exprimer — une texture qui défile, une dissolution, un hologramme, de l'eau, une couleur qui change avec l'angle de vue, un drapeau qui ondule.
Chaque nœud avec ses ports : référence des nœuds de shader — 95 nœuds.
Les types intégrés ne sont pas un système à part auquel on aurait greffé un graphe — standard,
physical, toon et les autres sont eux-mêmes des points dans ce même espace. Un matériau en
graphe n'est donc pas un citoyen de seconde zone : il suit le même chemin, reçoit le même
éclairage et fonctionne sur mobile.
La forme d'un graphe
Un graphe va des entrées, à travers les maths, vers les sorties.
| Catégorie | Ce qui s'y trouve |
|---|---|
| input | UV, normale de surface, temps, position, textures, quelle instance est dessinée |
| const | des nombres et des couleurs fixes que vous saisissez |
| math | arithmétique et courbes sur des nombres simples |
| vector | construire, séparer, mélanger et transformer vecteurs et couleurs |
| light | des termes d'éclairage que vous façonnez vous-même |
| post | des nœuds qui échantillonnent l'image rendue — voir effets d'écran |
| output | à quoi ressemble réellement la surface |
Les sorties de surface
Le nœud de sortie est là où finit votre graphe, et ses entrées sont la description physique de la surface :
| Sortie | Signifie |
|---|---|
baseColor | la couleur de la surface |
metallic | 0 pour un diélectrique, 1 pour du métal nu — rarement entre |
roughness | 0 lisse comme un miroir, 1 complètement mat |
normal | fournissez votre propre normale pour ajouter du détail |
emissive | la lumière émise par la surface elle-même |
alpha | la transparence |
clearcoat · clearcoatRoughness | une couche de laque par-dessus |
ior · transmission · thickness | la réfraction, pour le verre et les liquides |
Tout ce que vous laissez déconnecté garde sa valeur par défaut, et le compilateur l'élimine — une sortie que vous n'utilisez pas ne coûte rien.
Travailler avec les instances
Deux nœuds d'entrée existent spécialement pour les
objets instanciés : instanceId vous donne quelle copie est
dessinée, et instanceColor la teinte de cette copie.
Envoyez instanceId dans un hachage et chaque copie reçoit sa propre teinte, sa taille ou sa phase
d'animation — depuis un unique appel de dessin. Un champ d'herbe où chaque brin ondule un peu
différemment coûte autant qu'un champ où tous ondulent ensemble.
Les deux lisent des valeurs par défaut raisonnables sur un maillage ordinaire : un graphe qui les utilise ne casse jamais parce qu'on s'en sert ailleurs, sans instanciation.
Effets d'écran
Un graphe qui échantillonne l'image rendue n'est pas du tout un matériau de surface — c'est un effet plein écran appliqué à toute la scène. Étalonnage, vignetage, flous, lignes de balayage.
Le moteur s'en aperçoit tout seul : utilisez un nœud qui lit l'image et le graphe devient un effet plutôt que quelque chose à poser sur un objet. Plusieurs effets sur une scène s'exécutent dans l'ordre que vous donnez.
Textures et espace colorimétrique
Un nœud de texture échantillonne une ressource image. Les images de couleur sont décodées pour vous afin que les maths portent sur de vraies valeurs de couleur.
Une texture qui porte des nombres plutôt que de la couleur — une roughness map, un masque, une height map — doit être marquée comme telle, sinon elle sera corrigée en couleur et vos valeurs seront subtilement fausses. C'est la cause numéro un de « ma roughness map ne ressemble pas du tout à ce qu'elle devrait ».
Les scripts n'ont pas accès au composant de graphe : vous ne pouvez donc pas régler un paramètre de graphe depuis le code.
C'est moins limitant qu'il n'y paraît, car les deux besoins courants sont couverts :
| Vous voulez | Faites |
|---|---|
| Quelque chose qui s'anime tout seul | utilisez l'entrée time dans le graphe — pulsation, défilement, scintillement, tout cela appartient là |
| Quelque chose piloté par l'état du jeu | pilotez plutôt un slot de matériau ordinaire : un script peut écrire emissiveIntensity, color, opacity, roughness |
Ainsi, une balise qui pulse indéfiniment est un graphe qui lit time ; une balise qui s'éclaire
quand le joueur marque est un script qui écrit emissiveIntensity sur un matériau standard.
Conseils pratiques
Partez d'un préréglage. Dupliquer un matériau standard en graphe vous donne un point de départ correct et complet. Partir d'une toile vide revient à redériver un éclairage que vous n'aviez pas besoin de redériver.
Surveillez ce que vous ajoutez. Un graphe tourne pour chaque pixel, à chaque image. Une lecture de texture est bon marché ; une boucle ne l'est pas. Si le nombre d'images par seconde chute après une modification, le dernier nœud ajouté est le suspect.
Enregistrez-le comme ressource et chaque objet qui l'utilise se met à jour d'un coup — ce qui veut aussi dire un seul endroit à corriger quand le rendu est mauvais.
Suite : Particules — feu, fumée, étincelles et poussière.