Deferred- vs Forward-Rendering

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Krishty »

Wie wär’s dann einfach mal mit Messen statt raten? Dass du die Anweisungszahl (D3D? IHV-spezifisch?) von unoptimierten Shadern aufzählst, wenn du von „Leistung“ sprichst, tut ja beim Lesen weh.

Entweder nimmst du jetzt ein ordentliches Analyse-Tool, das dir deutlich ausspuckt ob die Shader in den Knien sind oder ob du einfach die Wavefronts mit zu kleinen Dreiecken nicht voll kriegst, oder du lässt es eben sein.

Hier sind kompetente Leute unterwegs, die dir relativ schnell Kenngrößen für GPU-Leistung nennen können. Die sagen dir, dass du erstmal mit gängigen Tools messen sollst. Und du kommst mit „ein Pixel Shader hat 1000 Befehle, aber wenn ich die Hälfte weglasse, steigen die FPS auch nicht“. Das muss man sich mal auf der Zunge zergehen lassen!

Manchmal kannst du mich echt auf die Palme bringen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Zudomon »

Krishty hat geschrieben:... oder du lässt es eben sein.
Dann lass ich es eben sein.
Schrompf wollte gerne wissen, wo der Flaschenhals ist, bevor ich da jetzt was ändere.
Aber Tools wie NSight kann ich nicht benutzen, das PerfHUD funzt nicht mehr! Also habe ich das, was ich so grob schon über einen Frame weiß, geschrieben.
Es tut mir leid, dass mein Post nicht deinen Erwartungen entspricht, weil du akribisch Zahlen erwartest um dir dann nochmal 2 Jahre Zeit zum analysieren und auswerten nehmen, damit das ganze dann für eine spezifische GPU nochmal 0,26% mehr Leistung bringt, sofern bestimmte Kühltechniken beachtet werden.
Übrigens kann ich mich an deinen zitierten Satz gar nicht erinnern. Also erst die Worte zusammen schmeißen um sich dann über dessen Sinnhaftigkeit auszulassen, herrlich :lol:
Ja, hier sind kompetente Leute unterwegs. Aber Kompetenz bedeutet auch, dass man Annahmen anhand grober Informationen treffen kann, ohne das System aufs kleinste zu kennen. Natürlich sind es dann auch nur grobe Annahmen. Nicht dass selbst wenn man alles exakt hätte, die Annahmen "wesentlich" präziser wären, weil ja eben noch CPU und Treiber mit einfließen. Es könnte ja sogar sein, dass das System wegen Überhitzungsschutz runter tacktet. Oder ich habe irgendwo einen Sleep(2) zwecks analyse verbaut und vergessen. Würde man das wirklich alles bis aufs kleinste analysieren wollen, könnte man daraus gleich ne Lebensaufgabe machen.

Wusste übrigens gar nicht, dass dich meine Beiträge so ärgern :D aber das liegt wahrscheinlich wirklich daran, dass du alles ins kleinste analyisierst und ich eher das genaue Gegenteil bin und gerne alles nach Bauchgefühl mache. :lol:
Oft ärgert man sich über andere, weil diese nicht in das eigene Erwartungbild passen.

Die Instruktionszahl ist übrigens die, die mir der fxc-Kompiler ausspuckt, wo ich aber meine, dass in der Hilfe stand, dass die auch nur einen Anhaltspunkt bieten.
Zuletzt geändert von Zudomon am 13.12.2016, 16:03, insgesamt 1-mal geändert.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von dot »

Zudomon hat geschrieben:Aber Tools wie NSight kann ich nicht benutzen, [...]
Wieso nicht? Alle nötigen Tools sind frei verfügbar!? Wenn mir fad wird, kann ich mit NSight hier selbst Shogun 2, Rise of the Tomb Raider oder was auch immer profilen; wieso du deine eigene Anwendung damit nicht profilen können solltest, ist mir schleierhaft.
Zudomon hat geschrieben:[...] und gerne alles nach Bauchgefühl mache. [...]
Bachgefühl ist halt leider genau das, was absolut nix bringt, wenn es um die Analyse der Performance von Code auf modernen Maschinen geht. Mit Bachgefühl schneidest du dabei vermutlich sogar statistisch signifikant schlechter ab als reine Zufallsentscheidungen... ;)
Zudomon hat geschrieben:Die Instruktionszahl ist übrigens die, die mir der fxc-Kompiler ausspuckt, wo ich aber meine, dass in der Hilfe stand, dass die auch nur einen Anhaltspunkt bieten.
fxc kompiliert Shader in eine Intermediate Representation, die erst vom Driver in den eigentlichen, hardwarespezifischen Maschinencode übersetzt wird... ;)
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Zudomon »

