PostProcessing mit Direct3D



  • hustbaer schrieb:

    Damit liest du die "HDR" Pixel-Werte aus, und bildest sie mit einer bestimmten Funktion auf darstellbare Pixel-Werte ab.

    Das ist ein wenig zu speziell. Postprocessing ist eine Nachbearbeitung eines fertig gerenderten Bilds. Das kann zwar auch dein beschriebener Bloom-Effekt sein, aber ist bei weitem nicht darauf beschränkt.
    Schlüsselelement ist, dass man eine Textur mit der gerenderten Szene hat, auf die man vor der Bildschirmdarstellung wiederum Shadereffekte anwenden kann.



  • Also ich verstehe das so: Ich render die Scene in ein Render Target und danach übergebe ich dem PostProcessing Effect diese Textur, und zeichne in den Backbuffer. Wenn ich damit richtig liege, hätte da jemand vieleicht einen kleinen Beispiels shader?


  • Mod



  • Registrierter Troll schrieb:

    hustbaer schrieb:

    Damit liest du die "HDR" Pixel-Werte aus, und bildest sie mit einer bestimmten Funktion auf darstellbare Pixel-Werte ab.

    Das ist ein wenig zu speziell. Postprocessing ist eine Nachbearbeitung eines fertig gerenderten Bilds. Das kann zwar auch dein beschriebener Bloom-Effekt sein, aber ist bei weitem nicht darauf beschränkt.
    Schlüsselelement ist, dass man eine Textur mit der gerenderten Szene hat, auf die man vor der Bildschirmdarstellung wiederum Shadereffekte anwenden kann.

    Oh Mann!
    Ich weiss nicht wieso, aber ich hab' mir eingebildet der OP hätte was von HDR geschrieben, und hab die Frage daher auch auf HDR bezogen. Und auf HDR bezogen sind das so ziemlich die zwei relevanten Dinge.

    Du hast natürlich Recht: hier wurde nicht nach Post-Processing für HDR Rendering gefragt, sondern allgemein, und da gibt's viele Dinge die man anstellen kann.



  • Nunja, eigentlich möchte ich bloß 2 Texturen zusammen mischen und dann anzeigen lassen 🙂

    Ich rendere meine Scene 2 mal aus 2 verschiedenen perspektiven, und render das ganze in zwei texturen. Anschließend möchte ich das der Shader der einen Textur das ganze Rot weg nimmt und der anderen das gamze grün, und anschließend sollen die beiden texturen so zu sagen übereinander gelegt werden.



  • Naja das sollte ja ziemlich einfach sein.
    Wo genau hakts denn?

    Mir fällt hier grad überhaupt nichts ein was einen vor Probleme stellen könnte die man nicht mit 5 min Googeln selbst gelöst hat.



  • Ja, das ist nicht wirklich schwer, dachte nur es geht auch ohne dieses Screen Aligned Quad. Wie erstelle ich denn ein solches Quad, das über den ganzen backbuffer geht?



  • Code-Walker schrieb:

    Ja, das ist nicht wirklich schwer, dachte nur es geht auch ohne dieses Screen Aligned Quad. Wie erstelle ich denn ein solches Quad, das über den ganzen backbuffer geht?

    Du renderst zwei Dreiecke, die zusammen ein Rechteck formen und weist den Eckpunkten die Texturkoordinaten (0, 0), (0, 1), (1, 1) und (1, 0) zu. Dafür benutzt du am besten Pretransformed Vertices (Google!), die werden direkt im Screenspace angegeben.
    Bist du sicher, dass du schon so weit bist, dich mit PostProcessing auseinanderzusetzen? 🙂



  • Denk schon. Bin bereits mit allem was ich in meinem Framework einbauen wollte durch, fehlen nurnoch die ganzen PostProcessing Sachen^^

    Unter prestransformed vertices verstehe ich D3DFVF_XYZRHW und finde sonst auch nichts anderes bei google. Ich benutze ja schließlich Shader, deswegen fallen die FVF weg?



  • Wie du die Vertices erstellst ist ganz egal, du brauchst ja nur den Pixel-Shader. Du kannst also für die Vertices ohne Weiteres ein FVF verwenden. Du kannst dir natürlich auch nen kleinen Vertex-Shader schreiben, der die Daten nur unverändert durchreicht.

    Ich hab' z.B. mal einen YV12 Renderer geschrieben. Der Pixel-Shader hatte 3 Texturen (Y, U und V) als Input, und hat daraus dann RGB gebastelt. Ist vom Prinzip her auch nix anderes als Post-Processing. Da hab' ich auch D3DFVF_XYZRHW für die Vertices genommen - wieso kompliziert, wenns auch einfach geht.



  • Wie erstelle ich denn ein solches Quad, das über den ganzen backbuffer geht?

    Wenn Du Dir das nicht selbst zusammenreimen kannst solltest Du dringend einen Grundlagenartikel ueber Koordinatensysteme und -transformation Deiner 3D-API lesen und verstehen.


Anmelden zum Antworten