La page [Types de données de matériau] (designing-visuals-rendering-and-graphics/materials/essential-concepts/data-types) présente les quatre modes de représentation des données dans l'Éditeur de matériaux. Pour créer des matériaux de manière efficace, il est nécessaire non seulement de connaître ces types de données, mais aussi de savoir comment manipuler les données et contrôler la manière dont les informations circulent dans votre graphique de matériaux.
Deux sujets sont abordés dans ce document.
- Manipulation des types de données : Comment combiner des floats dans un vecteur multicanal et, inversement, comment isoler des informations d'un type de données plus important.
- Arithmétique du graphique du matériau : Règles et processus pour exécuter des opérations arithmétiques dans un matériau comportant différents types de données.
Manipulation des types de données
Ce n'est pas parce qu'un élément d'information a pour origine un type de données donné qu'il doit rester ainsi. Par exemple, vous pouvez combiner ou Appliquer deux paramètres scalaires (floats) dans un vecteur à deux canaux (float2) afin de les passer dans une entrée qui nécessite des données à deux canaux. Inversement, vous pouvez utiliser un ComponentMask pour récupérer un sous-ensemble spécifique de canaux dans un vecteur plus large.
Les expressions de matériau documentées dans cette section permettent de combiner et de séparer les données afin de contrôler la manière dont les informations circulent dans votre graphique du matériau.
AppendVector
Une expression de matériau AppendVector combine les données de l'entrée A avec les données de l'entrée B, et produit un vecteur multicanal (float2, float3 ou float4). Dans cet exemple, deux constantes sont ajoutées ensemble pour produire un float2 : (1, 2).
Exemple de cas d'utilisation
Le nœud Append est souvent utile lorsque vous souhaitez pouvoir modifier deux valeurs indépendamment l'une de l'autre, mais que vous devez les transmettre à une entrée qui nécessite des données multicanaux. Le graphique ci-dessous donne aux artistes un moyen de contrôler le quadrillage ou l'échelle UV d'une texture dans une instance de matériau, mais uniquement de manière uniforme.
Le défaut de cet exemple est que le graphique des matériaux ne contient qu'un seul paramètre, mais que les coordonnées UV ont deux canaux. Avec cette solution, vous ne pouvez pas contrôler indépendamment la largeur et la hauteur de la texture.
Vous pouvez résoudre ce problème en utilisant un AppendVector. Créez un paramètre scalaire distinct pour chaque axe, puis passez-les dans le nœud Append. Le nœud Append combine les deux paramètres dans un float2, qui est ensuite multiplié par les coordonnées de la texture.
Puisque Quadrillage X et Quadrillage Y sont paramétrés séparément, vous pouvez désormais contrôler la largeur et la hauteur de la texture indépendamment.
Ordre Append
L'expression AppendVector combine les données dans l'ordre selon lequel elles sont attachées au nœud. Les données de l'entrée B sont toujours ajoutées à la fin des données de l'entrée A. Considérons les deux images ci-dessous.

