Leserartikel Der T-Buffer – next step for cinematic effects

andi_sco

Legends of Tomorrow
Teammitglied
Registriert
Jan. 2018
Beiträge
18.171
3dfx VSA-100 (7-1) 16zu9.JPG


Inhaltsangabe

Einleitung

Während heutige Grafikkarten locker spielbare FPS auf den Bildschirm zaubern, hat sich die Optik doch nicht mehr so stark verändert, wie zu Zeiten der Voodoo 1. Ja, dank GeForce und der kommenden Radeon werden auch 32 Bit und 1024x768 die Welten optisch weiter aufpolieren, doch wichtige Faktoren fehlen noch.
Quake 3, als absolute Flaggschiff Engine, zeigt uns bereits eine sehr detaillierte Welt, die die Vorfreude auf Star Trek Voyager und Medal of Honor stark gesteigert hat. Doch auch id Softwares Meisterwerk lässt noch einiges vermissen.
Was möchte man denn noch haben, fragt sich der geneigte Leser?
Ganz einfach: Kinofeeling
Hier treten die 3dfx Mannen auf den Plan und haben mit dem T-Buffer* den nächsten Berg erklommen und liegen optisch wieder weit in Führung vor nVidia und ATi!
*benannt nach dem ehemaligen CTO Gary Tarolli

Accumulations Buffer

Der Accumulations Buffer, als direkter Vorgänger, wurde einst bei SGI ersonnen und in OpenGL übernommen. Da die 3dfx Führung aus dieser Firma stammt, war es nur eine Frage der Zeit, bis er auch in eigene Produkte wandert. Aufgrund der hohen Kosten (Transistoren und damit teure Wafer Fläche), dauerte es fast ein Jahrzehnt, bis es in Consumer Hardware landete.
Er zählt zu den sogenannten Offscreen Buffern.
Dieser Buffer übernimmt nur Farbwerte und keine Tiefeninformationen, so dass über diesen keine Objekte ausgetauscht werden können. Um es so genau wie möglich umsetzen zu können, wird intern mit einer höheren Farbtiefe gerechnet, als extern ausgegeben wird. So nutzt z.B. der R300 Chip von ATi 10 Bit pro Farbkanal, wo die GeForce 4 noch 8 Bit nutzt (entspricht 30 und 24 Bit Farbtiefe).

Während man mit der Voodoo 3, aka Avenger Generation etwas ins Hintertreffen geraten ist, wurde der Abstand mit der ersten GeForce 256 weiter ausgebaut. Für viele unbemerkt, konnte die 3dfx Karte trotz nur 16 Bit Farbtiefe sich optisch doch teilweise vor die Riva TNT und TNT 2 setzen.
Da man aber die vorhandene Rechenleistung nicht nur in mehr FPS sehen wollte, tüftelte man an neuer Hardware mit dem Namen T-Buffer.

Nutzen

Was soll dieser T-Buffer jetzt bringen?
Hardware T&L?
48 Bit Farbtiefe?
Auflösungen von 1600*1200? Also UXGA?

Hardware T&L kann einen Teil der CPU-Last auf die Grafikkarte verlegen. So wird die Transformation (T)von Dreiecken in Hardware berechnet, genauso wie Beleuchtungseffekte (L). Dies muss von den Spielen aber explizit unterstützt werden.
Auch sehen wir eine erhöhte Farbtiefe nicht so schnell, auch wenn der VSA-100 Chip intern bereits mit 40 Bit rechnet.

Keines davon!

Das Hauptaugenmerk liegt auf dem sogenannten Anti-Aliasing (AA). Gefolgt von Motion Blur, Depth of Field, Soft Shadows und Reflexionen.

Anti-Aliasing

AA bis zu 4x bietet bereits die GeForce, dabei sinken die Frames aber massiv ab und es ist eher für 640*480 oder 800*600 geeignet. Hier setzt 3dfx an und bietet zusätzliche Transistoren auf, um auch noch bei 1024*768 spielbare Frameraten zu liefern. Gleichzeitig soll das 2x der Voodoo 4 optisch ansprechender seien als das Gegenstück von nVidia.
Wir alle kennen das leidige Thema gezackte, scharfe Kanten bei der Pixeloptik. Zusätzlich kann es bei weiter entfernten Objekten dazu kommen, das ganze Pixel verschwinden. Aus einem hohen Mast wird so schnell eine gestrichelte Linie, die irgendwie in der Luft schwebt.
3dfx VSA-100 T-Buffer whitepaper_04 - Kopie.jpg


3dfx VSA-100 T-Buffer whitepaper_04.jpg

Quelle: 3dfx

Da die Kanten technisch bedingt sind, brauchen wir also auch wieder Technik, um diese zu reduzieren. Eine massive Erhöhung der Auflösung auf z.B. UXGA mit 1600*1200 bringt eine Linderung. Ein Großteil der Monitore erreicht aber gerade einmal 1280*1024 und auch der RAMDAC dürfte immer mehr Probleme mit der Hertz Anzahl bekommen.

Hier kommt das AA ins Spiel, das die Karte intern mit höherer/doppelter Auflösung rechnen lässt, um Kanten dann „verschmiert“ erscheinen zu lassen. Im speziellen werden hier Farbwerte anders gemischt, um den Übergang zwischen zwei Linien weicher erscheinen zu lassen. Um ein reines Verschmieren, wie z.B. feuchte Tinte auf einem Blatt Papier handelt es sich dabei nicht, da das Gesamtbild da drunter leiden würde.
Quincunx nVidia Vierge Marie.png

Quincunx Abtastmuster der GeForce Karten - Quelle: Wiki (Vierge Marie)

Die unterschiedlichen Farbwerte werden ermittelt, in dem man das Bild doppelt rendert und dann um weniger als einen Pixel verschiebt. Dies geschieht wie gesagt Offscreen, unbemerkt vom Benutzer aus.
3dfx nutzt hier das sogenannte Rotated Grid Super Sampling (RGSS), welches von der Qualität her zu den besten Verfahren auf dem Markt gehört. Nachteilig ist hier der erhöhte Rechenaufwand zu nennen.
RGSS Vierge Marie.png

Rotated Grid Super Sampling - Quelle: Wiki (Vierge Marie)

Ein weiterer Negativpunkt ist hier zu erwähnen, dass jeder VSA-100 Chip nur 2x beherrscht, es braucht also die Voodoo 5 5000/5500 für 4x und die Königin Voodoo 5 6000 für 8x.
Dafür kann Super Sampling auch bei Alpha Texturen problemlos angewandt werden, wohin gegen das Multi Sampling keine Auswirkung hat oder ein mehrmaliges Rendern der Alpha texturen erforderlich ist.
Durch das Drehen (Rotated) wird erreicht, dass der Aliasing Effekt bei Schrägen weniger auffällt.
Optisch gefiel mir persönlich das 2x der Voodoo 4 besser als das 2x der GeForce 2 Ti. Wobei die 3dfx Karte eher ein 1,4x * 1,4x hatte und die GeForce 2x oder 2x. Jeweils vertikal oder horizontal.

Motion Blur

Die Grafikkarten berechnen sich bewegende Objekte immer knack scharf, was nicht unserem Sehvermögen entspricht. Im Fernseher oder Kamera Bereich wird es dadurch erreicht, dass die Bewegung zu schnell und/oder die Auslösezeit zu niedrig ist. Deswegen wirken Filme mit 24 FPS auch anders als ein Ego-Shooter bei der selben Bildrate.
Hier gibt es mehrere Möglichkeiten, das zu realisieren.
Entweder man verschmiert das Objekt oder man rendert es mehrmals. Sofern man es mehrmals rendert, wird nur eine Version zu 100% undurchsichtig, während die anderen Versionen transparent sind. So entsteht ebenfalls die Illusion eines verwischen, ohne das Details verloren gehen.
Wie hoch der Rechenaufwand für die Umgebung ist, kann ich nicht einschätzen. Bei Figuren oder Fahrzeugen dürfte es sich stärker in Grenzen halten, während man bei Rennspielen einen wesentlich erhöhten Aufwand erhält, da hier die Umgebung zum Großteil oder Komplett einbezogen werden muss.
c9y22rvx.gif


Motion Blur 004.jpg


Warnemeunde T-Buffer 002 01.jpg

