HDR Rendering -Physikalische sinnvolle Werte?

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

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Stephan Theisgen »

… ist Beteigeuze (links etwas oberhalb der Mitte) z.B. gerade hell genug, um vom Tonemapper noch als etwas rötlicher als die anderen Sterne dargestellt zu werden, genau wie beim momentanen Blick aus meinem Fenster. Hast du exzellent recherchiert und greift bestens ineinander, ich danke dir vielmals.
Sieht echt toll aus (!!!), schade, dass mein Renderer noch ein paar kleinere Probleme hat, sonst könnte ich das hier auch sehen! Achja und ich hab zu danken für diesen wirklich hervorragenden Artikel über das Rendern von Sternen und auch für alle anderen sehr kompetenten Tips von Dir. Ich finde es auch immer wieder bemerkenswert, wie tief man eintauchen kann und wenns dann wirklich klappt freut das umsomehr und dann werden die Dinge wieder ganz einfach und viel eleganter als vorher...
Es wäre toll, wenn du den Rechenweg im Artikel posten könntest, damit hätten wir dort alles Wichtige konzentriert. Ich werde dort auch in den nächsten Tagen meinen vorberechneten Sternenkatalog hochladen, damit sich nicht jeder aufs Neue die Mühe machen muss.
Ja, dass werde ich machen, sobald wir hier ganz sicher sind und ich wirklich alles zusammen habe. Ich werde die Formel auch noch etwas vereinfachen.

EDIT: Ich denke so langsam ist das soweit...

EDIT: Offtopic: Ich habe Deine Demo irgendwann heute morgen getestet, dabei ist mir aufgefallen, dass auch wenn ich das Dithering ausschalte, ich dass graugrisseln sehen kann... Kann es sein, dass meine Grafikkarte oder Treiber das automatisch integriert haben.
Benutzeravatar
Krishty
Establishment
Beiträge: 8413
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Stephan Theisgen hat geschrieben:EDIT: Offtopic: Ich habe Deine Demo irgendwann heute morgen getestet, dabei ist mir aufgefallen, dass auch wenn ich das Dithering ausschalte, ich dass graugrisseln sehen kann... Kann es sein, dass meine Grafikkarte oder Treiber das automatisch integriert haben.
Nein, das ist die untere Schwelle der menschlichen Wahrnehmung, das Eigengrau. Du bist nicht der Erste, den das verwirrt … entweder ist mein optischer Rauschpegel deutlich höher als eurer (ich sehe das auch schon bei dunklen Zimmern) oder er fällt mir nur auf, weil ich weiß, dass es ihn gibt.

Jedenfalls zeigt das mal wieder, wie subjektiv Wahrnehmung ist …

Ach – vergiss nicht, dass du durch die rechte Maustaste halten kannst um alle menschlichen Eigenschaften des Tonemappings – Eigengrau, Farbverschiebung und in der nächsten Version auch Glare (nicht aber Dithering, da es eine Verbesserung der Ausgabe und keine Eigenschaft des Betrachters ist) – abzuschalten.

Achja: Atmosphäre brauche ich nicht, die wird seperat berechnet.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von B.G.Michi »

Guten Abend
ich karme den Thread jetzt nochmal raus. Meine Fragen / Probleme haben zwar (noch) nichts mit Sternen zutun, aber der Titel passt :). Ich bin mir nicht wirklich sicher, ob ich die ganze "Lichtrechnerei" kapiert habe...

Bitte korrigiert mich also wo ich falsch liege:
1. Die Einheit des Framebuffers ist cd / m², da auch die Helligkeit eines Pixels auf dem Monitor in cd / m² angegeben wird (?).
2. Angenommen ich habe eine isometrische Lichtquelle mit der Stärke 1 cd. Weiter angenommen, die Lichtquelle hat eine (sichtbare) Fläche von 1 m² aus dem gegenwärtigen Blickwinkel, dann beträgt die Leuchtdichte dieser Lichtquelle 1 cd / m². Ich rendere also die Lichtquelle selbst mit dem Wert 1.0 in den Framebuffer?
3. Weiter beleuchtet diese Lichtquelle eine ("vollkommen") weiße Fläche senkrecht im Abstand von 1 m also mit einer Beleuchtungsstärke von 1 lm / m². Welche Leuchtdichte besitzt nun diese Fläche, also mit welchem Wert muss sie im Framebuffer landen? 1 lm / m² / (4 * pi) weil ein Punkt auf der Fläche die ankommende Beleuchtungsstärke (theoretisch) in alle Raumrichtungen reflektiert, 1 lm / m² / (2 * pi) für eine Halbkugel in Richtung der Normalen oder einfach nur 1 cd / m²?

Als nächstes wird dann der Framebuffer mittels Tonemapping auf, für den Monitor akzeptable Werte gebracht, die menschlichen Seheigenschaften berücksichtigt .. aber dass muss ich morgen erst nochmal genau durchdenken.
Noch was: (4.) Der Öffnungswinkel eines Pixels wird, wenn ich das Richtig verstanden habe, nur benötigt, um die Fläche (und Leuchtdichte) eines, ja immer 2.8 Pixel großen Sternensprites zu berechnen, richtig?

