Dans Unreal Engine, l'instanciation des matériaux permet de modifier l'apparence d'un matériau sans devoir procéder à une recompilation coûteuse de ce dernier.
Alors qu'un matériau classique ne peut être modifié sans recompilation (ce qui doit se produire avant le jeu), un matériau paramétré peut être modifié dans une instance de matériau sans cette recompilation. Cela présente de nombreux avantages en termes de flux de travail, et peut améliorer les performances du matériau.

Une instance de matériau ouverte dans l'Éditeur d'instance de matériau. Vous pouvez personnaliser les attributs énumérés sous Groupes de paramètres à partir de cette interface.
Certains types de matériaux instanciés peuvent même changer pendant le jeu en réponse à des événements du jeu (comme un arbre dont le matériau noircit et se carbonise lorsqu'il brûle). Cela permet une grande flexibilité visuelle dans vos éléments artistiques.
Héritage de matériau
La relation entre les matériaux et les instances de matériaux est une relation hiérarchique parent-enfant. Une instance de matériau hérite de tous ses attributs du matériau parent (ou maître). Par exemple, voici le graphique des matériaux pour l'un des accessoires de chaise qui se trouvent dans le contenu de démarrage :

Toute instance de matériau créée à partir de M_Chair hérite de tous les attributs du graphique ci-dessus.

Notez les conventions d'affectation des noms utilisées ci-dessus. Il s'agit d'une bonne pratique à adopter afin de pouvoir identifier facilement les matériaux parents et les instances de matériaux dans le Navigateur de contenu.
- Le préfixe M_ désigne un matériau parent, comme dans M_Chair.
- Le préfixe MI_ désigne une instance de matériau, comme dans les deux exemples illustrés à droite.
Comme elles héritent des attributs du parent, les instances de matériau nouvellement créées apparaissent identiques au matériau parent lorsqu'elles sont appliquées aux objets du niveau. Dans l'image ci-dessous, le matériau parent est appliqué à la chaise située à l'extrême gauche, tandis que les chaises du centre et de droite utilisent des instances de matériau non modifiées.

Le principal avantage des instances de matériau en termes de flux de travail est que vous pouvez les personnaliser très rapidement à l'aide de l'Éditeur d'instance de matériau sans jamais modifier le graphique de nœuds ni recompiler le matériau.
Dans la vidéo ci-dessous, les deux instances de matériau sont ouvertes à partir du Navigateur de contenu et modifiées dans l'Éditeur d'instance de matériau. Les modifications apparaissent immédiatement dans la fenêtre principale, alors que la recompilation d'un matériau standard peut prendre jusqu'à une minute, selon la complexité.
Paramétrage de matériau
Il est important de savoir que vous ne pouvez pas modifier chaque caractéristique d'une instance de matériau par défaut. Pour que les attributs d'un matériau puissent être modifiés dans une instance, vous devez les désigner comme paramètres dans le matériau parent. C'est ce qu'on appelle paramétrer votre matériau.
Un paramètre est créé comme tout autre nœud de données dans l'Éditeur de matériau et contient les mêmes informations que son homologue non paramétré.
Par exemple, une expression Constante contient une seule valeur à virgule flottante, et est fréquemment utilisée pour contrôler les entrées de matériaux comme la rugosité et le métal. La version paramétrée de ce nœud est appelée un Paramètre scalaire.

Paramètres d'expression de matériau Constante (1) et scalaire (2).
Notez que le paramètre scalaire devient également une valeur nommée qui sert de conduit pour envoyer des valeurs de données dans une instance de matériau. Il est important que vous donniez à chaque paramètre un nom unique et descriptif dans le panneau Détails. Sélectionnez le nœud dans le graphique des matériaux pour accéder à ses propriétés dans le panneau Détails.

Dans l'exemple ci-dessus, le nom du paramètre est Rugosité, et sa valeur par défaut est de 0,25.
Dans le matériau paramétré simple illustré ci-dessous, un paramètre Vectoriel est connecté à l'entrée Couleur de base, tandis que des paramètres Scalaires sont branchés sur Métallique et Rugosité.

Pour illustrer davantage l'idée de paramétrage, une valeur constante de 0,5 est également passée dans l'entrée Spéculaire.
Lorsqu'ils sont ouverts dans l'Éditeur d'instance de matériau, les trois paramètres sont exposés et modifiables, alors que la constante ne l'est pas. Les valeurs que vous voulez exposer aux artistes doivent être des paramètres, et les valeurs que vous ne voulez pas que quelqu'un change doivent rester des constantes.

Les paramètres de Couleur de base, Métallique et Rugosité sont modifiables dans l'Éditeur d'instance de matériau, alors que la valeur de la constante n'est pas exposée aux artistes.
Types de paramètres
Les paramètres peuvent être utilisés n'importe où dans votre graphique de matériaux pour piloter une large gamme d'effets de matériaux.
Certains des principaux types de paramètres sont décrits ci-dessous, et une liste complète des [Expressions de paramètres] (designing-visuals-rendering-and-graphics/materials/material-expressions/parameters) se trouve ici.
Paramètres scalaires
Un ScalarParameter est un paramètre qui contient une seule valeur à virgule flottante. Les paramètres scalaires peuvent produire n'importe quel effet basé sur des valeurs uniques, comme on l'a vu dans les exemples Rugosité et Métallique ci-dessus.
Les paramètres scalaires sont également fréquemment utilisés pour contrôler le facteur de multiplication d'un attribut.

Dans ce graphique, un paramètre Scalaire est multiplié par une couleur solide, et le résultat est branché sur l'entrée Couleur émissive. La valeur du paramètre scalaire contrôle la force de l'effet émissif. Des valeurs plus élevées augmentent la luminosité de l'émission.
Paramètres vectoriels
Un VectorParameter est un paramètre qui contient une valeur vectorielle à 4 canaux, ou quatre valeurs à virgule flottante.

Ils sont généralement utilisés pour fournir des couleurs configurables, mais pourraient également être utilisés pour représenter des données de position ou pour piloter tout effet nécessitant des valeurs multiples.
Paramètres de texture
Le paramètre de texture le plus couramment utilisé est le TextureSampleParameter2D, qui permet de modifier les textures dans une instance de matériau.

Plusieurs autres types de paramètres de texture sont disponibles. Chacune est spécifique au type de texture qu'elle accepte ou à la manière dont elle est utilisée. Par exemple :
- TextureSampleParameterCube accepte un TextureCube ou une cubemap.
- TextureSampleParameterFlipbook accepte une FlipbookTexture.
- TextureSampleParameterMeshSubUV accepte une Texture2D qui est utilisée pour les effets sous-uv avec un émetteur de maillage.
- TextureSampleParameterMeshSubUV accepte une Texture2D qui est utilisée pour les effets de mélange sous-uv avec un émetteur de maillage.
Voir la page Référence d'expression de matériau pour une liste complète des paramètres de texture.
Paramètres statiques
Les paramètres statiques sont appliqués au moment de la compilation, ils peuvent donc être modifiés dans l'Éditeur d'instance de matériau mais pas à partir d'un script ou au moment de l'exécution.
Ils peuvent être utilisés pour masquer les branches d'un matériau. Par exemple, un paramètre StaticSwitch prend deux entrées. Il produit la première valeur si la valeur du paramètre est vraie, et la seconde si elle est fausse. Cela produit un code plus optimal car la branche qui a été masquée par un paramètre statique n'est pas exécutée au moment de l'exécution.

Voir Paramètre Static Switch et Paramètre de masque de composant statique pou en savoir plus sur les types de paramètre statique spécifique.
Un nouveau matériau est compilé pour chaque combinaison de paramètres statiques du matériau de base qui sont utilisés par les instances.
Cela peut conduire à un nombre excessif de shaders à compiler. Essayez de minimiser le nombre de paramètres statiques dans le matériel et le nombre de permutations de ces paramètres statiques qui sont effectivement utilisés.
Instances constantes et dynamiques
Il existe deux types d'instances de matériau disponibles dans Unreal Engine :
- Constante d'instance de matériau — Calculée uniquement avant l'exécution.
- Instance de matériau dynamique — Peut être calculé (et modifié) en cours d'exécution.
Constante d'instance de matériau
Une Constante d'instance de matériau est un matériau instancié qui n'est calculé qu'une seule fois, avant l'exécution. Cela signifie qu'elle ne peut pas changer pendant le jeu. Bien qu'elles restent constantes tout au long de votre jeu, elles présentent l'avantage de ne pas nécessiter de compilation.
Par exemple, si votre jeu comporte une variété de voitures avec des peintures différentes dont les couleurs ne changeront pas pendant le jeu, la meilleure approche consiste à créer un matériau maître qui représente les aspects de base d'une peinture de voiture générique. Créez ensuite des constantes d'instance de matériau pour représenter les variations pour différents types de voitures, comme différentes couleurs, différents niveaux de rugosité, etc. Cette approche a été démontrée avec l'exemple de la chaise plus haut sur cette page.
Les constantes d'instance de matériau sont créées dans le Navigateur de contenu et sont modifiées dans lÉditeur d'instance de matériau.
Instance de matériau dynamique
Une Instance de matériau dynamique (MID) est une instance de matériau à laquelle les objets calculés pourront se conformer (au moment de l'exécution). Cela signifie que pendant que vous jouez, vous pouvez utiliser un script (qu'il s'agisse d'un code compilé ou d'un script visuel de Blueprint) pour modifier les paramètres de votre matériau, et ainsi modifier votre matériau tout au long du jeu. Les applications possibles sont infinies, qu'il s'agisse de montrer différents niveaux de dommages ou de changer les couleurs de la peinture dans une visualisation architecturale.
Les MID sont créés dans un script, soit à partir d'un matériau paramétré, soit à partir d'une constante d'instance de matériau. Dans Blueprint, on prend un matériau donné dont les propriétés sont paramétrées, et on le fait passer par un nœud Créer une instance de matériau dynamique. Le résultat de ce nœud est ensuite appliqué à l'objet en question avec un nœud Définir le matériau. Cela produit un nouveau matériau qui peut être modifié pendant le jeu.

Création et utilisation des instances de matériau
La création et l'utilisation d'instances de matériau est un processus en deux étapes. Vous devez d'abord créer un matériau parent qui utilise des expressions de paramètres pour les propriétés que vous voulez pouvoir remplacer dans une instance de matériau. Vous pouvez ensuite créer une instance de matériau et personnaliser les propriétés dans l'Éditeur d'instance de matériau.
Pour savoir comment créer un matériau paramétré et l'utiliser dans une instance de matériau, lisez ici : Création et utilisation des instances de matériau.