Shaders & Compagnie
2 participants
Page 1 sur 1
Shaders & Compagnie
Bonjour,
Je m'occupe actuellement de modéliser l'accomodation de l'oeil et applicant divers flous successif suivant la profondeur du z-buffer et pour cela j'utlise donc une convolution de matrice au niveau d'un fragment shader.
Cependant cette technique ne fonctionne que sur un sampler2D ou 3D, il m'est donc necessaire d'avoir une texture en entrée, ce qui ne sera pas toujours le cas, je me doute bien que nombreuses sont les scènes sans aucune textures... ou pires, avec plusieurs textures cachés dans les divers neouds de la scène...
Corrigez moi si je me trompe mais il me semble qu'au niveau d'un fragment shader on n'a pas accès aux informations relatives aux pixels adjacents (hormis l'utilisation de texture*D()... ) donc a moins de créer a chaque fois une texture factice de toute la scène, une sorte de capture d'ecran, il me sera impossible de réaliser une quelconque convolution ? Dois-je donc continuer dans cette voie ou faut il commencer a réfléchir a un autre moyen ?
Je m'occupe actuellement de modéliser l'accomodation de l'oeil et applicant divers flous successif suivant la profondeur du z-buffer et pour cela j'utlise donc une convolution de matrice au niveau d'un fragment shader.
Cependant cette technique ne fonctionne que sur un sampler2D ou 3D, il m'est donc necessaire d'avoir une texture en entrée, ce qui ne sera pas toujours le cas, je me doute bien que nombreuses sont les scènes sans aucune textures... ou pires, avec plusieurs textures cachés dans les divers neouds de la scène...
Corrigez moi si je me trompe mais il me semble qu'au niveau d'un fragment shader on n'a pas accès aux informations relatives aux pixels adjacents (hormis l'utilisation de texture*D()... ) donc a moins de créer a chaque fois une texture factice de toute la scène, une sorte de capture d'ecran, il me sera impossible de réaliser une quelconque convolution ? Dois-je donc continuer dans cette voie ou faut il commencer a réfléchir a un autre moyen ?
Olivier- Nombre de messages : 323
Date d'inscription : 23/01/2007
Re: Shaders & Compagnie
Bonsoir;
Le flou agira sur le résultat du rendu de la scène, donc la "texture" est en fait le color buffer qui est remis à jour à chaque frame.
C'est juste. D'où l'utilisation des FBO, qui permettent de capturer le color buffer et d'en faire une texture. Cette texture reste dans la mémoire de la carte graphique, et est directement mise à disposition des shaders. On fait un Render To Texture (RTT).
J'ai utilisé l'exemple osgprerender de OSG pour illustrer. Comme vous utilisez un objet OpenGL pour le masque de vision; il faudra replaquer celui-ci par dessus le résultat du flou. Cela veut dire que le flou n'est pas la dernière étape dans le rendu; on doit donc le mettre dans une texture qui sera mise sur un Quad derrière le masque de vision. Bref, j'utilise osgprerender parce c'est justement ce qu'il fait :
Rendu de l'avion qui tourne (la scène vue pour vous)
RTT de l'avion
plaquage de la texture sur un Quad
Fragment shader sur la texture
plaquage de la texture sur un drapeau qui bouge (pour vous, ça sera un simple plaquage sur un quad, qui sera derrière l'objet polygone pour le masque de vision)
Bon je ne trouve pas comment mettre un fichier joint à un post, alors j'ai mis les fichiers ici :
http://www.humancad.com/downloads/TER/shaders.zip
Par ailleurs, je suis tombé sur ça:
http://www.nps.navy.mil/cs/sullivan/osgtutorials/osgShaderGrayOut.htm
si vous décidez d'utiliser un fragment shader à la place du polygone de masque. Ou alors pour le traitement du daltonisme/glaucome/...
Sylvain
Olivier a écrit:
Je m'occupe actuellement de modéliser l'accomodation de l'oeil et applicant divers flous successif suivant la profondeur du z-buffer et pour cela j'utlise donc une convolution de matrice au niveau d'un fragment shader.
Cependant cette technique ne fonctionne que sur un sampler2D ou 3D, il m'est donc necessaire d'avoir une texture en entrée, ce qui ne sera pas toujours le cas, je me doute bien que nombreuses sont les scènes sans aucune textures... ou pires, avec plusieurs textures cachés dans les divers neouds de la scène...
Le flou agira sur le résultat du rendu de la scène, donc la "texture" est en fait le color buffer qui est remis à jour à chaque frame.
Olivier a écrit:
Corrigez moi si je me trompe mais il me semble qu'au niveau d'un fragment shader on n'a pas accès aux informations relatives aux pixels adjacents (hormis l'utilisation de texture*D()... ) donc a moins de créer a chaque fois une texture factice de toute la scène, une sorte de capture d'ecran, il me sera impossible de réaliser une quelconque convolution ? Dois-je donc continuer dans cette voie ou faut il commencer a réfléchir a un autre moyen ?
C'est juste. D'où l'utilisation des FBO, qui permettent de capturer le color buffer et d'en faire une texture. Cette texture reste dans la mémoire de la carte graphique, et est directement mise à disposition des shaders. On fait un Render To Texture (RTT).
J'ai utilisé l'exemple osgprerender de OSG pour illustrer. Comme vous utilisez un objet OpenGL pour le masque de vision; il faudra replaquer celui-ci par dessus le résultat du flou. Cela veut dire que le flou n'est pas la dernière étape dans le rendu; on doit donc le mettre dans une texture qui sera mise sur un Quad derrière le masque de vision. Bref, j'utilise osgprerender parce c'est justement ce qu'il fait :
Rendu de l'avion qui tourne (la scène vue pour vous)
RTT de l'avion
plaquage de la texture sur un Quad
Fragment shader sur la texture
plaquage de la texture sur un drapeau qui bouge (pour vous, ça sera un simple plaquage sur un quad, qui sera derrière l'objet polygone pour le masque de vision)
Bon je ne trouve pas comment mettre un fichier joint à un post, alors j'ai mis les fichiers ici :
http://www.humancad.com/downloads/TER/shaders.zip
Par ailleurs, je suis tombé sur ça:
http://www.nps.navy.mil/cs/sullivan/osgtutorials/osgShaderGrayOut.htm
si vous décidez d'utiliser un fragment shader à la place du polygone de masque. Ou alors pour le traitement du daltonisme/glaucome/...
Sylvain
Re: Shaders & Compagnie
Merci de ces réponses rapides, je faisais a peu près la meme chose mais je me suis surement trompé quelque part car mon programme chutait en terme de FPS.. On va pouvoir avancer !
Olivier- Nombre de messages : 323
Date d'inscription : 23/01/2007
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|