Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1590 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Early out test avec un deferred renderer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Early out test avec un deferred renderer

n°1523117
akalash47
Posté le 02-03-2007 à 21:10:35  profilanswer
 

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
mood
Publicité
Posté le 02-03-2007 à 21:10:35  profilanswer
 

n°1523185
bjone
Insert booze to continue
Posté le 03-03-2007 à 05:08:14  profilanswer
 

là je t'avouerai que tu as lancé un topic interressant, j'ai pas encore creusé le deferred renderer.
 
il est clair que dans toutes les docs nvidia/ati, le discard/texkill est indiqué comme étant pourri.
 
y'a pas des examples de deferred renderers chez nv & ati pour voir comment ils jonglent avec les rendertargets ?
 

n°1523196
akalash47
Posté le 03-03-2007 à 10:27:51  profilanswer
 

Ben aucun des exemples du SDK que j'ai trouvé n'effectue ce genre d'optimisation.
 
Mais ce qui est curieux c'est que dans la doc de nVidia pour le deferred shading, ils conseillent pour la phase d'illumination:
pour chaque lumière
 - 1/ désactiver l'écriture dans le color buffer, activer celle dans le stencil buffer, dessiner le volume englobant de la zone d'influence de la lumière (genre box pour une directionnelle, sphere pour une ponctuelle)
- 2/ réactiver l'écriture dans le color buffer, désactiver celle du stencil, et ajouter la contribution de la lumière sur les pixels qui passent le stencil test. *
 
Donc ça signifie qu'ils utilisent bien un stencil buffer pour cette phase! Alors est-ce que c'est mon implémentation qui foire? Pourquoi est-ce que j'ai ce bug (image qui reste figée) quand j'utilise une render target de destination avec un depth/stencil buffer attaché?
Et ça le fait aussi bien avec OpenGL qu'avec DirectX!
 
 
* Perso je trouve ça coûteux puisqu'il faut généralement nettoyer le stencil buffer pour chaque lampe!
Je crois que calculer la bounding box de la lumière dans l'image space avec le CPU et changer la zone de scissor est plus performant.
C'est d'ailleurs ce qui est fait dans l'exemple du SDK nVidia ^^


Message édité par akalash47 le 03-03-2007 à 10:31:33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Early out test avec un deferred renderer

 

Sujets relatifs
[C++]test sur le contenu d'un pointeurlecture du port serie dans test bench vhdl
Unit Test pour C/C++GUI - Renderer dans un JTree
Créer un test[UNIX/LINUX] test d'existence de fichiers d'apres l'extension
Test de machines d'etatQuestion à propos de la commande ipconfig > c:\test.txt
Test variable videTest simple quote et guillemets
Plus de sujets relatifs à : Early out test avec un deferred renderer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR