HDR-Rendering "lernen"

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

HDR-Rendering "lernen"

Beitrag von Stephan Theisgen »

Hallo!

Ich wollte mich gerne einmal dem HDR-Rendering widmen. Leider finden sich nicht allzuviele Internet-Quellen auf Anhieb. Kennt hier vielleicht jemand gute Tutorials oder hat Tips für mich. Ich wäre sehr dankbar.

Viele Grüße
Stephan
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: HDR-Rendering "lernen"

Beitrag von CodingCat »

alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Stefan Zerbst
Moderator
Beiträge: 189
Registriert: 25.02.2009, 19:54

Re: HDR-Rendering "lernen"

Beitrag von Stefan Zerbst »

Hi,

"gelernt" habe ich mit dem anderen HDR Sample http://msdn.microsoft.com/en-us/library ... S.85).aspx aus dem DirectX SDK. Das ist relativ übersichtlich und der Code ist auch so kommentiert, dass man gut versteht wann was warum passiert. Mehr braucht man eigentlich gar nicht um den HDR-Kram zu durchblicken. Und falls dann noch spezifische Fragen über bleiben: ab in dieses damit.

Ciao,
Stefan
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR-Rendering "lernen"

Beitrag von Stephan Theisgen »

Hi!

Erstmal vielen Dank für die Hilfe. Ich hab mich da jetzt überall durch gewühlt und denke, daß ich das jetzt so einigermaßen verstehe. So kompliziert ist das (zumindestens oberflächlich berachet) gar nicht. Ich werde jetzt mal versuchen das ganze zu implementieren, mal sehen, ob ich das gut hinbekomme.

Übrigens scheint es ja viele unterschiedliche Ausprägungen im Detail zu geben. Ich werde dann mal austesten, welche Funktionen und Varianten das für mich beste Ergebnis (auch hinsichtlich Performance) liefern. Vor allem wird bei HDR auch fast immer ein Glow-Effekt mitgezeigt, aber eigentlich ist das ja nur Zusatz, um zu zeigen, was man dann mit HDR noch so anfangen kann. Ich brauchs jedenfalls, also schadet es nicht.

Trotzdem bleibt mir noch eine kleine Frage, im SDK-Beispiel wird das Bild einfach auf 243x243 (von 640x480) runter gesampelt (was aber nicht der Hälfte entspricht). Da gehen aber dann Informationen verloren, oder? Bzw. kann ich das einfach genauso machen? Oder brauche ich da noch einen Schritt mehr? Wie handhabt Ihr das denn? (Meine Auflösung ist 1200x768 oder so)

Viele Grüße
Stephan
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR-Rendering "lernen"

Beitrag von Krishty »

Stephan Theisgen hat geschrieben:Trotzdem bleibt mir noch eine kleine Frage, im SDK-Beispiel wird das Bild einfach auf 243x243 (von 640x480) runter gesampelt (was aber nicht der Hälfte entspricht). Da gehen aber dann Informationen verloren, oder? Bzw. kann ich das einfach genauso machen? Oder brauche ich da noch einen Schritt mehr? Wie handhabt Ihr das denn? (Meine Auflösung ist 1200x768 oder so)
Information geht beim Downsampling immer verloren ;) Die Frage ist, wie viel du verkraften kannst. Wenn ein einzelner strahlender Pixel im ansonsten schwarzen Bild sofort eine Anpassung in Gang setzen soll, darfst du natürlich nichts überspringen … da helligkeitsbestimmende Strukturen aber eigentlich immer größer als 4 × 4 Pixel sind (und kleinere Strukturen auch unbeabsichtigt entstehen können, z.B. wenn etwas zwischen zwei nicht sauber aneinandergereihten Polygonkanten durchschimmert) ist das zu völlig in Ordnung.

Größere Sorgen hinsichtlich der Qualität würde ich mir bei Fragen machen, wie: Tonemapping vor oder nach dem Resolven von Anti-Aliasing? Vor oder nach Bloom? Fürs Tonemapping die Helligkeit aller Pixel gleich gewichten, oder Pixel in der Bildschirmmitte stärker? Etc pp.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Stefan Zerbst
Moderator
Beiträge: 189
Registriert: 25.02.2009, 19:54

Re: HDR-Rendering "lernen"

Beitrag von Stefan Zerbst »

Hi,

durch das quadratische Format wird das ganze dann eh noch mal verzerrt. Das Quadratische macht es aber auch einfacher eine Downsampling-Chain zu haben die dann gleichzeitig auf beiden Achsen bei 2x2 bzw. 1 Pixel ankommt. Letzten Endes macht man zudem am Ende auch einen Blur drüber und da kommt einem das Downsampling sogar zu Gute: Wenn man das ganze dann als Textur auf ein Rechteck über den ganzen Screen pinselt wird die kleinere, uadratische Textur sogar noch durch das Texture Filtering gefiltert und dadurch erhält man einen schöneren Blur quasi fast "umsonst" mit dazu.

Ciao,
Stefan
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR-Rendering "lernen"

Beitrag von Stephan Theisgen »

Hi,

ich hab nochmal eine Frage bezüglich HDR-Rendering:
Ich rendere Objekte mit Farbwerten von teilweise weit über 100.0f. Ich dachte das wäre gerade das tolle an HDR, dass ich erstmal so rendern kann, wie ich will und dann im ToneMaping erst runterbreche auf 0 bis 255, etc. Aber irgendwie gibt der PixelShader maximal 1.0f als Farbwert in die FloatingPoint-Textur aus, zumindest sagt mir Pix das. Also entweder habe ich etwas grundlegendes von HDR noch nicht verstanden oder aber irgendetwas läuft schief. Alle Werte größer 1.0f werden einfach auf 1.0f geclampt. Ist das normal?

Viele Grüße
Stephan
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR-Rendering "lernen"

Beitrag von Krishty »

Nein, irgendwas läuft schief. Nochmal verifiziert, dass es sich beim Render-Target tatsächlich um ein _FLOAT-Format handelt, nicht um _UNORM (alte Code-Stücke)? Dass die Render-Target-View vom Format her auch wirklich dem Render-Target entspricht? Wie sieht der Shader aus? Debug-Output aktiviert und überprüft?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR-Rendering "lernen"

Beitrag von Stephan Theisgen »

Also es handelt sich um ein ARGB 32 Float Format im RenderTarget wie im RenderTargetView, das sagt mir auch Pix. Ich hab jetzt auch mal den Geoshader raus genommen, so dass er eigentlich jetzt nur den Colorwert im Vertexshader durchreicht und im Pixelshader ausgibt. Aber eben maximal nur 1.0f statt bis ca. 100.0f. Debugoutput der Shader ist an, aber die machen nichts, die transformieren nichtmal, wird einfach weiter gereicht. Könnte es vielleicht an Pix selbst liegen?
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR-Rendering "lernen"

Beitrag von Stephan Theisgen »

Ok, ich bin schonmal was weiter, ich konnte jetzt meinen PixelShader endlich anständig debuggen. Zwar sagt PIX mir, dass der Pixel die Farbe (1.0f, 1.0f, 0.0f, 1.0f) hat, aber der PixelShader-Output (die PS-Variable) beinhaltet (95.0f, 25.0f, 0.0f, 1.0f), ich werde jetzt einfach mal weitermachen und das RenderTarget als Textur in einen Shader übergeben und sehen, was er dann ausliest! Hat jemand ähnliche Probleme mit PIX und HDR?
Antworten