dot hat geschrieben:
Zudomon hat geschrieben:Aber Tools wie NSight kann ich nicht benutzen, [...]
Wieso nicht? Alle nötigen Tools sind frei verfügbar!? Wenn mir fad wird, kann ich mit NSight hier selbst Shogun 2, Rise of the Tomb Raider oder was auch immer profilen; wieso du deine eigene Anwendung damit nicht profilen können solltest, ist mir schleierhaft.
Ich dachte, man muss dazu Visual Studio haben, funktioniert das auch standalone?
http://www.nvidia.com/object/nsight.html
Hier sehe ich nur für Visual Studio und Eclipse Edition.
dot hat geschrieben:
Zudomon hat geschrieben:[...] und gerne alles nach Bauchgefühl mache. [...]
Bachgefühl ist halt leider genau das, was absolut nix bringt, wenn es um die Analyse der Performance von Code auf modernen Maschinen geht. Mit Bachgefühl schneidest du dabei vermutlich sogar statistisch signifikant schlechter ab als reine Zufallsentscheidungen... ;)
Bauchgefühl bedeutet doch, dass man auf das, was einem die innere Stimme sagt, hört. Also vor allem auch unbewusste Aspekte mit rein spielen. Das "Bauchgefühl" hängt vor allem auch stark von Erfahrungswerten ab. Wenn jemand überhaupt keine Erfahrung hat, dann entspricht dieses wohl wirklich einer Zufallsentscheidung.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von dot »

Zudomon hat geschrieben:
dot hat geschrieben:
Zudomon hat geschrieben:Aber Tools wie NSight kann ich nicht benutzen, [...]
Wieso nicht? Alle nötigen Tools sind frei verfügbar!? Wenn mir fad wird, kann ich mit NSight hier selbst Shogun 2, Rise of the Tomb Raider oder was auch immer profilen; wieso du deine eigene Anwendung damit nicht profilen können solltest, ist mir schleierhaft.
Ich dachte, man muss dazu Visual Studio haben, funktioniert das auch standalone?
Ja, muss man. Das tolle ist: Man kann Visual Studio einfach runterladen und installieren... ;)
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Zudomon »

dot hat geschrieben:Ja, muss man. Das tolle ist: Man kann Visual Studio einfach runterladen und installieren... ;)
Das weiß ich, aber ich dachte halt, dass es als Debugging für das Projekt integriert ist. Also dass man das nicht einfach auf irgendwelche exe Dateien los lassen kann.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von dot »

Zudomon hat geschrieben:Also dass man das nicht einfach auf irgendwelche exe Dateien los lassen kann.
Kann man, wie gesagt, aber... ;)
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: Deferred- vs Forward-Rendering

Beitrag von Schrompf »

Zudomon hat geschrieben:Schrompf wollte gerne wissen wollte, wo der Flaschenhals ist, bevor ich da jetzt was ändere.
Stop. Nein, nicht *ich* wollte wissen, was bei Dir das langsamste ist. *Du* willst wissen, was langsam ist. Und die einzige Methode, das herauszukriegen, ist das Messen. Dein Bauchgefühl kannst Du ignorieren. Du bist ja inzwischen lang genug ein Mensch, um die üblichen Fehler des menschlichen Hirns zu kennen, und Bauchgefühl ist da ganz vorn mit dabei. Zumal Du ja schon selbst festgestellt hast, dass das Halbieren der Anzahl Instruktionen im FragmentShader nix gebracht hat, obwohl Dein Bauchgefühl vorher dachte, das würde was bringen.

Also: messen. Und versuche nicht, das selbst zu schreiben. Lade Dir VS runter, installiere NSight, lass die Profis messen. Das sind vielleicht 2h Gebastel. Zum Selber-Profilen müsstet Du deutlich mehr arbeiten und hast hinterher keine Garantie, dass Du die tatsächliche Silizium-Zeit deiner DrawCalls misst. Ganz zu schweigen davon, dass Du manche Dinge wie z.B. die Lastverteilung auf die Funktionsgruppen gar nicht messen kannst, ohne Unterstützung durch den GPU-Treiber zu bekommen.

[edit] Leider ist es nicht so einfach, wie es klingt: NSight braucht einen instrumentierten Treiber. Und als ich das letzte Mal den instrumentierten Treiber haben wollte, gab's den noch nicht für Windows10 :roll:
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Zudomon »

Schrompf hat geschrieben:Bevor Du jetzt irgendwelche Änderungen am Renderer ausprobierst, wäre es aber spannend zu wissen, wo bei Dir konkret der Flaschenhals ist.
Klingt für mich aber eher nach deiner Neugierde, statt nach meiner.