Eine weitere wichtige Sache ist das Depth of Field

Wir kennen es hauptsächlich von den Spiegelreflexkameras: das Objekt im Vordergrund ist angenehm scharf, während der Hintergrund verschwimmt. Das hat einerseits ein natürlicheres Aussehen, andererseits lenkt es den Blick vom Hauptmotiv weniger ab.
Auch hier rendert die Grafikkarte alles scharf, egal wie weit weg es vom Betrachter ist.
Legt man jetzt einen Weichzeichner drüber, entsteht für uns der Eindruck schon ganz gut. Da die GPU auch immer weiß, wie weit weg ein Objekt ist, lässt sich der Effekt wesentlich besser Steuern als z.B. bei den ToF Sensoren heutiger Smartphones. So könnte man auch ein stufenweises Weichzeichnen nutzen, wie es auch bei Kamera Objektiven auftritt.
Warnemeunde T-Buffer 001 01.jpg


Warnemeunde T-Buffer 003-1 01.jpg



Die letzten Punkte sind Soft Shadows und Reflectance Blur

Wie beim Anti Aliasing haben wir auch hier das Problem, das Kanten scharf sind, in diesem Fall die der Schatten. Bei diffusem Licht jedoch, werden diese in der Natur ausgefranster.
Um dies zu verwirklichen, kann man eine zweite Lichtquelle nutzen, die leicht versetzt wird.
Ähnliche Probleme verursachen matte Oberflächen (Buch, Tisch, Material, etc.) bei Reflexionen. Während man bei einem Spiegel einfach die Welt doppelt berechnet, aus zwei unterschiedlichen Sichtweisen, nutzt 3dfx für beide Techniken wieder Super Sampling, also ein Verschieben der Pixel im 2D Bereich um einen Pixel oder weniger.
t8bmch6a.gif


Abschließende Worte

Diese 5 Techniken haben alles eines gemeinsam: sie laufen unter dem Oberbegriff Anti-Aliasing, da Aliasing grob gesagt bedeutet, dass zu wenig Daten vorliegen, um ein besseres Bild zu erhalten.
Bei reinem Anti-Aliasing erhöht der T-Buffer die Abtastung in der X und Y Koordinate. Motion Blur vervielfältigt sich schnell bewegende Objekte. Depth of Field nutzt mehr Fokus-Samples, um einen realistischen Kamera Look zu erzeugen.
Soft Shadows und Blur Effects basieren auf einem ähnlichen Prinzip und nutzen ebenfalls mehrere Samples.
Und so beschrieb 3dfx diese Technik dann auch kurz und knapp:
„Ein weiterer gemeinsamer Aspekt dieser neuen 3D-Rendering Funktionen ist, dass sie – mit Ausnahme des räumlichen Anti-Aliasing für die gesamte Scene – relativ subtil sind“

Wie arbeitet der T-Buffer aus dem entsprechenden 3dfx Whitepaper:
  1. Clear the Accumulation Buffer (A- or T-Buffer)
  2. Clear the back buffer and render the full scene in the back buffer
  3. Transfer the rendered scene to the A-Buffer, with weighting (this is known as the accumuluate step)
  4. Repeat steps 2 and 3 as many times needed. Each repetition combines a new version of the image with the image already in the A-Buffer, so the final image is created as a weighted average result of different images. It’s the combination of the multiple images that adds the effects.
  5. Transfer, with scaling, the A-Buffer to the back buffer, and flip (or swap) buffer contents. The result becomes the displayed image.

  1. Akkumulationspuffer löschen (A- oder T-Puffer)
  2. Löschen Sie den Hintergrundpuffer und rendern Sie die vollständige Szene im Hintergrundpuffer
  3. Übertragen Sie die gerenderte Szene mit Gewichtung in den A-Puffer (dies wird als Akkumulationsschritt bezeichnet).
  4. Wiederholen Sie die Schritte 2 und 3 so oft wie nötig. Jede Wiederholung kombiniert eine neue Version des Bildes mit dem Bild, das sich bereits im A-Puffer befindet, sodass das endgültige Bild als gewichtetes Durchschnittsergebnis verschiedener Bilder erstellt wird. Es ist die Kombination der mehreren Bilder, die die Effekte hinzufügt.
  5. Übertrage, mit Skalierung, den A-Puffer zu dem Hintergrundpuffer und kippe (oder vertausche) die Pufferinhalte. Das Ergebnis wird das endgültig angezeigte Bild.

