Utiliser un vecteur different comme parametre pour chaque ve

Questions à propos du scripting Shader.
Avatar de l’utilisateur
nafasso
Messages : 23
Inscription : 15 Oct 2014 08:36

Utiliser un vecteur different comme parametre pour chaque ve

Message par nafasso » 28 Juil 2015 08:36

Salut tout le monde,

je vous explique mon probleme/ma question:
dans mon projet, j'ai un plan, une texture Cubemap et 3 fichiers images de calibration. J'ai besoin d'ecrire un shader qui utilise les donnees contenues dans les fichiers de calibration afin de placer ma texture a l'endroit souhaite sur mon plan qui represente un ecran.
Dans chaque fichier image, la valeur de la couleur en float represente une coordonnee (d'ou 3 fichiers:x,y,z). Je fais la lecture des fichiers images et la traduction en float pour les coordonnees dans un script a part.
Le but de cela est que si les fichiers decrivent un ecran incurve ou autre, la texture se place sur le plan representant l'ecran dans Unity de maniere a ce que lorsque ce sera projete sur l'ecran reel, ca apparaisse sans deformation.
Mon probleme ici est que je ne comprends pas comment passer ces differentes donnees a mon vertex shader. Je ne sais pas s'il est possible de passer tout un tableau de vecteur float mais meme si c'est le cas je ne pense pas que ce soit une bonne solution, du coup je suis un peu bloque. Je pensais aussi peut-etre utiliser les texcoord mais je ne comprends juste pas leur fonctionnement. Comment dois-je passer mes donnees ?

Merci d'avance pour votre temps

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par Alesk » 28 Juil 2015 10:39

C'est pas très clair, pourrais-tu décrire ce que tu veux faire en illustrant avec quelques images stp ?

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par F@B » 28 Juil 2015 11:57

Pareil c'est pas clair du tout,

texcoord c'est le leu d'UV de ton mesh
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Avatar de l’utilisateur
nafasso
Messages : 23
Inscription : 15 Oct 2014 08:36

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par nafasso » 29 Juil 2015 02:51

Hello,
ok je vais essayer de me faire plus clair.
Donc j'ai une cubemap, je veux l'afficher sur un plan dans ma scene Unity. En temps normal la texture devrait etre affichee comme sur l'image suivante:
Image

Oui mais en fait j'ai 3 fichiers images. Et prenons l'exemple de l'image X.png: la couleur de chaque pixel de cette image, traduite en float, correspondra a la coordonnee X de ce pixel dans ma cubemap (en gros ca permettra de changer l'affichage de la texture), idem pour les 2 autres coordonnees.

Donc au final, si mes 3 fichiers images decrivent un ecran incurvé, je souhaiterai que la texture soit affichee en consequence sur mon plan, comme sur l'image qui suit :
Image

Au passage desole pour le ridicule des images que je vous poste mais j'ai fait ca sous paint en 5 min, c'est surtout pour vous faire visualiser le truc.

Donc au final mon probleme est que, une fois avoir traduit les 3 images en coordonnees x,y et z (float), je ne sais pas comment passer celles ci a mon shader. Faire une deformation selon un coefficient, ca je sais faire, mais la il me faut faire l'operation selon un vecteur(x,y,z) different pour chaque pixel ...


EDIT: je pense que j'ai trouve une solution a mon probleme. Je vais essayer de passer par la texcoord1 que je vais initialiser comme etant egal a mes coordonnees, collectees depuis mes fichiers images, grace a la classe Mesh.
N'hesitez pas a me dire si c'est une mauvais solution.

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

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par boubouk50 » 29 Juil 2015 09:30

Je ne suis toujours pas sur de comprendre l'idée. Soit c'est tellement évident qu'il faut juste un jeu de coordonnée de texture pour plaquer ta texture comme il faut sur le plan, soit je rate quelque chose:
Il te faut 3 coordonnées de texture et tu peux n'en avoir que 2 du coup, tu créés 2 images de coordonnées de texture (X.png et Y.png) qui te donne les nouvelles coordonnées de texture en fonction de celle enregistrée dans le mesh (ou bien les pixels à l'écran?)?
"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
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par Alesk » 29 Juil 2015 10:32

