PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherverbrauch bei 3D-Stereoskopie


MadManniMan
2010-10-04, 12:44:20
Hallo miteinander.

Ich grüble schon eine Weile darüber nach und resigniere an meinem Unwissen sowie an der Tatsache, dass es - verglichen mit früheren Zeiten ;( - wenig interessierte, dabei aber fundierte Hintergrundartikel über die konkrete Verwendung, die konkrete Technik gibt. Irgendwie geht es immer nur Oberflächlich um generelle Funktionstests und hier und da ein paar Anleitungen, vielleicht auch mal ein Benchmark. Aber genug der Hoilerei, zu meiner Frage:

Mal außen vor gelassen, dass die Shutterbrillenlösungen VSync erfordern und das damit sinnigerweise einhergehende Tripple Buffering ein wenig Mehrspeicher erfordert (Zwischenfrage an dieser Stelle: wieviel benötigt Tripple Buffering mehr bei - sagen wir mal - 1920*1080 in 32bit mit verschiedenen MSAA-Modi?, so wird ja eigentlich nur jedes zweite Frame für den weiteren Viewport benutzt, statt in die Verdopplung der Framezahl zu gehen.

Somit sollte doch durch stereoskopisches 3D kein zusätzlicher Speicherverbrauch entstehen, oder?

Und bei der Variante von stereoskopischem 3D, die die beiden Bilder verkämmt, also interlaced? Beansprucht das zusätzlichen Speicher?

Bei meinen Test mit dem MSI Afterburner und Left 4 Dead stellte ich keinen Unterschied zwischen (kann man per Hotkey umschalten) "2D" und "3D" fest, Auflösungsänderungen, AA-Einstellungen und sogar eine veränderte Anzahl an Einschusslöchern jedoch verursachten eine Änderung des Speicherbedarfs ...

Gast
2010-10-04, 14:10:33
Mal außen vor gelassen, dass die Shutterbrillenlösungen VSync erfordern und das damit sinnigerweise einhergehende Tripple Buffering ein wenig Mehrspeicher erfordert (Zwischenfrage an dieser Stelle: wieviel benötigt Tripple Buffering mehr bei - sagen wir mal - 1920*1080 in 32bit mit verschiedenen MSAA-Modi?, so wird ja eigentlich nur jedes zweite Frame für den weiteren Viewport benutzt, statt in die Verdopplung der Framezahl zu gehen.

Ca. 8MiB, unabhängig von der MSAA-Stufe (es sei denn Downsampling wird beim Scanout gemacht, wie früher bei Nvidia, meines Wissens wird das aber nicht mehr verwendet), FP16-Rendertargets oder ähnlichem, beim Triple-Buffering wird nur der Frontbuffer 2x abgelegt und der hat eben genau die Größe der Ausgabeauflösung. Anders ausgedrückt, je aufwändiger die Grafik ist (z.B. durch MSAA, HDR-Rendertargets, mehrere Rendertargets) desto weniger fällt der Mehrverbrauch durch TP relativ ins Gewicht.


Somit sollte doch durch stereoskopisches 3D kein zusätzlicher Speicherverbrauch entstehen, oder?

Wäre durchaus denkbar, wobei dadurch Fälle entstehen können, in denen die Beiden Augen Bilder zu sehen bekommen die unterschiedlichen Zeitpunkten im Spiel entsprechen. Will man das vermeiden braucht man auf jeden Fall noch einen weiteren Buffer. Damit hat man allerdings bei der Ausgabe auch nur mehr quasi Double-Buffering, wenn man springende Frameraten vermeiden will braucht es einen weiteren.


Und bei der Variante von stereoskopischem 3D, die die beiden Bilder verkämmt, also interlaced? Beansprucht das zusätzlichen Speicher?

Da jedes Einzelbild nur die halbe Auflösung hat könnte es auch ohne zusätzlichen Speicherverbrauch gehen.

Da allerdings der Abstand zwischen 2 Pixelzeilen eines Bildes für ein Auge doppelt so groß ist, ist das nicht so einfach möglich. Die einfachste Methode wäre trotzdem beide Bilder in voller Auflösung zu berechnen und bei der Ausgabe einfach jede 2. Zeile verwerfen.

Gast
2010-10-04, 15:02:46
Ca. 8MiB, unabhängig von der MSAA-Stufe (es sei denn Downsampling wird beim Scanout gemacht, wie früher bei Nvidia, meines Wissens wird das aber nicht mehr verwendet), FP16-Rendertargets oder ähnlichem, beim Triple-Buffering wird nur der Frontbuffer 2x abgelegt und der hat eben genau die Größe der Ausgabeauflösung. Anders ausgedrückt, je aufwändiger die Grafik ist (z.B. durch MSAA, HDR-Rendertargets, mehrere Rendertargets) desto weniger fällt der Mehrverbrauch durch TP relativ ins Gewicht.Dafür haut die Auflösung um so übler rein. Hat schon seinen Grund, warum NV bei Surround3D das mögliche AA begrenzt (AFAIK auf 2x).
Wäre durchaus denkbar, wobei dadurch Fälle entstehen können, in denen die Beiden Augen Bilder zu sehen bekommen die unterschiedlichen Zeitpunkten im Spiel entsprechen. Will man das vermeiden braucht man auf jeden Fall noch einen weiteren Buffer. Damit hat man allerdings bei der Ausgabe auch nur mehr quasi Double-Buffering, wenn man springende Frameraten vermeiden will braucht es einen weiteren.Zusammenfassend: Pro View brauchts einen Frontbuffer und einen Backbuffer, wenn man solche Artefakte vermeiden will. Falls jetzt auch TB erwünscht ist, brauchts nur einen zusätzlichen Backbuffer oder deren 2? Bin mir da noch unsicher...
Da jedes Einzelbild nur die halbe Auflösung hat könnte es auch ohne zusätzlichen Speicherverbrauch gehen.
Da allerdings der Abstand zwischen 2 Pixelzeilen eines Bildes für ein Auge doppelt so groß ist, ist das nicht so einfach möglich. Die einfachste Methode wäre trotzdem beide Bilder in voller Auflösung zu berechnen und bei der Ausgabe einfach jede 2. Zeile verwerfen.Wird anscheinend nicht verworfen sondern downgesampled, danach sahs gemäß RMX Post jedenfalls aus. Also quasi 1x2 OGSSAA bei halbierter vertikaler Auflösung.

Gast
2010-10-04, 15:06:40
Gnaa, sorry. Mea culpa, mea maxima culpa :usad:
Wird anscheinend nicht verworfen sondern downgesampled, danach sahs gemäß RLZ Post jedenfalls aus. Also quasi 1x2 OGSSAA bei halbierter vertikaler Auflösung.

MadManniMan
2010-10-04, 16:16:42
Ahoi und danke erstmal.

a) Downsampling @Scanout war ja IIRC der große Vorteil der Geforce 4 gegenüber der Geforce 3, brauchte aber mehr Speicher, richtig?

b) 32 bit Framebuffer ist doch eigentlich Quatsch, oder? Es sind doch nur 24 bit und damit grob 6 statt 8 MB, also bei 1920*1080, richtig?

c) Das Oversampling bei den verkämmten Varianten kann ich bestätigen. Ich habe mit Erhalt meines Zalman ZM-M220W (1680*1050 @ interlaced Stereo-3D) aus Ermangelung einer Geforce die iZ3D-Treiber benutzt, welche 2 Modi ermöglich(t)en: einmal "normal" und einmal "quality" (oder so, wie die Namen waren, ist ja egal) - wobei die "normal"-Variante ohne Anti-Aliasing in welcher Form auch immer auskam. Ob einfach nur das Verrechnen der sowieso vorhandenen Informationen ausgelassen wurde, oder aber in einer geringeren Auflösung gerechnet wurde, kann ich leider nicht mehr sagen - ich habe die Frameraten nicht mehr im Kopf :(

d) Angenommen, wir hätten bei 3D Vision Surround 3 x 1920*1080, also 5760*1080 - benötigt man nun pro View einen Back- und einen Frontbuffer sowie Tripple Buffering, benötigt man also 120 MB nur für die Buffer? (2 Back-, 2 Front-, einen Tripple Buffer) Sind diese ~100 MB so entscheidend, dass dann MSAA einfach zu viel würde?
Ich erinnere mich dunkel, dass MSAA nicht pauschal, sondern durchaus applikationsspezifisch Speicher verbraucht ... oder irre ich und es gibt eine Faustregel?