- Dans la première diapositive, le résultat ajouté est (0.05, 0.2, 0.8), ou bleu clair comme le montre l'aperçu du nœud.
- Dans la deuxième diapositive, le résultat ajouté est (0.8, 0.05, 0.2), ou rose comme le montre l'aperçu du nœud.
AppendMany
AppendMany est une [fonction de matériau] (designing-visuals-rendering-and-graphics/materials/material-functions/overview) qui fonctionne de la même manière que l'expression AppendVector, mais qui peut combiner jusqu'à quatre valeurs floats/scalaires distinctes dans un vecteur multicanal.
Un avantage supplémentaire de la fonction AppendMany est qu'elle fournit trois broches de sortie différentes. Cela vous donne accès à une partie ou à l'ensemble des canaux ajoutés, en fonction de ce dont vous avez besoin dans une situation donnée.
Le nœud AppendMany n'accepte que des valeurs float/scalaires sur ses entrées. Si vous passez un float2, float3 ou float4 dans le noeud AppendMany, toutes les valeurs sauf la première sont écartées.
Masque de composant
L'expression de matériau Masque de composant sert l'objectif opposé aux nœuds Append documentés ci-dessus. Au lieu de combiner des données, un ComponentMask permet de séparer les données en leurs composants ou canaux.
Un masque de composant fonctionne comme une porte. Pour toute donnée connectée à son entrée, vous pouvez choisir exactement quels canaux sont autorisés à passer par la sortie. L'image ci-dessous montre un Constant4Vector contenant les valeurs (0, 1, 0.7, 0.5). Lorsque vous sélectionnez le nœud Masque dans le graphique, quatre cases à cocher s'affichent dans le panneau Détails.
Ces cases à cocher déterminent les canaux que le nœud produira. Actuellement, aucun n'est coché, donc le nœud Masque ne produira aucune information. Si vous tentez de le brancher sur une entrée en aval, le nœud affichera une erreur.
Ces cases à cocher vous permettent de filtrer les informations et de n'utiliser que les canaux dont vous avez besoin.
Supposons que vous vouliez utiliser la valeur du canal A pour contrôler l'opacité d'un Matériau. Vous devez activer le canal A en cochant la case, puis connecter la broche de sortie du Masque à l'Entrée Opacité.
Le ComponentMask écarte les canaux R, G et B parce qu'ils ne sont pas cochés, et ne sort que la valeur du canal A - dans ce cas, 0,5.
Arithmétique du graphique du matériau
Le deuxième moyen principal de manipuler les données dans un Graphique du matériau consiste à effectuer des opérations mathématiques. Toutes les opérations arithmétiques courantes sont disponibles dans l'Éditeur de matériaux.
Les quatre Expressions de matériau arithmétiques. Pour en savoir plus, consultez la page Expressions de matériau mathématiques.
L'objectif fondamental des nœuds arithmétiques devrait être relativement évident. Par exemple, si vous insérez des valeurs constantes de 0.3 et 0.2 dans un nœud Ajouter, le nœud Ajouter calcule 0.3 + 0.2 et produit une valeur de 0.5. L'arithmétique entre deux valeurs constantes est simple et directe.
Toutefois, comme le montre la page sur les types de données, les informations ne transitent pas toujours par le Graphique de matériau sous forme de valeurs flottantes individuelles. Pour cette raison, il est important de comprendre les règles et les processus permettant d'effectuer des opérations arithmétiques entre différents types de données dans un Matériau. Il y a deux grands sujets de préoccupation.
- Tous les types de données ne sont pas compatibles entre eux pour les opérations arithmétiques.
- Les opérations arithmétiques fonctionnent différemment selon les types de données concernés.
Types de données compatibles et incompatibles
L'exemple ci-dessus montre une simple opération d'addition entre deux valeurs floats, soit 0.3 + 0.2 = 0.5. Cette opération fonctionne, car les deux valeurs sont le même type de données. Que se passe-t-il si un type de données différent est passé dans l'une des entrées ? Ces trois points résument la compatibilité entre les types de données :
-
L'arithmétique entre types de données équivalents est toujours valide. Par exemple, float2 + float2 renvoie un nouveau float2.
-
L'arithmétique entre un float et tout autre float plus grand est valide. Par exemple, float + float3 renvoie un nouveau float3.
-
L'arithmétique entre deux types de données non équivalents est invalide. Par exemple, float2 + float3 n'est pas valide et renvoie une erreur.
En d'autres termes, l'arithmétique entre deux types de données différents est possible, mais uniquement si l'un des types de données est un float. Dans le graphique ci-dessous, l'opération 0.3 + (1,2) est valide. Le float est ajouté aux deux valeurs du float2, et le résultat est un nouveau float2 avec les valeurs 1.3, 2.3).
Cependant, l'arithmétique entre des données float2, float3 ou float4 non équivalentes renvoie une erreur.
Le tableau ci-dessous résume la compatibilité des types de données pour l'arithmétique du Graphique du matériau.
| Type de données | Types de données compatibles pour l'arithmétique |
|---|---|
| Float | Tout |
| Float2 | Float, Float2 |
| Float3 | Float, Float3 |
| Float4 | Float, Float4 |
Règles arithmétiques entre types de données
Il est également nécessaire de comprendre comment les calculs arithmétiques sont effectués entre les différents types de données. Les deux scénarios ci-dessous montrent comment l'arithmétique fonctionne lorsque l'un ou les deux types de données sont plus grands qu'un float.
Arithmétique entre types de données équivalents
Lorsque l'arithmétique se produit entre des types de données équivalents (float2 + float2 par exemple), chaque valeur de l'Entrée A est traitée par la valeur correspondante de l'Entrée B. L'exemple ci-dessous montre une addition entre deux expressions Constant2Vector.
Dans la version longue, il y a deux opérations d'addition distinctes. Les premières valeurs de chaque nœud sont additionnées : (1 + 2). Ensuite, les secondes valeurs de chaque nœud sont additionnées (3 + 3). Le résultat est un nouveau float2 : (2, 6).
Le tableau ci-dessous présente un exemple arithmétique pour chacun des quatre types de données.
| Entrée A, Entrée B | Données d'entrée | Notation mathématique | Données résultantes |
|---|---|---|---|
| Float, Float | (4) / (2) | 4 / 2 = 2 | 8 |
| Float2, Float2 | (1, 3) + (2, 3) | (1 + 2), (3 + 3) | (3, 6) |
| Float3, Float3 | (3, 2, 0.5) * (2, 1, 2) | (3 x 2), (2 x 1), (0.5 x 2) | (6, 2, 1) |
| Float4, Float4 | (2, 2, 2, 3) - (1, 1, 2, 2,) | (2 - 1), (2 - 1), (2 - 2), (3 - 2) | (1, 1, 0, 1) |
Arithmétique entre un Float et un Vecteur
Lorsque des calculs arithmétiques sont effectués entre un float et un type de données plus important, le float est utilisé de manière répétée pour chaque calcul séparé. Dans l'image ci-dessous, une Constante et un Constant3Vector sont multipliés ensemble.
Comme le montre l'illustration, la valeur de la Constante est multipliée par chaque valeur du Constant3Vector. Il existe trois expressions de multiplication distinctes : (2 3), (2 1), et (2 *2). Le produit est un float3 : (6, 2, 4).
Le fait que le float se trouve dans l'Entrée A ou l'Entrée B n'a aucune incidence sur la multiplication et l'addition, mais compte évidemment pour la division et la soustraction.
Dans l'image ci-dessus, la valeur de la Constante (2) est soustraite de chaque valeur du Constant3Vector (6, 4, 3). Écrit en notation mathématique : (6 - 2), (4 - 2), (3 - 2). Le float3 résultant est (4, 2, 1).
Si vous inversiez l'ordre d'entrée, les résultats seraient différents.
Comme le float est maintenant le nombre supérieur dans le nœud de soustraction, chaque opération arithmétique est inversée : (2 - 6), (2 - 4), (2 - 3). Le float3 résultant est (-4, -2, -1).
Conclusion
Les concepts et les techniques présentés sur cette page constituent un élément clé de la plupart des logiques du Graphique du matériau que vous utiliserez pour créer des Matériaux. Les pages de référence liées ci-dessous peuvent vous aider à améliorer votre compréhension des opérations mathématiques et de manipulation des données dans l'Éditeur de matériaux.