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
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);
Mais ce code ne semble pas fonctionner.
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