Hi, ich arbeite immer noch an meinem DeferredRenderer bzw. dem gesammten RenderSystem meines aktuellen Projektes. Ich habe schon einiges gemacht, um den RenderPfad so schnell wie möglich zuhalten.
Aber auf meinem Laptop ist es immer noch grottig langsam, trotz einer kleinen Szene. Hier mal ein paar Fakten:
Zu erst render ich die ganze Szene in zwei Texturen per MultiRender Targets:
- ColorAndSpecularMap (RGBA 8-bit UByte) und
- NormalAndDepthMap (RGBA, 16-bit float, rgb -> xyz, a -> depth distance)
Beim DeferredShading wende ich PCF mit jittered sampling an. Hier nutzt ich bewusst dynamic-branching (mehr dazu hier aus
GPU Gems) um erst nur 8 Samples zu nehmen und wenn weitere nötig sind den Rest der 32 Samples.
Das hat definitiv den RenderProzess deutlich beschleunigt - Aber auf meinem Laptop ist es immer noch recht langsam.
Insgesammt muss ich mehrmals ein Quad über den ganzen Bildschirm rendern, weil ich noch ein paar weitere Off-Screen Effekte in meinem RenderSystem habe wie z.B. transparente Objekte wie Glass - wo ich das Resultat des DeferredShadings in einer Texture brauche um es per DisplacementMapping darzustellen.
Der Hintergrund soll im Glass eben verzerrt dargestellt werden.
Jetzt vermute ich fast, das ich noch mal ein wenig Geschwindigkeit rausholen könnte, in dem ich die DepthMap nicht als 16-bit Float Texture sondern eben als speizielle GL_DEPTH_COMPONENT Texture verwende.
Dafür müsste ich dann allerdings auch das DeferredShading etwas anpassen, weil der Tiefenwert dann anders umgerechnet werden muss, um an die World-Coordinate zu kommen.
Aber ob das alleine hilft, damit es auch auf einem Handesünlichen Laptop vernünftig läuft, ist fraglich.
Bei einer Auflösung von 800x600 und Vsync aus und ohne Multisampling läuft das Program auf meinem Laptop mit ca. 20 bis 35 FPS. Also nicht wirklich brauchbar, somal die Szene noch winzig ist.
Habt ihr ein paar Tips für mich, worauf man bei einem DeferredRenderer noch achten sollte, um max. Performanz zu erziehlen?