Page 1 sur 1

[MY-AL] Modifier la normalmap d'un sous-matériau

Publié : 15 Sep 2017 17:50
par Amconline
Bonjour !

J'essaye d'expliquer clairement :

J'ai un objet personnage avec plusieurs matériaux (1 pour la tête, 1 pour le corps, et 1 pour les cheveux).
Il n'y a qu'un seul mesh skinné. (pas possible de détacher la tete du corps).
J'ai besoin de pouvoir accéder à la normalmap du matériau "Tete", pour swaper la texture.
En gros, l'effet voulu, c'est : quand mon personnage fronce les sourcils, on change la normalmap pour afficher la ride du lion. Ca permet d'alléger les polygones, c'est pratique et ça optimise bien.
Je travaille en javascript. Je sais que c'est pas l'idéal, mais pour l'instant je n'ai pas le choix.

Ci dessous, le code que j'ai fait pour le moment. Les problèmes,
1 ça ne marche pas
2 de toute façon il ne prend pas en compte le fait qu'il y a plusieurs matériaux sur l'objet, mais aucune normalmap n'est modifiée.

Je tiens a préciser que j'ai bien mis 2 textures 2D dans les slots du script dans l'inspecteur...

Code : Tout sélectionner

#pragma strict

var Textures : Texture2D[];
var numero : int = 0;

function Update () {
	if(Input.GetButtonDown("Fire1")) 
	{
		GetComponent.<Renderer>().material.SetTexture ("_BumpMap",Textures[numero]);
		if (numero == 0){
			numero = 1;
		}
		else{
			numero = 0;
		}
	} 
}
C'est le shader standard, tout bête.

Quelqu'un a une idée, s'il vous plait ?

Merci, bon weekend ! :)
Aymeric

Re: [MY-AL] Modifier la normalmap d'un sous-matériau

Publié : 15 Sep 2017 17:56
par boubouk50
Au lieu de récupérer material tu peux récupérer materials qui est le tableau de matériau (donc le multimatériau). Ensuite, il te faut le bon ID.
Le mieux c'est de récupérer le matériau dans le Start () pour n'avoir qu'à changer sa bumpMap dans l'Update () (et pas aller chercher à chaque fois le matériau).
Aussi, tout connement, tu pourrais faire une variable de matériau publique que tu renseignerais dans l'inspecteur depuis le viewport éditeur.

Re: [MY-AL] Modifier la normalmap d'un sous-matériau

Publié : 15 Sep 2017 18:15
par Amconline
Ah c'est donc ça... Materials[] gère plusieurs materiaux. Ca fait sens et c'est logique...
Ok, je vais voir ça, je pense que c'est pas loin d'être le bon truc.
Par contre, je vois pas dans quel type de variable je peux stocker mon accès à ce matériaux... C'est pas un GameObject, c'est clair.
Je vais fouiller, et si vraiment je trouve pas, je reviendrai mendier un petit coup de main...
Merci ! :)
PS : J'espère que mon code pour modifier la partie normalmap est bonne, aussi...

Re: [MY-AL] Modifier la normalmap d'un sous-matériau

Publié : 15 Sep 2017 18:47
par boubouk50
Tu peux déclarer une variable de type material ou bien un tableau de type material[]. Comme tu peux déclarer un Renderer, une Texture2D, etc. Tout type de variable existant.
Ton code me semble bon, mais c'est sans tester.
Aussi:

Code : Tout sélectionner

if (numero == 0){
	numero = 1;
}
else{
	numero = 0;
}
équivaut à

Code : Tout sélectionner

numero = 1 - numero;

Re: [MY-AL] Modifier la normalmap d'un sous-matériau

Publié : 15 Sep 2017 19:19
par Amconline
Ah ouais, très sympa l'astuce !
Merci pour tout, Boubouk50 ! :)
Je teste asap et je te dis ça.