88
edits
No edit summary |
|||
Line 16: | Line 16: | ||
;Le stade suivant est celui de l'ombre : | ;Le stade suivant est celui de l'ombre : | ||
: | : nous rendons encore la scène dans une texture profondeur concernant les éclairages. Il y aura une texture pour chaque lumière diffusant des ombres. | ||
; | ;Ensuite, c'est le stade de l'éclairage, avec plusieurs sous-stades : | ||
:*<u>Sky pass</u>: | :*<u>Sky pass</u>: Le ciel est dessiné d'abord selon la méthode classique. | ||
:*<u>Ambient pass</u>: | :*<u>Ambient pass</u>: la mémoire-tampon "diffuse" est modulé avec la couleur ambiante de la scène, et est dessiné comme un quad texturé aligné sur l'écran | ||
:*<u>Sunlight pass</u>: | :*<u>Sunlight pass</u>: Un second quad aligné à l'écran est dessiné et un shader examine la position pour calculer sa couleur "diffuse" et "specular" en utilisant le "normal" stocké dans le premier stade. La couleur résultante et mélangée avec la passe précédente. Les ombres sont examinées ici par comparaison de la position du pixel avec la position du cache lumière stockée dans la carte shadows | ||
:*<u>stade de la lumière additionnelle</u>: le scene graph sera traversé une autre fois pour afficher les volumes de lumière (cône ou tronc de cône pour les taches de lumière, sphère pour les lumières omni directionnelles), et leur shader ajoutera la lumière composée uniquement par les pixels éclairés. | |||
:*<u>stade brouillard</u>: un nouveau quad aligné sur l'écran est dessiné, et la position du pixel est calculée pour évaluer la quantité de brouillard du pixel. La couleur du brouillard est mélangée avec le résultat du stade précédent. | |||
:*<u>Stade des objets transparents</u>: les objets transparents (et les nuages) sont enfin rendus en utilisant la méthode classique. | |||
:Tous les données de lumière sont accumulées dans une seule mémoire tampon, qui sera utilisée pour le dernier stade en addition au stade Géométrie. | |||
;A la fin, le stade affichage, avec l'option effet post-traitement : | |||
:Les résultats des précédents tampons sont poussés dans le tampon principal pour être affichés, optionnellement modifiés pour montrer Glow, Motion blur, HDR, redout ou blackout, occlusion ambiante de l'espace écran, anti-aliasing, etc... | |||
Dans FG, on termine le pipeline du rendu par l'affichage du [[Menubar|GUI]] et du [[HUD]]. | |||
Tous ces phases sont plus précisément décrites dans [http://bat710.univ-lyon1.fr/~jciehl/Public/educ/GAMA/2007/Deferred_Shading_Tutorial_SBGAMES2005.pdf tutorial] c'est la base du code actuel, avec quelque addition ou modifications. | |||
== | == Avertissements == | ||
Le rendu différé n'affiche pas la transparence. Pour le moment, les nuages doivent être éclairés et ombrés par eux-mêmes. Les surfaces transparentes sont alpha-testées et non mélangées. Elles doivent être amenées dans leur propre bin sur l'image composite. | |||
=== | La partition profondeur ne marche pas non plus, à cause de la mémoire tampon profondeur, qui doit être gardée pour retenir la position de zone de vue, et, pour le moment, z-fighting est tout à fait visible. La partition profondeur sans rangée de profondeur superposée pourrait être la solution, et devrait être essayée. | ||
[[Image:project_rembrandt_5.png|thumb|300px| | |||
Le passage de la lumière peut rendre certains MFD illisibles (ce qui utilisent une couleur émissive) car flous. Ils devront être traités comme transparents. | |||
== Mise en œuvre == | |||
=== Répertoires === | |||
Le code est la principale branche du [[FlightGear and Git|répertoire officiel]]. Aucune autre localisation n'existe. | |||
=== Rendu des surfaces transparentes === | |||
[[Image:project_rembrandt_5.png|thumb|300px|Surfaces transparentes desssinées d'après des objets opaques]] | |||
Les surfaces transparentes sont détectées par les plugins OSG loader qui captent la nuance de rendu TRANSPARENT_BIN | |||
In the culling pass, the cull visitor orders transparent surfaces in transparent bin. In a cull callback attached to the Geometry camera, after the scenegraph traversal, the transparent bins are removed from the render stage and saved in a temporary collection. In a cull callback attached to the Lighting camera, after the scenegraph traversal, the transparent bins saved at the previous stage, are added to the render stage of the Lighting camera with a high order num. That way, the transparent surface are drawn on top of the scene lighted from the Gbuffer. | |||
=== Memory consumption === | === Memory consumption === |
edits