L'instanciation de matériau dans l'Unreal Engine permet de changer l'apparence d'un matériau sans avoir à effectuer une recompilation coûteuse du matériau.
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 répertoriés sous Groupes de paramètres à partir de cette interface.
Certains types de matériaux instanciés peuvent même changer en cours de jeu en réponse à des événements du jeu (comme une arborescence dont le matériau noircit et se consume en brûlant). Cela offre 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ériau est une relation hiérarchique de type 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 de matériau de l'un des accessoires de chaise qui se trouvent dans le contenu de démarrage :
Toutes les instances de matériau créées à partir de M_Chair héritent de tous les attributs du graphique ci-dessus.
Notez les conventions d'affectation de 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ériau 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.
Étant donné qu'elles héritent de leurs attributs du parent, les instances de matériau nouvellement créées semblent 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œud 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 le hublot principal, alors que la recompilation d'un matériau standard peut prendre jusqu'à une minute, selon la complexité.
Paramétrisation des matériaux
Il est important de noter 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. Cette opération est appelée paramétrage de 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étrisé.
Par exemple, une expression constante contient une seule valeur à virgule flottante et est souvent utilisée pour contrôler des entrées de matériau comme la rugosité et l'aspect métallique. La version paramétrisée de ce nœud est appelée un paramètre scalaire.
Expression de matériau constante (1) et paramètre scalaire (2).
Notez que le paramètre scalaire devient également une valeur nommée qui sert de conduit pour l'envoi des valeurs de données à une instance de matériau. Il est important de donner à chaque paramètre un nom unique et descriptif dans le panneau Détails. Sélectionnez le nœud dans le graphique de matériau 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étrisé simple illustré ci-dessous, un paramètre de vecteur est connecté à l'entrée de couleur de base tandis que les paramètres scalaires sont reliés à Métallique et Rugosité.
Pour illustrer davantage le concept de paramétrage, une valeur constante de 0,5 est également transmise 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 souhaitez rendre accessibles aux artistes doivent être des paramètres, tandis que celles que vous ne voulez pas modifier doivent rester des constantes.
Les paramètres Couleur de base, Métallique et Rugosité sont modifiables dans l'éditeur d'instance de matériau tandis que les valeurs constantes ne sont pas accessibles aux artistes.
Types de paramètres
Les paramètres peuvent être utilisés n'importe où dans votre graphique de matériau pour contrôler une grande variété d'effets de matériau.
Certains des types de paramètres clés sont documentés ci-dessous. Vous trouverez la liste complète des expressions de paramètres ici.
Paramètres scalaires
Un ScalarParameter est un paramètre qui contient une seule valeur à virgule flottante. Les paramètres scalaires peuvent contrôler n'importe quel effet basé sur des valeurs uniques, comme on l'a vu dans le cas de Rugosité et Métallique ci-dessus.
Les paramètres scalaires sont également souvent utilisés pour contrôler le facteur de multiplication d'un attribut.
Dans ce graphique, un paramètre scalaire est multiplié par une couleur unie, et le résultat est connecté à l'entrée Couleur émissive. La valeur du paramètre scalaire contrôle la force de l'effet émissif. Les valeurs supérieures augmentent la luminosité de l'émission.
Paramètres de vecteur
Un VectorParameter est un paramètre qui contient une valeur vectorielle à quatre 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 contrôler tout effet nécessitant des valeurs multiples.
Paramètres de texture
Le paramètre de texture le plus couramment utilisé est TextureSampleParameter2D, qui vous permet de modifier les textures dans une instance de matériau.
Plusieurs types de paramètres de texture supplémentaires sont disponibles. Chaque texture est spécifique au type de texture qu'elle accepte ou à la façon dont elle est utilisée. Par exemple :
TextureSampleParameterCube accepte une TextureCube ou une texture cubique.
TextureSampleParameterFlipbook accepte une FlipbookTexture.
TextureSampleParameterMeshSubUV accepte une Texture2D utilisée pour les effets de sous-UV avec un émetteur de maillage.
TextureSampleParameterMeshSubUV accepte une Texture2D utilisée pour les effets de fusion de sous-UV avec un émetteur de maillage.
Consultez la rubrique Référence des expressions de matériau pour connaître la 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 dans le script ou au moment de l'exécution.
Ils permettent de masquer les branches d'un matériau. Par exemple, un paramètre StaticSwitch accepte deux entrées. Il génère la première valeur si la valeur du paramètre est true et la deuxième si elle est false. Cela permet d'obtenir un code plus optimal, car la branche masquée par un paramètre statique n'est pas exécutée à l'exécution.
Consultez les rubriques Paramètre de commutateur statique et Paramètre de masque de composant statique pour plus d'informations sur les types de paramètres statiques.
Un nouveau matériau est compilé pour chaque combinaison de paramètres statiques dans le matériau de base utilisé par les instances.
Cela peut entraîner un nombre excessif de shaders qui doivent être compilés. Essayez de minimiser le nombre de paramètres statiques dans le matériau ainsi que les permutations de ceux qui sont effectivement utilisés.
Instances constantes et dynamiques
Il existe deux types d'instances de matériau disponibles dans l'Unreal Engine :
Instance de matériau constante — Calculée uniquement avant l'exécution.
Instance de matériau dynamique — Peut être calculée (et modifiée) à l'exécution.
Instance de matériau constante
Une instance de matériau constante est un matériau instancié qui n'est calculé qu'une fois, avant l'exécution. Cela signifie qu'elle ne peut pas être modifiée pendant le jeu. Même si elles restent constantes pendant tout le jeu, elles présentent l'avantage en termes de performance de ne pas nécessiter de compilation.
Par exemple, si votre jeu comporte une variété de voitures avec des tâches de peinture 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 instances de matériau constantes pour représenter les variations de différents types de voitures, comme les différentes couleurs, les niveaux de rugosité variables, etc. Cette approche a été illustrée dans l'exemple de la chaise mentionné plus haut sur cette page.
Les instances de matériau constantes 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 un matériau instancié qui peut être calculé pendant le jeu (au moment de l'exécution). Cela signifie qu'au cours du jeu, vous pouvez utiliser un script (soit du code compilé, soit un script visuel Blueprint) pour modifier les paramètres de votre matériau, modifiant ainsi ce matériau tout au long du jeu. Les applications possibles sont infinies : afficher différents niveaux de dégâts ou changer les couleurs de peinture dans une visualisation architecturale, par exemple.
Les MID sont créées dans un script, soit à partir d'un matériau paramétrisé, soit à partir d'une instance de matériau constante. Dans Blueprint, on prend un matériau donné avec des propriétés paramétrisées, puis on le transmet via un nœud Create Dynamic Material Instance. Le résultat de ce nœud est ensuite appliqué à l'objet concerné avec un nœud Set Material. Cela produit un nouveau matériau qui peut être modifié pendant le jeu.
Créer et utiliser des instances de matériau
La création et l'utilisation d'instances de matériau sont un processus en deux étapes. Vous devez d'abord créer un matériau parent qui utilise des expressions de paramètre 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 en personnaliser les propriétés dans l'éditeur d'instance de matériau.
Pour apprendre à créer un matériau paramétrisé et l'utiliser dans une instance de matériau, consultez la rubrique : Créer et utiliser des instances de matériau.