Bonjour
Alors j'intègre actuellement un shader me permettant de calculer la transluscence de la peau. Prenons l'exemple suivant. J'ai un visage éclairé de de derrière par un spot light. Maintenant j'ai une caméra qui regarde ce même visage de face. Je dois donc constaté de la translucence au niveau des oreilles comme sur l'image suivante.
http://www.hostingpics.net/viewer.ph...anslucency.jpg
Le principe est assez simple. Pour un pixel donné dans mon pixel shader (celui vu par la caméra) je récupère sa profondeur. Ensuite je récupère la profondeur de ce même pixel dans la shadow map de mon spot light. Une soustraction entre les deux valeurs me donne mon coefficient de translucence.
Pour simplifier deux cas de figures se présente :
- mon coefficient est très petit, ce qui signifie une épaisseur très petite, donc une translucence plus forte (oreilles...)
- mon coefficient est très grand, grande épaisseur, translucence très faible.
Maintenant ce que j'aimerai c'est convertir la profondeur récupérer dans ma shadow map en coordonnés monde. J'ai entendu parlé de gluUnproject. Cependant je n'ai pas accès à l'API OpenGL mais seulement au GLSL (j'utilise une plateforme interne à l'entreprise).
Voici le code que j'ai pour le moment, c'est un intégration de gluUnproject
Mais ce code ne semble pas fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 vec4 shadowCoord = gl_TexCoord[TEX_UNIT] / gl_TexCoord[TEX_UNIT].w; vec4 v = vec4(0.0, 0.0, 2.0 * texture2D(shadowMap, shadowCoord.st).z - 1.0, 1.0); vec4 v2 = vec4(0.0, 0.0, 2.0 * shadowCoord.z - 1.0, 1.0); float d1 = (inverseMVP * v).z; float d2 = (inverseMVP * v2).z; return abs(d1-d2);
shadowCoord correspond aux coordonnées de textures de mon pixel dans ma shadow map
inverseMVP correspond à gl_ModelViewProjectionMatrixInverse
Est-ce que j'ai mal intégré la transformation matricielle de gluUnProject ?
Kromagg
Partager