[Resolu] Paramètre global pour toutes les occurences d'un shader

Questions à propos du scripting Shader.
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6214
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

[Resolu] Paramètre global pour toutes les occurences d'un shader

Message par boubouk50 » 20 Nov 2015 14:47

Salut vous,

Encore et toujours entrain de tripatouiller les shaders ^^.

Cette fois-ci, je cherche à avoir un paramètre de shader (couleur) qui soit lié à une variable de script. Mais que ce soit le shader qui aille chercher l'info et pas moi qui passe l'info via le script. Le but est que si je change la couleur, le shader change automatiquement de couleur. Et non pas, que j'envoie l'info à tous les matériaux qui utilisent le shader.
La raison est simple, j'ai 168 matériaux sur 168 gameObjects, et actuellement je dois stocker ou aller chercher les matériaux qui utilisent ce shader, puis pour chacun remplacer la couleur. Je trouve cela très bourrin.
Alors qu'à l'inverse, si le shader va chercher la couleur ailleurs que dans le matériau, dans une variable unique et statique, alors le simple fait de changer cette couleur changera toutes les occurences du shader.
Est-ce possible? Si oui, ben, je cherche l'info :cote:

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

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

Re: Paramètre unique pour toutes les occurences d'un shader

Message par boubouk50 » 20 Nov 2015 15:00

Non, mais c'est pas vrai, je trouve toujours 5 minutes après un post...

Shader.SetGlobalColor

Définir une variable dans le Pass du Shader (ne doit pas figurer dans les Properties). L'initialiser puis la changer depuis un script via Shader.SetGlobalXXX ().
Ex:
Shader

Code : Tout sélectionner

Pass {...
fixed4 _OrthoColor;
...
Script

Code : Tout sélectionner

Shader.SetGlobalColor ("_OrthoColor", Color.white);
"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

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [Resolu] Paramètre global pour toutes les occurences d'un shader

Message par Iwa » 20 Nov 2015 15:15

On est ton pense-bête ^^. Mais c'est bien ça donne des super réponses ;).

Par contre ça ne fonctionnera pas si les couleurs d'Albedo où autre alors. Si jamais tu veux impacter la couleur de l'Albedo tu seras obligé de l'assigner après? Faut que je me mette au shader, c'est aussi génial qu'obscur je trouve!
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

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

Re: [Resolu] Paramètre global pour toutes les occurences d'un shader

Message par boubouk50 » 20 Nov 2015 15:34

Tu ne peux changer globalement qu'une variable que tu définis dans ton code. Après tu peux en faire ce que tu veux, comme l'assigner à l'albedo dans ton shader, par ex.
Dans mon cas, j'ai créé un shader Unlit qui récupère des ombres. Donc il ne réagit pas à la couleur des Lights présentes dans la scène. Pour ce faire, j'envoie la couleur de la lumière principale par le SetGlobalColor () que je récupère donc dans mon shader puis qui est multipliée par la texture. Comme ça, mon shader réagit aux ambiances lumineuses de ma scène en fonction du temps, de l'aube au crépuscule, sans faire de calcul de lumière.
"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

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [Resolu] Paramètre global pour toutes les occurences d'un shader

Message par Iwa » 20 Nov 2015 15:51

Je note dans un coin de ma tête ^^
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

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

Re: [Resolu] Paramètre global pour toutes les occurences d'un shader

Message par boubouk50 » 20 Nov 2015 16:54

Bon, mon exemple est stupide puisque je peux récupérer la couleur de la lumière dans la Pass...

Code : Tout sélectionner

#include "AutoLight.cginc"
...
fixed4 _LightColor0; //à déclarer
ou bien directement accessible avec _LightColor0 sans le AutoLight.cginc
"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

Répondre

Revenir vers « les Shaders »