Commençons cette section par un schéma pour comprendre ce que sont les Materials Instances.
Comme vous pouvez le voir dans ce schéma, on réalise un Material Parent Métal. À partir de celui-ci, on crée deux Materials enfants (cuivre et or) à partir du même Material Parent. On dit que ces Materials Enfants sont des instances du Material Parent. Les Materials enfants possèdent toutes les caractéristiques du Material Parent. Ce sont des copies auxquelles on va simplement ajouter des caractéristiques supplémentaires qui leur seront spécifiques.
La création d’un Material Instance
Pour créer un Material Instance, il faut créer un Material parent (cf schéma). Dans votre dossier Material
(dans le Content Browser), créez un material et nommez-le « M_Material ». Double-cliquez dessus pour ouvrir le Material Editor mais cette fois vous n’allez pas créer une constante car nous voulons pouvoir modifier la valeur à notre souhait.
Faites un clic droit dans le Graph et tapez « Vector Parameter » dans la barre de recherche.
Saisissez maintenant une couleur en cliquant sur le noir de votre vecteur de couleur afin de faire apparaître la sélection des couleurs puis saisissez-en une. Pour moi, ce sera du orange. La première barre verticale représente la saturation, la seconde la valeur de votre couleur.
Recliquez sur votre boîte Vector Parameter, puis modifiez son nom via la fenêtre Details. Vous devriez voir dans cette fenêtre le paramètre Parameter Name. Changez-le en « Couleur » .
Maintenant, nous allons créer deux autres paramètres, mais attention, pas des Vector Parameter. Nous allons créer des Scalar Parameter. Saisissez-en deux. Nommez le premier Metallic et le second Roughness (les noms sont très importants !).
Reliez ensuite le Vector Parameter à la « Base Color », Metallic à Metallic puis Roughness à Roughness.
Et voilà ! Le plus dur a été fait. Maintenant, appuyez sur Apply pour appliquer vos changements à votre Material puis fermez cette fenêtre pour retourner dans l’éditeur.
Utilisez une instance
Dans le Content Browser, sélectionnez votre MaterialM_Material
. Effectuez un clic droit et sélectionnez Create Material Instance.
Un nouveau Material devrait apparaître dans votre Content Browser.
Placez maintenant le cube Shape_Cube dans votre scène. Celui-ci se trouve dans le dossier Content > StarterContent > Shapes. Quand ce Mesh se trouvera dans votre scène, sélectionnez-le et remplacez son Material par le Material Instance que vous venez de créer (M_Material_Inst
).
Maintenant, sélectionnez votre Material Instance à partir du Content Browser et faites un double-clic dessus afin de l’ouvrir.
On observe que les paramètres mis précédemment dans le Material ont été affectés à cette instance. Cochez tous les paramètres (Couleur, Metallic, Roughness) et changez les valeurs. Après, diminuez la taille de cette nouvelle fenêtre et tentez de changer ces valeurs en regardant votre Mesh : vous observerez que les différents paramètres changent en temps réels. Quand vous serez satisfaits du résultat, sauvegardez votre instance et quittez le Material Editor.
Modifiez les matériaux depuis l’éditeur avec Construction Script
Avant de clôturer cette initiation aux Materials, je voudrai vous montrer une astuce qui vous permettra de modifier facilement les propriétés d’un Material sans avoir besoin de rentrer dans le Material Editor. Pour cela, il nous faut créer un Blueprint !
Placez vous dans le dossier Blueprint situé dans le StarterContent. Une fois dans le dossier, cliquez sur Add New puis Blueprint Class et choisissez Actor. Renommez votre Blueprint en « B_CustomMesh ».
Double-cliquez sur le Blueprint que vous venez de créer. Cliquez sur Open Full Blueprint Editor pour ouvrir l'éditeur Blueprint.
Dans les Composants en haut à gauche, ajoutez un Static Mesh puis quand cela est fait, dans la fenêtre Details, saisissez un Mesh (peu importe lequel). Cliquez sur l’onglet Construction Script, et non Event Graph comme nous avions l’habitude de le faire.
Le Construct Script, contrairement à l’Event Graph, a pour but d’initialiser le contenu du Blueprint. Les programmeurs seront plus familiarisé avec le terme de "Constructeur". Cela veut dire que c'est la première chose que la classe Blueprint exécutera dans le niveau. En plus, cela nous permettra de modifier facilement le Mesh choisi, directement à partir de l’éditeur. Vous allez voir c’est facile. À partir du bloc Construction Script, faites une liaison et ajoutez Create Dynamic Material Instance (StaticMesh) afin de faire référence directement au Mesh que vous avez choisi.
Ensuite, toujours dans la fonction (Create Dynamic Material Instance
), changez le paramètre Source Material et saisissez « M_Material », notre material Parent.
Prenez ensuite Return Value et faites une liaison. Créez une nouvelle variable que vous nommerez «Material_Instance ». Elle se trouve dans la fenêtre de gauche My Blueprint mais vous pouvez aussi la renommer via le menu Details situé à votre droite. Cette variable va servir à stocker les valeurs que nous voulons définir (set) par la suite.
À partir de cette nouvelle variable, liez la partie bleue et cherchez dans la barre de recherche « Set Vector Parameter Value ».
Dans cette fonction, changez le paramètre "Parameter Name" en « Couleur ». C’est le nom que vous avez saisi dans votre Material Parent (M_Material
), rappelez-vous.
On veut que le paramètre Value de la fonctionSet Vector Parameter Value
agisse sur la couleur. Cela nous permettra de la modifier facilement depuis l’éditeur principal d’UE4. Pour cela, sélectionnez Value et faites Promote To Variable et renommez cette variable en « Couleur ».
Pour pouvoir éditer (mettre à jour, définir) la couleur directement depuis l’éditeur, il ne faut pas oublier d’activer le petit œil juste à côté de la variableColor
. Si l’œil est ouvert, la variable est visible (public). S'il est fermé (private), même si vous avez correctement réalisé votre Construction Script, vous ne pourrez pas modifier la couleur. Cliquez sur Compile et fermez cette fenêtre.
Il ne vous reste plus qu’à retourner dans l’éditeur. Sélectionnez le Blueprint que vous avez créé et placez-le dans le niveau. Si vous sélectionnez votre BlueprintB_CustomMesh
dans le niveau, vous pouvez maintenant modifier sa couleur facilement directement depuis le panneau Details.
Ouais mais euh... C'est la même chose que tout à l'heure non ? C'est quoi l’intérêt ?
L'intérêt, c'est que si vous placez plusieurs fois votre classe Blueprint "B_CustomMesh" dans le niveau, la couleur de chaque Blueprint sera indépendante. Tandis que le material instance que nous avions paramétré sera le même pour tous ! Un exemple sera peut-être plus limpide.
Puisque les sphères ont une material instance générée individuellement, on peut changer la couleur de la première sans que celle-ci soit affectée aux autres. Tandis que les cubes au premier plan auront le même material instance et donc, quoi qu'il arrive, la même couleur. C'est le "M_Mat_Inst". L'intérêt est donc de pouvoir modifier individuellement chaque Blueprint sans interférer avec les autres ! C'est super pratique comme système et ce système est possible grâce aux classes !
Et voilà ! Nous en avons terminé avec cette introduction aux Materials ! Cette partie fut assez longue, j’espère n’avoir perdu personne en cours de route !
Vous avez appris à réaliser un Material Instance à partir d'un Material Parent.
Vous êtes capables de modifier différents paramètres d'un Material Instance.
Vous savez utiliser un Material Instance avec Blueprint.
On a appris beaucoup de choses durant cette partie, il ne nous reste plus qu’à continuer : c’est parti pour la suite sur Blueprint !