[RÉSOLU] Introduire une webCamTexture dans un Shader

Questions à propos du scripting Shader.
Répondre
Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

[RÉSOLU] Introduire une webCamTexture dans un Shader

Message par Master_Bruce_ » 23 Nov 2017 16:05

Bonjour à tous;
Je suis actuellement en train de bosser sur un projet dans lequel j'aurai besoin d'introduire une webCamTexture dans un Shader, je m'explique.
Mon projet présente une fonctionnalité "Prise de Photo", l'idée est que je souhaiterai pouvoir appliquer un "filtre" sur la photo prise.
Mes recherches mon amené à m'intéresser aux Shaders. Mon Shader comporterait la photo prise en tant que texture et une autre texture de mon choix. De ce fait il faut que je récupère le rendu de ma caméra (en tant que texture) dans un champ de mon Shader.

Auriez-vous des pistes sur :
  • - Comment appeler la texture depuis mon fichier .shader
ou
  • - Comment insérer ma webCamTexture dans l'Inspector de mon Shader, via un certain GameObkect?
J'ai fait quelques recherches mais je n'ai, malheureusement, réussi à trouver une solution.

En vous remerciant d'avance pour votre aide,

MBruce
Dernière édition par Master_Bruce_ le 27 Nov 2017 17:05, édité 1 fois.

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

Re: Introduire une webCamTexture dans un Shader

Message par boubouk50 » 23 Nov 2017 16:19

WebCamtexure hérite de Texture, lorsque par code tu mets ta WebCamTexture en tant que texture de ton matérial, il devient pas accessible depuis le shader?
Je veux dire par là, que si tu as un unlit texture shader, en mettant la webCamTexture en texture elle ne devient pas la mainTex de ce shader?

EDIT - par exemple, ce chromaKey Shader doit marcher avec des vidéos (sinon aucun intérêt) et on ne voit rien concernant la vidéo en entrée, ce sera une texture qui changera avec le temps finalement. Le traitement dépend de l'entrée et elle n'est pas figée.
https://pastebin.com/rxJak3jB
"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

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: Introduire une webCamTexture dans un Shader

Message par Master_Bruce_ » 23 Nov 2017 16:51

Boubouk,
Tout d'abord merci pour ton rapide retour.

Le truc ce que je n'ai pas trouvé comment appelé cette texture dans le .shader ou bien dans l'inspector de ce dernier.
A savoir que cette webCamTexture devint une texture de mon matériau au Runtime.

MBruce

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

Re: Introduire une webCamTexture dans un Shader

Message par boubouk50 » 23 Nov 2017 17:15

Je pense que tu dois forcément passer par du code.
Tu crées un WebCamTexture, l'initialise et le balance dans le matériau de l'objet souhaité.

Je t'ai trouvé un exemple avec du code qui montre bien que la texture est entrée dans la mainTex du shader:
https://livierickson.com/blog/5-minute- ... n-unity-5/

Code : Tout sélectionner

// Use this for initialization
void Start () {
_webcamtex = new WebCamTexture();
Renderer _renderer = GetComponent<Renderer>();
_renderer.material.mainTexture = _webcamtex; //ICI TU AS BIEN LA WEBCAM EN ENTREE SHADER MAINTEX
_webcamtex.Play();
}
Maintenant à toi d'écrire le 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

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: Introduire une webCamTexture dans un Shader

Message par Master_Bruce_ » 24 Nov 2017 12:07

J'avais déjà réussi à faire ça auparavant, aujourd'hui je peux prendre des photos avec ma webcam etc.. C'est juste que je ne sais pas comment appeler cette texture dans mon Shader.

Comment via mon Renderer j'accède à la texture depuis le Shader?

MBruce

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

Re: Introduire une webCamTexture dans un Shader

Message par boubouk50 » 24 Nov 2017 12:39

