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
Merci.
[Resolu] Paramètre global pour toutes les occurences d'un shader
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
[Resolu] Paramètre global pour toutes les occurences d'un shader
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Paramètre unique pour toutes les occurences d'un shader
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
Script
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;
...
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [Resolu] Paramètre global pour toutes les occurences d'un shader
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!
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
... 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
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [Resolu] Paramètre global pour toutes les occurences d'un shader
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [Resolu] Paramètre global pour toutes les occurences d'un shader
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
... 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
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [Resolu] Paramètre global pour toutes les occurences d'un shader
Bon, mon exemple est stupide puisque je peux récupérer la couleur de la lumière dans la Pass...
ou bien directement accessible avec _LightColor0 sans le AutoLight.cginc
Code : Tout sélectionner
#include "AutoLight.cginc"
...
fixed4 _LightColor0; //à déclarer
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation