Bonjour,

Vous connaissez certainement le principe des shadowmap :
- Récuperer une depth map à partir d'une lumière
- (1) Faire un rendu sans les lumières qui portent des ombres
- (2) Faire un rendu pour chaque lumière porteuse d'ombre pour "dessiner" les ombres

C'est grossierement simplifié, juste pour montrer que le blending est décisif pour le rendu final.
Considérons qu'il n'y a pas d'objets transparents, du coup :
- rendu (1) : pas besoin de blending
- rendu (2) : blending (GL_ONE, GL_ONE)

Là ça marche impec, maintenant, j'autorise certains objets à être transparents, et là ça change dramatiquement la donne.

- rendu (1) : blending (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ?
- rendus (2) : blending (???, ???) .....

J'ai beau poser les équations de blending pour déterminer mes coefficients, mais je tombe toujours sur des impasses.
Le but étant que l'algo multipasses ne change rien à la transparence des objets.

L'idéal serait pour chaque rendu de faire un blending separé pour avoir la bonne couleur due à la transparence et d'ajouter simplement le résultat au contenu du frame buffer actuel avec un blending additif, mais je ne vois pas comment faire ça, ni comment faire sans faire ça, je me comprend :p

Pour illustrer le problème, prenons un plan vert opaque et un plan rouge semi transparent que l'on place devant le plan vert.
Si on ne s'est pas gourré dans l'ordre de dessin, un rendu normal en une passe donnera du jaune là où on voit les 2 plans superposés.
Maintenant, on considère qu'on a 2 lumières donc une qui projette des ombres.
On fait le premier rendu avec la première lumière, ce qui va donner dans notre frame buffer une certaine couleur.
Puis on fait le second rendu, en premier on dessine le plan, et donc on va venir mélanger du vert avec la couleur dans le frame buffer, puis on dessine le plan rouge et on va donc aller mélanger du rouge avec le frame buffer. Et il faut bien évidement tomber sur le même jaune qu'on à obtenu avec le rendu 1 passe ...

Bref, toute idée lumineuse ou moins lumineuse est la bienvenue, j'ai tellement tourné en rond sur ce problème que je ne vois pas plus loin que le bout de mon nez maintenant.

Bref