Non, mais le shader il s'en moque éperdument de ton renderer.
Lui tout ce qu'il attend ce sont ces entrées. Et ici, l'entrée est une texture, en l'occurence mainTex si tu la mets en mainTexture depuis ton code.
En gros, tu vas avoir ton initialisation de caméra qui va donner son flux image par image (donc texture, elle n'est pas figée, ça change de texture automatiquement image par image) au matériau.
Ensuite tu as ton shader qui a en entrée la texture donnée par le matériau, donc en l'occurrence le flux vidéo.
Tout ceci n'est pas fixe, à chaque image rendue le shader appelle son entrée, donc prend l'image filmée à l'instant t et fait sa tambouille avec. A l'instant t+1, il aura une autre entrée (texture t+1), mais pour lui ça ne change rien, il recalcule tout.
"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

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: Introduire une webCamTexture dans un Shader

Message par Master_Bruce_ » 24 Nov 2017 16:16

A mon avis je me suis très mal fait comprendre, c'est ma faute.
Je t'expose plus clairement mon problème :

Si tu veux, par l'intermédiaire d'une rawImage et d'une webcamTexture je créé un dispositif de prise de photo

Code : Tout sélectionner

  public RawImage rawimage;
    WebCamTexture webcamTexture;
(...]

Code : Tout sélectionner

   void Start()
    {
       // camDevice correspond au tableau des camera dispo sur l'ordinateur, chacune repérée par un numéro
        WebCamDevice[] camDevices = WebCamTexture.devices;

        //Ici on récupère le nom de la caméra pour initialiser la webcamtexture
        string camName = camDevices[0].name;
        webcamTexture = new WebCamTexture(camName);

        //Rendu de la camera à l'écran
        rawimage.texture = webcamTexture;
        rawimage.material.mainTexture = webcamTexture;
  
        webcamTexture.Play();
 }
  
L'idée est que je souhaiterai appliquer un Layer sur la photo prise (avant ou après l'avoir enregistrée).

Du coup j'ai commencé à m'intéresser à la notion de Shader. J'ai compris que les Shader avaientt plusieurs entrées (pour des textures) afin de créer un nouveau matériau. J'aimerai pouvoir mettre en enrrée la texture de ma rawImaga (ou directement la webCamTexture) en entrée de mon Shader.
La texture concernée est crée au lancement du jeu, ce qui fait que j'ai besoin de faire pointer l'une de ces entrée de ce Shader vers la webCamTexture ou la texture de la RawImage m'voyez?
Et c'est ça que je n'arrive pas à faire.

Du coup je pensais qu'il faillait écrire dans le Shader et lui dire "Je veux que l'entrée 1 pointe vers rawImage.texture".

J'espère avoir été plus clair haha

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

Re: Introduire une webCamTexture dans un Shader

Message par boubouk50 » 24 Nov 2017 16:47

Je ne vois pas comment c'est possible tel quel.
Ta webcamTexture n'existe pas tant que le jeu n'est pas lancé, donc pas possible d'y accéder depuis l'éditeur, il te faut forcément la passer par code.
Je sais qu'avec Vuforia tu as un matériau/shader spécial pour cela. Quand bien même il a une texture, ce n'est pas de base la WebCamTexture qui n'existe pas dans l'éditeur mais bien un slot de texture qu'ils viennent remplir avec la WebCamTexture par script.
Ton shader pointe sur rien du tout. Il a des entrées et toi tu lui fournis ce dont il a besoin: ta webcamtexture (vide de base) et ton layer.

J'ai relu 3 fois pour être sur de ce que tu veux, de ce que je pige, tu as déjà tout ce qu'il faut. Il te faut plus qu'un shader qui applique un layer à ta vidéo.
"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

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: Introduire une webCamTexture dans un Shader

Message par Master_Bruce_ » 27 Nov 2017 17:04

Hello,
Bon bah du coup j'ai trouvé une alternative.
C'est pas terrible mais bon.. l'idée est filmé à la caméra le rendu de ma WebCam. Je peux ainsi la faire passer en entrée dans mon shader et hop le tour est joué !
C'est pas ultra sexy mais bon ça fonctionne.

Merci du coup de main !!

MBruce

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

Re: [RÉSOLU] Introduire une webCamTexture dans un Shader

Message par boubouk50 » 27 Nov 2017 17:48

Je ne comprends toujours pas pourquoi tu ne passes pas directement la WebCamtexture.
Au lieu de ça tu passes surement un RenderTexture qui est du même type... De mon siège, c'est totalement aberrant, il y a quelque chose que je ne tilte pas du tout.
C'est possible d'avoir ton code et ta procédure?
"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 »