Gast
2010-10-04, 17:14:31
Ahoi und danke erstmal.

a) Downsampling @Scanout war ja IIRC der große Vorteil der Geforce 4 gegenüber der Geforce 3, brauchte aber mehr Speicher, richtig?Japp, dabei werden Frontbuffer und Backbuffer einfach getauscht, der Frontbuffer hat also immer noch die volle Größe des Backbuffers.
d) Angenommen, wir hätten bei 3D Vision Surround 3 x 1920*1080, also 5760*1080 - benötigt man nun pro View einen Back- und einen Frontbuffer sowie Tripple Buffering, benötigt man also 120 MB nur für die Buffer? (2 Back-, 2 Front-, einen Tripple Buffer) Sind diese ~100 MB so entscheidend, dass dann MSAA einfach zu viel würde?Mal von der sparsamsten Implementation mit DB ausgegangen:
4 (oder 3?) x 5760 x 1080 x 24 für die Front- und Backbuffer
+
5760 x 1080 x gerenderte_Farbtiefe x AA-Modus für den "eigentlichen" Backbuffer, in den gerendert wird
+
gleiches für den Zbuffer, nur eben mit der Tiefe des Zbuffers statt der Farbtiefe. Dürfte 32bit sein?

Geht ja auch mit Karten der GTX2X0-Serie, könnte da schon eher knapp werden. Vielleicht haben sie die Abfrage einfach zu konservativ ausgelegt? Oder wollten sich die Peinlichkeit ersparen, dass ein 2GB-285-SLI ihre neuen Flaggschiffe abhängt ;)
Ich erinnere mich dunkel, dass MSAA nicht pauschal, sondern durchaus applikationsspezifisch Speicher verbraucht ... oder irre ich und es gibt eine Faustregel?Der Verbrauch für jeden Buffer, in den mit AA gerendert wird, geht eben um den AA-Faktor hoch. Bin allerdings überfragt, wie viele Buffer davon heutzutage üblicherdings betroffen wären...