Aber mit den restlichen Aussagen hast du/ihr eventuell recht. Da bin ich dann wohl Schachmatt... grrr. ;)
"Messen" wird wohl mein Unwort für 2017! :D
Werde mal schauen, ob ich NSight ans laufen bekomme.
Schrompf hat geschrieben:[edit] Leider ist es nicht so einfach, wie es klingt: NSight braucht einen instrumentierten Treiber. Und als ich das letzte Mal den instrumentierten Treiber haben wollte, gab's den noch nicht für Windows10
Ich seh mich schon mit einem Bein wieder im Motivationsproblemethread!
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von dot »

Schrompf hat geschrieben:[edit] Leider ist es nicht so einfach, wie es klingt: NSight braucht einen instrumentierten Treiber. Und als ich das letzte Mal den instrumentierten Treiber haben wollte, gab's den noch nicht für Windows10 :roll:
Sicher dass du das nicht mit dem veralteten PerfHUD verwechselst!? NSight funktioniert bei mir mit dem stinknormalen GeForce Driver ganz ausgezeichnet...
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Zudomon »

Also bei mir scheint das NSight zu funktionieren. Hab es auch schon hinbekommen, da was zu profilen. Aber einen Frame wirklich durchgehen, also dass ich auf dem Bildschirm sehe, welche Dreiecke gezeichnet werden usw., soweit bin ich noch nicht. Muss ich mich dann mal mehr mit beschäftigen.

Aber mal noch etwas anderes, was ich nicht so ganz verstehe. Ich wollte das ja eigentlich so machen, wie Doom 4 das dann rendert:
http://www.adriancourreges.com/blog/201 ... ics-study/
Also statt großen G-Buffer einen Hybridrenderer. Bei genauerer Überlegung verstehe ich aber nicht wirklich, was da nun der Vorteil ist. Denn wenn da Depth, Velocitymap und im nächsten Pass Lightbuffer, Normalen und Materialeigenschaften gefüllt wird, dann hört sich das aber irgendwie auch nach einem G-Buffer an. Auch wenn in dem Artikel da Thin-G Buffer steht, kommt der mir genauso groß vor, wie vorher auch. Ob nun das Licht zum teil verschoben wird in einen "Forward"-Renderingteil um dann hinterher doch die Reflektionen usw. im Postprozess zu machen, scheint mir eigentlich das gleiche zu sein. Oder übersehe ich da was?
Punika
Beiträge: 29
Registriert: 25.02.2002, 15:12
Echter Name: Lutz Hören
Kontaktdaten:

Re: Deferred- vs Forward-Rendering

Beitrag von Punika »

Hi

also Thin-G Buffer weil es eben nicht soviel Speicher braucht. Aber ich denke das hast du selber gesehen. Ich würde heutzutage
auch gar nicht mehr von Forward oder Deferred Rendering sprechen. Gerade weil man heute durch Compute Shader noch mehr
Möglichkeiten hast. Und was noch wichtiger ist: Speicher in deinem Programmcode (GPU) wie du es möchtest. Was ich damit meine, ist das du halt heute ohne
weiteres aus einem Grid die Anzahl der lichter und lichter rauslesen kannst ohne Performance Probleme zu bekommen. Der Szenengraphen kommt halt in irgendeiner Form, immer mehr auf die Grafikkarte. Damit ist der Unterschied zwischen Forward/Deferred immer kleiner. Ich würde es auch so ausdrücken: Du möchtest die Rendering Equation so gut wie möglich approximieren und du hast X Anzahl an Techniken. Die einen funktionieren auf Objektebene, die anderen vielleicht Screen-Space ebene usw. und ich glaube die hohe Kunst ist es, die verschiedenen Techniken klug zu verbinden. Speicher optimiert usw.

Also nicht auf die Namensnennung viel geben. Es ist immer das gleiche Prinzip, für mich ist ein Depth Pre-Pass eine Art Deferred Rendering, da es die GPU dazu bringt, den Pixel Shader nur die sichtbaren Pixel zu rendern. Und einen Depth Pre pass gab es schon bevor deferred rendering in Mode kam. Man könnte z.B. sagen das du am Anfang gerne Pixel Shader kosten sparen willst. Deferred schreibt dabei einfach nur in einen G-Buffer und Forward Rendering nutzt halt fast immer einen Depth Pre-pass. Jetzt gibt es halt alle Variationen wieviel man am Anfang speichert. Nur Depth, oder vielleicht schon die Normalen. Mit den beiden kriegst du dann später z.B. schon mal nen SSAO screen space Effekt hin. Und das Spiel geht dann so weiter. Leider gibt es wie immer im Leben den perfekten weg nicht. Ich finde den Doom Ansatz auf jeden fall interessant weil er doch relativ wenig Speicher benutzt, das rendering von opaquen und translucenten Oberflächen besser vereinheitlicht und die Rendering Equation ganz gut ausfüllt.

Ich glaube aber das du dir auch Gedanken machen musst, welche Techniken du gerne hättest.
Antworten