W
Wadenbeisser
Gast
Nai schrieb:@ Wadenbeisser und max_1234
Das galt eigentlich auch für SFR was ich da schrieb; habe das bewusst etwas abstrakter gehalten. Im Speziellen kann ich euch noch ein paar anschauliche Beispiele liefern. Annahme: Wir verwenden ein SFR-Verfahren, so so wie es auf der Folie gezeigt ist und wo der Bildschirm horizontal auf die beiden GPUs aufgeteilt wird.
Der Speicher für die (Zwischen-)Framebuffer lässt sich da zunächst leicht verteilen, da jede GPU nur in ihren Teil des Bildes zeichnet. Aber auch hier gibt es Probleme. Falls auf der linken seite mehr los ist als auf der rechten muss man die die Unterteilungslinie für die Lastbalancierung und gute Ausnutzung der Rechenleistung verschieben. Das führt wieder dazu, dass eine GPU einen größeren Teil des Framebuffers abspeichern muss als die andere GPU somit die Speicherverteilung verschlechtert wird.
Ok wie verhält es sich mit den Texturdaten und Vertexdaten der Objekte? Im einfachsten Fall mit nur einer Kamera kann man in der Tat die Objekte nach Bildschirmseite sortieren und nur auf der enstprechenden GPU abspeichern um Speicherplatz zu sparen. Speicherplatz wird nur verschwendet wenn das gleiche Objekt einmal in der linken und der rechten Seite gezeichnet werden soll oder in der mitte auf beiden Bildschirmseiten liegt. Allerdings treten hier auch zusätzliche Probleme auf:
-Bewegt sich die Kamera oder die Objekte schnell so müssen die Daten vieler Objekte zwischen den GPUs kopiert werden was wiederum Performance kosten kann.
-Moderne Engines zeichnen für diverse Spezialeffekte (Schattenwurf, Reflexionen) die Szene mehrmals mit Kameras, die andere Positionen und andere Blickwinkel besitzen, als die eigentliche Kamera. Verwendet man für jede dieser Kameras wieder ein SFR-Verfahren, so ist die Wahrscheinlichkeit hoch, dass innerhalb eines Frames nahezu jedes Objekt von jeder GPU durch irgendeine der vielen Kamera gezeichnet werden muss. Ergo muss nahezu jedes Objekt im Speicher von beiden GPUs vorrätig sein.
Du vergißt entscheidene Teile.
Texturen die nur bei einem Teilbild benötigt werden müssen nicht in den Speicher der anderen Karte geladen werden, der Speicher- und Bandbreitenbedarf vom FSAA verteilt sich auch auf beide Karten und du sprachst von zuerst von der Addierung des Speichers und dann auf einmal von der Performance was letztendlich 2 verschiedene paar Schuhe sind.
Zudem müssten nicht zwangsläufig die Objekte von Karte zu Karte kopiert werden aber man könnte es um deren erneute Berechnung und Texturierung zu sparen, sie könnten aber auch einfach für jede Karte separat berechnet werden denn letztendlich wird auch nicht die komplette Welt gerendert sondern wohl eher der Bildaussschnitt den du siehst. Objekte zu rendern die nicht sichtbar sind sind schließlich nichts anderes als Ressourcenverschwendung.
Genau das meinte ich auch das du AFR nicht aus dem Kopf bekommst denn du gehst bei deiner Argumentation von Vollbildern aus, kommst aber nicht auf die Idee das die Teilbilder separat gerendert und dann wieder zusammengefügt werden könnten. Die von dir angesprochenen zusätzliche "Kamerapositionen" sind vermutlich die Testpositionen um zu checken ob Objekte sichtbar sind oder nicht damit sie eben nicht unnötig gerendert werden. Dafür reicht dann auch das einfache Grundmodell ohne Texturen, Shader Effekte und der gleichen.
Man muss auch nicht zwangsläufig die von dir angesprochene Lastverschiebung durchführen. Dann leidet an der Stelle eben die Skalierung etwas weil die eine Karte auf die andere warten muss.
Die größte Hürde dafür dürfte wohl die Präzision des Kamerablickwinkels der jeweiligen Karte, sowie die Helligkeit und der großflächigen Shader Effekte sein. Mit anderen Worten die Synchronisation der Teilbilder.