Aller au contenu principal

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.

Tout matériau est déjà un graphe

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égorieCe qui s'y trouve
inputUV, normale de surface, temps, position, textures, quelle instance est dessinée
constdes nombres et des couleurs fixes que vous saisissez
matharithmétique et courbes sur des nombres simples
vectorconstruire, séparer, mélanger et transformer vecteurs et couleurs
lightdes termes d'éclairage que vous façonnez vous-même
postdes 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 :

SortieSignifie
baseColorla couleur de la surface
metallic0 pour un diélectrique, 1 pour du métal nu — rarement entre
roughness0 lisse comme un miroir, 1 complètement mat
normalfournissez votre propre normale pour ajouter du détail
emissivela lumière émise par la surface elle-même
alphala transparence
clearcoat · clearcoatRoughnessune couche de laque par-dessus
ior · transmission · thicknessla 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.

C'est ce qui empêche mille objets de ressembler à un seul

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.

Marquez les textures de données comme données

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 ».

Un script ne peut pas entrer dans un graphe

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 voulezFaites
Quelque chose qui s'anime tout seulutilisez l'entrée time dans le graphe — pulsation, défilement, scintillement, tout cela appartient là
Quelque chose piloté par l'état du jeupilotez 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.