Was man nicht unerwähnt lassen darf, ist die Tatsache, dass alle Effekte, bis auf AA, von der API unterstützt werden müssen. In OpenGL und Glide ist das definitiv kein Problem, doch bei Dx7 werden sich Microsoft und 3dfx nicht grün. Denn es steht nicht auf dem Plan, die T-Buffer Technik als Open Source zu bringen.

techn. Daten im Vergleich

3dfx Vergleich_1.jpg
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: gartenriese, _chiller_, Jan und 31 andere
Oh wow. Danke @andi_sco - Deine Leserartikel sind immer zu sehr überraschenden und (bei sehr vielen) in Vergessenheit geratenen Themen. Du gehst auf Grundlagen ein, die viele schon zur einführung einer Technik nicht so gut auf dem Schirm hatten. Danke.
die Wilde Voodoo Zeit habe ich leider deutlich verpasst, aber es war eine wahre freude das zu lesen.
Und hey, die TNT2 die ich damals in dem PC hatte, auf dem ich Paint gelernt habe, hast du immerhin erähnt
 
  • Gefällt mir
Reaktionen: pvcf, evilhunter und andi_sco
Und wieder lieferst du ab. Saubere und interessante Lektüre!

Eine Frage zur Performance: hast du dazu auch Infos wie sie bei den ersten Implementierungen war? Bzw. vielleicht sogar welche Bereich ein Flaschenhals früherer Architekturen war?

Was immer besonders spannend ist wie weit wir seitdem gekommen und vor allem wie damals schon kluge Köpfe sehr kreative Lösungen hatten.
 
  • Gefällt mir
Reaktionen: pvcf und andi_sco
evilhunter schrieb:
Eine Frage zur Performance
Ich hatte leider nur die Voodoo 4, und die hatte mit den modernen Titel a la Quake 3 oder Ultima IX doch schon gut zu kämpfen. Optisch sah es natürlich um Welten besser aus, als die später genutzte GeForce 2 Ti 😅 .
Leider wurden die Effekte so gut wie nie umgesetzt. Kann mich z.B. auch nicht daran erinnern, das die Radeon 9700 weiche Schatten hatte, z.B. bei Jedi Knight II: Jedi Outcast oder Jedi Academy. Aber selbst die brach dann mit anderen Effekten schon massiv ein - leider.
Und damals war ja höchstens Anti Aliasing und die Anisotrope Filterung in den Medien präsent.
Ergänzung ()

Hier sind einige Effekte zu sehen:
Die Demo kam zur Zeit der Radeon 9700 raus
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: pvcf, Hexxxer76 und evilhunter
Danke dir, und die Demo ist ja mal cool!

@SVΞN

Vllt wäre das eine Notiz wert :)
 
  • Gefällt mir
Reaktionen: andi_sco und Hexxxer76
🤩 @andi_sco Vielen Dank für deinen Lesenswerten Artikel. Macht viel Spaß zu lesen.

Das ist eine Notiz wert! Grüße
 
  • Gefällt mir
Reaktionen: SVΞN, evilhunter und andi_sco
Wow! Höchst interessantes Thema. Bitte mehr von Retro-Techniken der 3D Welt.
Auch der Schreibstil ist 1A: sehr verständlich und auf den Punkt gebracht.

Habe dich "abonniert" ;)

Was mich z.B. interessieren würde sind die Antialiasing Techniken, die wir heutzutage in den Spielen oder auch im GraKa-Treibern einstellen können. Wo da die technische Unterschiede liegen. Da blicke ich jetzt schon oft nicht mehr durch ;)

Oder wie das RayTracing technisch genau umgesetzt wird: RT-Cores vs. Im Shader berechnet z.B.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Hexxxer76, SVΞN und andi_sco
  • Gefällt mir
Reaktionen: Maxminator und Hexxxer76
Ich ziehe meinen Hut vor dieser lehrreichen Lektüre
 
  • Gefällt mir
Reaktionen: andi_sco
Zurück
Oben