Oué... moi j'ai toujours pas compris >_<
Pour le moment, essaye de décrire ça sans trop expliquer ce que tu comptes faire techniquement, dis-nous juste ce que tu as comme données de départ et ce que tu veux obtenir au final, avec des images plus parlantes, et même un rendu final (au pire fait à la main) de ce que tu voudrais.

Avatar de l’utilisateur
nafasso
Messages : 23
Inscription : 15 Oct 2014 08:36

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par nafasso » 30 Juil 2015 02:42

Ok ok desole d'etre aussi confus. C'est clair dans ma tete mais c'est complique de mettre des mots dessus.

En gros j'ai 3 tableaux de float que j'obtiens dans un script C#, tabX, tabY,tabZ, qui correspondent aux 3 coordonnees de chaque pixel du plan dans la cubemap a afficher. En gros je voudrais savoir comment faire pour passer ces coordonnees a mon shader.
C'est coordonnees sont sensees afficher la cubemap de maniere deformee sur le plan si les coordonnees collectees decrivent une surface non plane.

Image
Si le plan decrit par les coordonnees TabX, TabY, TabZ est un ecran courbe comme celui la, alors l'image devra apparaitre deformee.

Mais au pire j'ai juste besoin de comprendre comment passer un set de coordonnees a mon shader.
Si je passe un simple vecteur3, alors cela signifie que ce sera le meme utilise pour chaque pixel ce qui ne me convient pas. Il faut que je puisse passer par exemple TabX[1], TabY[1] et TabZ[1] pour mon premier pixel, TabX[2], TabY[2] et TabZ[2] pour le deuxieme etc ...
Je pense qu'il faut que j'utilise TEXCOORD mais je ne sais pas comment faire pour passer mes donnees dans cette variable.

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

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par boubouk50 » 30 Juil 2015 09:26

Tu fais une projection sur un écran qui peut changer donc tu veux paramétrer les différentes projections pour pas qu'il y ait de déformation sur ceux-ci, si j'ai bien compris.
Pourquoi te compliques tu la vie avec des shaders qui change les UVs? Tu pourrais avoir la représentation 3D de tes plans et le changer en fonction de ton écran réel.
En gros tu recrées chacun de tes écrans réel en virtuel, tu les mappes comme il faut (simple), tu les intègres dans Unity et au lieu de changer de set d'UV dans ton shader tu changes de plan virtuel à afficher.
Est-ce-que cette approche te conviendrait?
"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
nafasso
Messages : 23
Inscription : 15 Oct 2014 08:36

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par nafasso » 30 Juil 2015 09:34

Hello boubouk50,

je pense que tu as bien cerne mon intention. En theorie le fait de recreer les ecrans dans ma scene Unity et de switcher en fonction de la forme de l'ecran reel pourrait marcher mais si je le pouvais je le ferai :p
En fait je reprends ce projet et donc la partie calibration avec les 3 fichiers images n'est pas de moi.
En fait on fait un scan de l'ecran avec une kinect et on cree les images contenant les coordonnees en grace a ca. Du coup, l'ecran peut changer tout le temps et il n'y a pas de forme predefinie plus ou moins courbee. Ca peut changer du tout au tout du coup je ne vais pas m'amuser a recreer un plan correspondant dans ma scene Unity a chaque fois. L'idee serait que tout ca devienne automatique d'ou l'utilisation d'un set d'uv.
Du coup ma seule question est comment faire pour remplir un set d'uv avec des coordonnees que moi je possede, et non provenant du model lui meme. C'est la seule chose que je n'arrive pas a regler. Je voudrais juste remplir ma TEXCOORD0 avec un set de coordonnees :)

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

Re: Utiliser un vecteur different comme parametre pour chaqu

Message par boubouk50 » 30 Juil 2015 10:06

Que fais-tu de ses 3 tableaux? Peux-tu générer une image avec? Genre XYZ correspondrait à RGB.
Tu pourrais ensuite appeler cette image dans le shader et récupérer les valeurs en fonction des coordonnées du pixel. La couleur récupérée deviendrait alors la coordonnée de texture à appliquer sur ton plan.
Est-ce l'idée?
"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 »