OGL - wie Textur downsamplen (für Tonemapper)
Verfasst: 29.06.2011, 15:58
Moin Spezialisten,
ich habe mal eine konzeptionelle Frage auf eher niedrigem Niveau für einige hier. Nicht lachen:
Wie gehabt, bezieht sich mein Problem auf OpenGL – eventuelle spezielle DX-Lösungen tun es also nicht.
Ich tu mich gerade damit schwer mit dem Downsampling einer Textur. Im Kontext geht es darum, dass ich für nen Tonemapper ja Infos über die „aktuelle“ Helligkeit des Bildes/der Szene brauche.
Die Idee ist dann ja, das aktuelle Bild, welches ja in Form einer Textur vorliegt (Deferred Rendering), downzusamplen, bis es die Größe 1x1 hat. Dann kann ich im späteren Rendershader diesen Wert dieser Textur einfach mittig samplen, wenn ich den Wert für die „aktuelle“ Helligkeit brauche.
Die Frage ist: Wie bekomme ich die Textur mit meiner Scene möglichst schnell klein genug (auf 1x1)?
Ich könnte ja automatische Mipmaps generieren lassen mittels glGenerateMipmap. Da dies aber LAHM ist und ich ja nicht alle Mipmaps brauche, sondern „NUR“ die 1x1-Stufe, finde ich diese Idee doof. Weiterhin solls wohl auch nicht der besonders schnelle Weg sein, es geht wohl auch nur bei power-of-two-Texturen und ist nicht von besonders hoher Qualität.
Dann gibt’s noch die Idee, das aktuelle Bild mit nem selbstgeschriebenen Filter-Shader immer um die Hälfte zu verkleinern (1024x1024->512x512->256x256->…->1x1). Da habe ich dann aber eben nen Sack voll Verkleinerungs-Passes, ganz davon abgesehen brauch ich ja auch für jede Größe ein passendes FBO inkl. Textur(en).
Ist das der „richtige“ Weg oder gibt’s noch nen „richtigeren“ Weg? Oder gibts nen ganz anderen Weg, diese Werte für den Tonemapper zu bekommen?
Ich bedanke mich im Voraus für ein wenig Licht (<-- hahah, Tonemapping) in meinem Dunkel!
Beste Grüße,
Jens
ich habe mal eine konzeptionelle Frage auf eher niedrigem Niveau für einige hier. Nicht lachen:
Wie gehabt, bezieht sich mein Problem auf OpenGL – eventuelle spezielle DX-Lösungen tun es also nicht.
Ich tu mich gerade damit schwer mit dem Downsampling einer Textur. Im Kontext geht es darum, dass ich für nen Tonemapper ja Infos über die „aktuelle“ Helligkeit des Bildes/der Szene brauche.
Die Idee ist dann ja, das aktuelle Bild, welches ja in Form einer Textur vorliegt (Deferred Rendering), downzusamplen, bis es die Größe 1x1 hat. Dann kann ich im späteren Rendershader diesen Wert dieser Textur einfach mittig samplen, wenn ich den Wert für die „aktuelle“ Helligkeit brauche.
Die Frage ist: Wie bekomme ich die Textur mit meiner Scene möglichst schnell klein genug (auf 1x1)?
Ich könnte ja automatische Mipmaps generieren lassen mittels glGenerateMipmap. Da dies aber LAHM ist und ich ja nicht alle Mipmaps brauche, sondern „NUR“ die 1x1-Stufe, finde ich diese Idee doof. Weiterhin solls wohl auch nicht der besonders schnelle Weg sein, es geht wohl auch nur bei power-of-two-Texturen und ist nicht von besonders hoher Qualität.
Dann gibt’s noch die Idee, das aktuelle Bild mit nem selbstgeschriebenen Filter-Shader immer um die Hälfte zu verkleinern (1024x1024->512x512->256x256->…->1x1). Da habe ich dann aber eben nen Sack voll Verkleinerungs-Passes, ganz davon abgesehen brauch ich ja auch für jede Größe ein passendes FBO inkl. Textur(en).
Ist das der „richtige“ Weg oder gibt’s noch nen „richtigeren“ Weg? Oder gibts nen ganz anderen Weg, diese Werte für den Tonemapper zu bekommen?
Ich bedanke mich im Voraus für ein wenig Licht (<-- hahah, Tonemapping) in meinem Dunkel!
Beste Grüße,
Jens