Was nützt HDR Rendering?

IRQ

Mitglied
Hi @ll,

in letzter Zeit ist das Stichwort HDR (High Dynamic Range) Rendering zumindest in der Spielewelt ja in aller Munde, so dass ich neugierig auf diese neue "Technik" wurde. Leider hat sich mir der Sinn des Ganzen noch nicht so richtig erschlossen und da diese Technik (zumindest in verwandter Form) auch in 3D Programmen verwendet wird, dachte ich, dass meine Fragen hier gut aufgehoben sind.

Am besten führe ich einfach mal kurz auf, was ich bisher verstanden habe (wenn ich etwas falsch intepretiert habe, so korrigiert mich bitte). Also, zumindest im GamesBereich werden bei HDR Rendering statt 32bit (wie bisher) 128bit Informationen pro Pixel verarbeitet. Dadurch kann anstatt der bisherigen ca. 4.3 Milliarden verschiedenen Farben bis zu 3.4 * 10^38 Farben zur Verfügung. Diese Technik wird jetzt z.B. verwendet (schön zu sehen im Demo von F.E.A.R. denk ich mal) um Überblendeffekte realistisch zu simulieren (so "addieren" sich die Helligkeit von Wandlampen und Taschenlampe gewissermassen und das resultierende Licht erscheint "heller").

Soweit die Theorie, jetzt aber zu meinen Fragen. Wie ich bisher angenommen habe, funktionieren die handelsüblichen Monitore nach dem RGB-Modell in dem 16.7 Millionen Farben möglich sind. Das heisst doch, dass egal wie hoch die interne Genauigkeit ist, im Endeffekt denoch auf diese 24bit heruntergerechnet werden muss. Falls ich nicht völlig falsch liege, so heisst dieser Vorgang bei HDR doch Tone-mapping (oder so ähnlich).

Kernfrage: Wenn aber am Ende sowieso auf 24bit umgerechnet werden muss, wieso dann überhaupt diese Umweg über 128bit?

Ich wäre wirklich überaus froh, wenn mich da jemand fachkundig aufklären könnte und keine Angst, ein kleines bisschen Fachchinesisch verstehe ich schon :).
 

cycovery

Erfahrenes Mitglied
Alles richtig bisher :)

Also der witz ist folgender . . . bisher hatten wir ja 8bit pro kanal (=24bit pro pixel) oder selten 16bit pro kanal (=48bit pro pixel). Die Farben in einem kanal funktionierten dann so, dass 0=schwarz ist und 2^8 bzw. 2^16 = weiss. Somit hat man bei 8bit pro kanal 256 grauabstufungen dazwischen und bei 2^16 =25536 abstufungen pro kanal.
Der wesentliche unterschied zu HDRI floating point values besteht aber nicht in der abstufung, sondern dass es bei 8bit und 16bit NUR werte zwischen ganz schwarz und ganz weiss gibt.

Neu bei HDRI haben wir 32bit pro kanal. Jetzt wird aber nicht 0 als schwarz und 2^32 als weiss gerechnet, sondern 0.0=schwarz und 1.0=weiss. Graustufenwerte dazwischen werden dann z.b. als 0.12547.. gespeichert. Allerdings sind nun auch Werte von z.b. 1.5679 oder 112.12345 möglich! Für die Ausgabe auf dem Bildschirm wird natürlich jeder wert über 1.0 einfach auf 1.0 runtergeclamped, weil der Bildschirm an den orten ja nicht noch Heller leuchten kann. Ein normales HDRI Bild unterscheidet sich auf dem Monitor als auch überhaupt nicht von einem herkömmlichen.
Interessant wird es erst, wenn mathematik hinzukommt! Z.b. eine schwarze Kugel, die mit 5% reflektiert. Bei einem herkömmlichen zu reflektierendes Bild von der sonne (auf dem Bild komplett weiss) wurde dieses weiss einfach auf 5% von 2^8 (für alle drei kanäle) bzw. von 2^16 runtergerechnet und man hatte ein dunkles grau.
Neu mit HDRI können wir aber wesentlich weiter gehen - so hat die Sonne hier z.b. einen Wert von 30.5,25.0,22.0 . . . Somit bleibt die reflektion auf unserer kugel auf dem Bildschirm immer noch weiss wie es sein sollte!
Oder bei einem blur eines bildes, bei dem links schwarz und rechts weiss ist, wurde bisher einfach dazwischen ein verlauf von schwarz auf weiss erzeugt. Neu kann das bild aber z.b. links 0 und rechts 50 pro kanal haben. Nun wird beim blurren das auf dem bildschirm auf weiss runtergeclampete weiss das schwarz sehr stark überstrahlen.
Oder wir können bei einem HDR bild ganz einfach nachträglich die belichtungszeit Ändern! denn neu wird, wenn wir z.b. die Belichtungszeit runterschrauben, aus den überbelichteten, auf dem Monitor komplett weissen, Flächen neue details zu sehen sein (da sie ja im HDRI gespeichert sind - sind einfach alles werte über 1.0 und werden auf dem bildschirm auf 1.0 geclamped)


Ich hoffe das war einigermassen verständlich!
 
Zuletzt bearbeitet:

IRQ

Mitglied
Vielen Dank für eure aufschlussreichen Antworten.

Vor allem das Beispiel mit der 5% Reflektion hat mir sehr geholfen. Wenn ich das jetzt richtig verstanden habe, werden jetzt neu statt 8bit Ganzzahlen, 32bit (Single Precision) Gleitkommazahlen verwendet?

Auf jeden Fall bin ich jetzt bereits ein bisschen klüger ;).
 

IRQ

Mitglied
Genau, gibt auch das Wort Fliesspunktzahlen, aber in Deutschland verwenden sie ja das Komma für die Trennung der Nachkommastellen und den . als Tausendertrennzeichen. Ist noch ziemlich lästig, hab ich doch unlängst bei eBay Deutschland statt 5.80€, 5'800€ geboten (d.h. ich hab 5.8 eingegeben und es wurde halt als 5.800 intepretiert).