Fullscreen Quad

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Fullscreen Quad

Beitrag von Zudomon »

Habt ihr Erfahrungen, was am schnellsten auf Low-End und High-End Grafikkarten läuft, wenn es um das Rendern eines Fullscreen Quads geht?

Also ich sehe da ja 3 Möglichkeiten:

1. Wie gehabt, zwei Dreiecke, die ein Quad über die komplette Fläche bilden, zeichnen
2. Ein Dreieck zeichnen, welches so groß ist, dass sie die Fullscreenfläche umschließt
3. Ein Grid aus z.B. 16x16 Dreiecke

Ich habe die drei Varianten gegeneinander bisher nicht getestet und hoffe, dass mir daher jemand schon vorher was dazu sagen kann... ;)
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Schrompf »

Ich habe vor Jahren mal aufgeschnappt, dass ein Grid aus Quads wegen besserer Cache-Nutzung etwas effektiver ist. Aber bei den heutigen GPU-Caches und Rasterizer-Methoden bezweifle ich irgendwie, dass das noch aktuell ist.

Falls Du es mal profilest, sag bitte Bescheid, was rauskommt :)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Specialist
Establishment
Beiträge: 135
Registriert: 29.08.2003, 14:22
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Specialist »

Ich habe mal vor einiger Zeit gelesen, dass ein einzelnes Dreieck am schnellsten wäre.
Ich meine mich zu erinnern, dass das in irgendeinem Siggraph-Paper drinstand.
Allerdings kann die Erkenntnis mittlerweile sicher schon wieder überholt sein.

Meinst du denn, dass der Unterscheid für deine Anwendung signifikant wäre?

Edit: Schrompf war etwas schneller und natürlich mit einer ganz anderen Antwort :D
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Zudomon »

@Schrompf
Klar, mach ich, falls ich das testen sollte. Die Frage ist, wie profiled man sowas überhaupt vernünftig? Eigentlich müsste der PS dabei ja minimal sein und dann ein paar Fullscreen Quads overdrawen...

@Specialist
Significant bestimmt nicht. Aber mein Ziel ist es, StoneQuest auch auf nem Laptop von meiner Freundin lauffähig zu bekommen... da bin ich bei Low bei etwa 10-20 FPS... selbst wenn nichts gerendert wird und nur das Deferred an ist, bin ich schon auf 55 FPS begrenzt. Da schau ich dann nach jeden Schlupfloch.
Sie hat übrigens ne Intel HD Graphics 3000. Aber Serious Sam HD läuft darauf auch eigentlich recht gut, deswegen ist das schon etwas ärgerlich alles.
Wobei ich sagen würde, damals lief das bei ihr mit 2 FPS und dann noch mit Grafikfehlern ohne Ende. Also es hat sich schon gebessert! :D
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Krishty »

Das wirst du profilen müssen. Vor fast zehn Jahren gab es ein Paper von XBox-Entwicklern, in dem drin stand, dass sie hunderte Konstellationen getestet haben und ein Grid aus 13×6 Quads oder so am schnellsten war. (Ich glaube, dass das jemand auf ZFX mit „also muss man einen Praktikanten einstellen, der brute force alle Quad-Größen durchtestet“ kommentiert hat; vielleicht findest du den Thread wieder.)

Da seitdem die Pixel-Shader-Kosten generell gestiegen sind, könnten aktuelle Karten die Last besser verteilen; aber so lange Specialist das Paper nicht findet, bleibt dir nur testen.

Weißt du übrigens, womit es viiiieeeel schneller ist? Compute Shaders! XOXO
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von dot »

Ich würde erwarten, dass auf modernen GPUs das fullscreen Triangle am effizientesten ist...
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Tiles »

Schliesse mich an und tendiere zum einzelnen Tri. Weil ich die Diskussion glaube ich schon irgendwo gelesen habe. Da ging es um Optimierung für Mobiles.

Aber ich würde erwarten dass es heutzutage selbst auf den Mobiles keinen messbarer Unterschied mehr gibt, egal welche Methode nun wirklich schneller ist. Der Einspareffekt tendiert imho gegen Null. Da gibts ganz andere Baustellen wo man viel gewinnen kann ^^
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: Fullscreen Quad

Beitrag von Matthias Gubisch »

Nachdem die Pixel doch erst losstarten können wenn die Vertizes fertig sind.

Sollte es da nicht egal sein wieviele Vertices man hat solange Anzahl Vertices < Max Shader per Multiprocessor (ka wie das bei AMD heist) ist?
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von dot »

Du willst möglichst keine Edges haben die durch den Screen gehen, da die GPU Quad Shading auf 2x2 Pixel Quads betreibt und an Edges daher unnötige Arbeit verrichted wird... ;)
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: Fullscreen Quad

Beitrag von Matthias Gubisch »

Gutes Argument, dann sollte wohl tatsächlich das FullscreenTri das schnellste sein.

Ich merke ich sollte mich wieder mehr mit dem Thema beschäftigen ;) Da vergisst man soviel....
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Krishty »

ähm … die GPU zersägt die Dreiecke doch sowieso, so dass sie nicht über die Viewport-Kanten hinausragen. Auch ein einzelnes Dreieck wird vor der Rasterisierung in zwei oder mehr Dreiecke zerlegt, wenn es eine Bildschirmkante überschreitet. Kanten laufen also so oder so durch’s Bild, ob man sie nun explizit hinschickt oder nicht.

Hier hab ich’s aufgenommen vor … acht Jahren. Fuck, bin ich eine alte Omma.
[youtube]e-VsSXN0504[/youtube]
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von dot »

Hm, das wundert mich tbh, ich wäre davon ausgegangen, dass Dreiecke nur zersägt werden, wenn sie die Near-Plane schneiden oder über das Guard-Band hinausragen. Wie genau hast du das denn aufgenommen? xD
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Krishty »

Man hat seit D3D 10 die Möglichkeit, einzelne Samples zu laden. Also habe ich den Depth Buffer als Textur gebunden, alle Samples eines Pixel geladen, und Weiß ausgegeben, falls sie sich unterscheiden. Falls alle Samples die selbe Tiefe haben, habe ich Schwarz ausgegeben.

Man kann das gleiche erreichen, indem man gewöhnliche Texturkoordinaten mit Centroid-Texturkoordinaten vergleicht. Dann muss man aber in Sample Frequency laufen statt in Pixel Frequency.

DICE haben das AFAIR ein paar Jahre später gemacht, um Multisample-Pixel von gewöhnlichen Pixeln zu maskieren und einen gesonderten Shader drüberlaufen zu lassen (damit Postprocessing bei 4× MSAA nicht 4× so viele Pixel-Shader-Aufrufe braucht).

P.S.: Man sieht’s im Video schlecht, aber die Kanten vom Zersägen beeinträchtigen nicht ganz so viele Pixel wie normale Dreieckskanten. Wahrscheinlich war das in Hardware schon hoch optimiert.

P.P.S: Das Video dürfte damals sogar mit einer Desktop-Variante der HD3000 oder HD4000 aufgenommen worden sein; die Karte ging irgendwann kaputt und jetzt weiß ich nicht mehr, welches Modell es genau war.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2352
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Jonathan »

Irgendwie bin ich mir nicht sicher, ob die Anzahl der Dreiecke in dieser Größenordnung wirklich so einen starken Einfluss auf die Rechenleistung hat. Klar mag das eine ein wenig schneller sein, als das andere, jedenfalls auf der passenden Grafikkartengeneration (kann auf der nächsten ja wieder ganz anders sein). Aber ich habe das Gefühl, wenn es darum geht ein Spiel 2-3 mal schneller zu machen, dann ist das optimale Zeichnen eines Fullscreenquads ganz sicher nicht der Anfang der Optimierungen.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Krishty »

Jonathan hat geschrieben:Irgendwie bin ich mir nicht sicher, ob die Anzahl der Dreiecke in dieser Größenordnung wirklich so einen starken Einfluss auf die Rechenleistung hat.
Naja, es bestimmt wohl die Verteilung der Rechenleistung. Die GPU muss ja die Quads irgendwie an die Pixel Shader weiterleiten, und mit der Quad-Größe kann man das ungefähr steuern.
Klar mag das eine ein wenig schneller sein, als das andere, jedenfalls auf der passenden Grafikkartengeneration (kann auf der nächsten ja wieder ganz anders sein). Aber ich habe das Gefühl, wenn es darum geht ein Spiel 2-3 mal schneller zu machen, dann ist das optimale Zeichnen eines Fullscreenquads ganz sicher nicht der Anfang der Optimierungen.
Nein, das nicht. Aber wenn es um Low-Level-Hardware geht, nimmt man alles mit, was man kriegt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von dot »

Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Krishty »

Acht Prozent … nicht schlecht. Aber bevor ich sage Go for that triangle!, sage ich: Miss alle drei!

Und damit hat dir der Thread keine Antworten gebracht. Aber zumindest lernen wir alle was.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von Jörg »

Noch ein Nachtritt...bei (mobilen) kachelbasiert-zeichnenden Grafiklösungen gibt es die lokale Kohärenz gratis. Da fallen die Verluste durch die Helferpixel an den (vielen) Diagonalen eher ins Gewicht.
joeydee
Establishment
Beiträge: 1039
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von joeydee »

Acht Prozent aber nur dann, wenn man die Hardware ausschließlich mit solchen FS-Quads/-Tris auslastet.
Ansonsten, wenn es nur ein Quad vor ausgereizter Szene ist (HUD, Postpro,...), macht das nicht viel aus. Von 0.1ms ist die Rede. Gerade am unteren HW-Ende (bzw. am oberen Ausreiz-Ende), wo Optimierungen interessant werden, ist das z.B. bei um die 40 FPS ein Unterschied in den Framezeiten von z.B. 25.1ms statt 25ms. Da schlägt jeder Kameraschwenk wahrscheinlich mehr Wellen, der Unterschied poppt vermutlich gar nicht mal auf, also in der Praxis unmessbar.
Mein persönliches Fazit: lieber in "Pro-Levelobjekt"-Optimierungen investieren, da holt man bei vollgepackter Szene generell mehr raus als bei solchen Einmal-Objekten; die sind eigentlich ziemlich egal.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fullscreen Quad

Beitrag von dot »

Wen's interessiert: Mir kam es im Zuge meiner Arbeit zufälligerweise dran, die Sache mit dem Clipping zu testen. Fazit: Zumindest auf NVIDIA seit mindestens Fermi (getestet auf GTX 580, GTX 780 Ti, GTX 970 und GTX 980 Ti; Test basierend auf NV_shader_thread_group) wird nur gegen die Near-Plane geclipped. Ein Fullscreen Triangle auf NVIDIA produziert nur vollständig gefüllte Quads...
Antworten