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

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Amconline
Messages : 32
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 15 Sep 2017 17:50

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

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 15 Sep 2017 17:56

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.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Amconline
Messages : 32
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 15 Sep 2017 18:15

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...

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 15 Sep 2017 18:47

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;
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Amconline
Messages : 32
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 15 Sep 2017 19:19

Ah ouais, très sympa l'astuce !
Merci pour tout, Boubouk50 ! :)
Je teste asap et je te dis ça.

Verrouillé

Revenir vers « (Js) Javascript »