Bonjour,
Je me demandais comment il était possible d'éviter les calculs d'illuminations inutiles en deferred shading.
Je m'explique: dans mon implémentation, l'un des Geometry-Buffers contient la couleur diffuse, et un 4ème paramètre qui est un booléen, "lit". Ainsi cela devrait permettre de ne pas traiter les éléments comme la skybox pendant les phases suivantes (éclairage par exemple) et de gagner pas mal en performances.
Problème: avant je dessinais directement dans le framebuffer principal pour la phase d'illumination. Donc avant de commencer les phases de post-processing je dessinais d'abord l'image avec juste la contribution diffuse, puis une deuxième fois avec alpha et stencil test activé, où un shader regardait si "lit" était à faux et ainsi rejetait automatiquement ce pixel. Comme cela en utilisant le stencil test pour les opérations suivantes, seuls les pixels à éclairer étaient traités.
Seulement maintenant je ne dessine plus la phase d'illumination dans le frame buffer mais dans une autre render target. Le problème vient du fait que je ne peux apparemment l'utiliser qu'en "color only". Si je lui joins un depth/stencil buffer l'application fait n'importe quoi!
Donc je ne peux évidemment plus utiliser le stencil buffer pour l'early out test.
Actuellement je fais un "discard" (ou "texkill" si vous préférez) quand "lit" est à faux dans les shaders de post-processing...hé bien non seulement c'est moche puisqu'il faut le faire dans chaque shader, en plus je perds en performance au lieu d'en gagner!!
Quelqu'un saurait m'aider?
Message édité par akalash47 le 02-03-2007 à 21:13:09