Wie immer schonmal Vielen Dank
JFF_B.G.Michi
Benutzeravatar
Krishty
Establishment
Beiträge: 8413
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Für die ersten Fragen ist es mir gerade ein wenig spät und vllt kann Stephan Theisgen die auch besser beantworten, darum verzeih, dass ich die zurückstelle …
B.G.Michi hat geschrieben:(4.) Der Öffnungswinkel eines Pixels wird, wenn ich das Richtig verstanden habe, nur benötigt, um die Fläche (und Leuchtdichte) eines, ja immer 2.8 Pixel großen Sternensprites zu berechnen, richtig?
Diesen Öffnungswinkel brauchst du für alles, was auflösungsabhängig ist. Das ist jetzt eine vage Antwort, aber:

Wenn du ein normales Dreieck im 3D-Raum auf dem Bildschirm anzeigst, ist das auflösungsunabhängig. Falls du die Auflösung reduzierst bedeckt es zwar weniger Pixel auf dem Bildschirm, ist aber im Verhältnis zum Bildschirm immernoch gleich groß.

Wenn du hingegen eine Sprite so auslegst, dass sie immer 2,8 Pixel groß ist, dann ändert sie ihre Größe im Verhältnis zum Bildschirm natürlich, wenn du die Auflösung reduzierst. Sie bedeckt dann gleich viele Pixel auf dem Bildschirm, aber eine größere Fläche im Verhältnis zum Bildschirm selber.

Der Ausgleichsfaktor dient dazu, das zu kompensieren – damit bleibt die Summe der Helligkeit aller Pixel auf dem Bildschirm im Verhältnis zur Bildschirmfläche konstant; das Bild sieht also bei allen Auflösungen gleich hell aus.

Bei „normaler“ Geometrie, die nicht mit Pixeln sondern in relativen Bildschirmkoordinaten (0…1 oder -1…1) arbeitet, geschieht dieser Ausgleich automatisch, dort brauchst den Ausgleichsfaktor nicht. Da Sterne aber eine bedeutend kleinere scheinbare Größe haben als Pixel auf dem Bildschirm, lassen sie sich so (leider) nicht darstellen und man muss auf den auflösungsabhängigen Sprite-Ansatz ausweichen und es durch den Faktor wiedergutmachen.
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 -Physikalische sinnvolle Werte?

Beitrag von Stephan Theisgen »

Nur ganz kurz von mir eine Schnellschuß-Antwort! Ich muß aber gestehen, dass ich diese ganzen Beleuchtungsrechnungen auch nicht so aus dem Stehgreif kann, bzw. die Einheiten immer leicht durcheinander werfe. Ich werde mir das also bei Gelegenheit noch etwas genauer angucken. Aber ich denke Frage 1 und 2 kann ich so beantworten:
1. Die Einheit des Framebuffers ist cd / m², da auch die Helligkeit eines Pixels auf dem Monitor in cd / m² angegeben wird (?).
Die Einheit ist tatsächlich cd / m² (Leuchtdichte, Luminance). Der Grund ist, dass alles was wir rendern am Ende Flächen (Dreiecke) sind, selbst wenn wir nur einen einzeln Punkt rendern (so handelt es sich um einen Pixel) und damit hat er auch im Endeffekt eine rechteckige Grundfläche und damit ist es eine leuchtende Fläche, welche wir mit der Leuchtdichte cd/m² beschreiben.
2. Angenommen ich habe eine isometrische Lichtquelle mit der Stärke 1 cd. Weiter angenommen, die Lichtquelle hat eine (sichtbare) Fläche von 1 m² aus dem gegenwärtigen Blickwinkel, dann beträgt die Leuchtdichte dieser Lichtquelle 1 cd / m². Ich rendere also die Lichtquelle selbst mit dem Wert 1.0 in den Framebuffer?
Das ist so grob erst einmal richtig. Mehrer Dinge sind zu beachten: Zum einen muß die Leuchtkraft in alle Raumrichtungen gleich groß sein und die Lichtquelle gibt wirklich 1 cd über die angegeben Fläche ab, dann stimmt das so. Vorsicht ist geboten, wenn die Lichtquelle zwar 1 m² groß ist, aber aus irgendeinem Grund kleiner als 1 Pixel wäre und man diesen Pixel aber trotzdem rendert, wie z.B. bei den Sternen. Dann mußt Du das korrigieren, denn dann erscheint uns die Lichtquelle größer als sie tatsächlich ist und damit natürlich auch heller, wenn man für den Pixel immer noch 1 cd/m² in den Framebuffer schreibt.

Ich hoffe das hat jetzt erstmal weitergeholfen. Für die 3. Frage muß ich mir das ganze noch etwas genauer anschauen...

Viele Grüße
Stephan
Antworten