Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

14.03.2014, 23:15

Kantenglättung DirectX 11

Liebe Leser

Ich muss euch leider "mal wieder" kurz nerven.

Einige wissen ja, dass ich mich mit DirectX 11 beschäftige.

im Buch wird beschrieben, wie man die MSAA Antialiasing Methode abfragt, und in die SwapChain Struktur einbaut, so das sie funktionieren.
Jedoch weiß ich, das DirectX auch viele andere Typen wie bsw(TXAA, FXAA, SSAA ...) unterstützt.

ich habe in Google leider nichts dafür gefunden.

Wie benutzt man diese Typen.


Liebe Grüße
Sebastian

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

14.03.2014, 23:19

Jedoch weiß ich, das DirectX auch viele andere Typen wie bsw(TXAA, FXAA, SSAA ...) unterstützt.

Direct3D unterstützt diese Techniken insofern, also es dir alles zur Verfügung stellt, was du brauchst, um sie selbst zu implementieren... ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

14.03.2014, 23:23

Das sind teils herstellerspezifische Erweiterungen (von NVIDIA und AMD), die kann man im Grafiktreiber aktivieren.
SSAA beispielsweise kannst du selbst implementieren, indem du das Bild in ein größeres Render-Target renderst und dieses dann downsamplest.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

4

14.03.2014, 23:40

OK. Danke für die Infos.

Ich wollte es nur wissen. MSAA Reicht fürs erste. FXAA hat bestimmt etwas mit Shader zu tun. Also ich rate mal wegen dem "FX"

So wie ich es im Buch gelesen habe, wie bei MSAA der Backpuffer praktisch "Subdivided" (also aufgetielt).

wenn man bsw einen 500x500 Backpuffer und einen ebenso großen Monitor (von der Auglösung), wäre der Backpuffer bei MSAA_2x 1000x1000 groß.

wenn ich verstanden habe was SSAA ist, dann läuft es so.

Der Backpuffer hat eine Auflösung von 1000x1000
Das Renderziel (Rendertarget) (die Texture) hat eine Auflösung von 2000x2000;
die Texture wir als Rendertarget ausgewählt.
zum schluss wird sie auf 1000x1000 herunter skaliert und in den Backpuffer geworfen.

Richtig ???

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sebastian Müller« (14.03.2014, 23:47)


LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

15.03.2014, 12:45

Das mit dem "Runterskalieren" habe ich mir am Anfang auch so vorgestellt, aber ich bin mir ziehmlich sicher, dass das genau so nicht funktioniert.
Der ryg Blog erklärt auch solche Techniken sehr genau (aber eher theoretisch). Auf dieser Seite (im Abschnitt "Other rasterization issues and pixel output") ist auch was zum Thema Multi-Sampling erklärt ;-)
Grob erklärt werden pro Pixel einfach mehr "Samples" genommen, um zu testen, ob (bzw. wie stark) ein Pixel innerhalb eines Dreiecks liegt.
Dabei wird aber kein größerer Framebuffer angelegt.

Falls ich total daneben liege, korrigiert mich. Bin selbst noch kein Experte auf dem Gebiet des Multi-Sampling ;-)

Gruß,
Lukas

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

15.03.2014, 12:47

Stimmt so schon. Kurzfassung:

Supersampling: Alles wir mit höherer Auflösung berechnet.
Multisampling: Nur manche Dinge werden mit höherer Auflösung berechnet (schneller als vollwertiges Supersampling).

;)

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

7

16.03.2014, 12:03

Das mit dem "Runterskalieren" habe ich mir am Anfang auch so vorgestellt, aber ich bin mir ziemlich sicher, dass das genau so nicht funktioniert.
Der ryg Blog erklärt auch solche Techniken sehr genau (aber eher theoretisch). Auf dieser Seite (im Abschnitt "Other rasterization issues and pixel output") ist auch was zum Thema Multi-Sampling erklärt ;-)
Grob erklärt werden pro Pixel einfach mehr "Samples" genommen, um zu testen, ob (bzw. wie stark) ein Pixel innerhalb eines Dreiecks liegt.
Dabei wird aber kein größerer Framebuffer angelegt.

Selbstverständlich wird ein größerer Framebuffer angelegt, wo sonst sollten die Ergebnisse des Samplings gespeichert werden. Der Unterschied zwischen MSAA und SSAA liegt darin, dass MSAA nur die Überdeckung subpixelgenau berechnet, die Farbe jedoch weiterhin an Pixelzentren (oder wahlweise einem überdeckten Subpixelzentrum, siehe centroid sampling) auswertet. Die Überdeckungsinformation wird anschließend genutzt, um den Schreibvorgang von Farbe und Tiefe in den Framebuffer zu maskieren, d.h. das Ergebnis der Auswertung an (Sub-)Pixelzentren überschreibt nur die Information überdeckter Subpixel im Framebuffer - nicht überdeckte Subpixel bleiben unberührt. Wenn alles Rendering abgeschlossen ist, erhält man das geglättete Bild wie bei SSAA durch eine Runterskalierung (Resolve) des mit Subpixelinformation gefüllten Framebuffers.

Beim Resolve geht natürlich Information verloren. Post-Processing-Effekte wie Tonemapping funktionieren schlecht auf gemittelter Subpixelinformation. Tonemapping ist i.d.R. ein nichtlinearer Vorgang, Anwendung nach Resolve führt bei sehr unterschiedlichen Subpixelhelligkeiten daher wieder zu ungeglätteten Kanten. Ähnliches gilt für tiefenbasierte Effekte, gemittelte Tiefen verschiedener Oberflächen sind im Allgemeinen einfach nur falsch. Deshalb ist es seit der DX10-HW-Generation möglich, direkt auf die Subpixelinformation im (vergrößerten) Framebuffer zuzugreifen. In der Regel versucht man, in einem ersten Schritt alle Pixel mit Subpixeln verschiedener Oberflächen, also gerade die Kanten, ausfindig zu machen. Anschließend werden diese Pixel dann getrennt von allen anderen behandelt, um die Post-Processing-Effekte nur dort für jeden Subpixel zu berechnen (vielfacher Aufwand!).

Mehr Informationen: http://mynameismjp.wordpress.com/2012/10/24/msaa-overview/
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »CodingCat« (16.03.2014, 12:17)


Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

8

16.03.2014, 12:30

Danke für die schöne Aufstellung und den Link!
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige