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

HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Stephan Theisgen »

Hallo!

Ich versuche mich gerade einmal wieder am Artikel "Hochwertiges Rendern von Sternen"! Um nicht völlig ins Abseits zu geraten, wenn ich andere Lichtquellen optisch ansprechend hinzufügen wernde, hätte ich gerne die HDR-Werte physikalisch sinvoll gegeben. Ich weiß nun wie man die apparente Helligkeit der Sterne in mag in echte Helligkeitsunterschiede umrechnet (das ist nicht schwer). Aber meine Frage ist nun, welcher physikalischer Wert eigentlich den Helligkeitsinformationen im HDR entspricht, Lumen, Lux, Candela, Candela/m2??? Da bin ich irgendwie verwirrt. Ich würde ja am ehesten Lux raten, aber alle Paper die ich dazu finde reden irgendwie von Cd/m2... Warum?

Vielleicht kann ja hier jemand mein Verständnis von Beleuchtungsmodellen, Astronomie oder High Dynamic Range Rendering erweitern!

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

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Wenn du die Formel hast, gib sie mir. Mit Glare bemerke ich, dass die Formel im Artikel schlechte Ergebnisse liefert (einige Sterne werden einfach viel zu hell) :/

cd÷m² repräsentiert die Leuchtdichte, also wie viel Licht von einer bestimmten Fläche kommt. Das empfinden wir, salopp gesagt, als Helligkeit.

Im Gegensatz dazu steht die Beleuchtungsstärke – wie viel Licht uns von einer Quelle erreicht, also bescheint. Der Unterschied ist: das eine ist nicht von der Entfernung abhängig, das andere schon. Wenn wir uns von einem Flächenstrahler entfernen, erreicht zwar weniger Licht unser Auge – geringere Beleuchtungsstärke –, der Stahler erscheint uns deswegen aber nicht weniger hell: Da er weiter weg ist, erscheint er uns nämlich kleiner, und die Lichtmenge pro Fläche, die wir sehen – Leuchtdichte – Helligkeit – bleibt gleich.

cd÷m² werden eingesetzt, wenn es um Helligkeit im für Menschen sichtbaren Spektrum geht, weil die Einheit an die Spektralkurve des Auges angepasst ist. Eine Infrarotlampe leuchtet zwar auch stark, hat aber 0 Candela, weil wir ihr Licht nicht sehen können. Geht es um das Licht in allen Spektralbereichen, spricht man von Watt pro Quadrameter für die Leuchtdichte, also die Strahlungsdichte(?). Astronomische Daten sind meist darin angegeben, weil sonst Röntgen- und Infrarotaufnahmen schlicht und einfach schwarz wären (überall 0 cd÷m²), für den Menschen besitzt solche Strahlung ja keine Helligkeit.

Dann wäre da noch die empfundene Helligkeit, die einbezieht, dass dein Auge die doppelte Lichtmenge nicht als doppelt so hell empfindet. Da die Natur aber keine menschliche Helligkeitskurve kennt, ist sie in der Praxis unbedeutend (die ganze Grafikpipeline sollte idealerweise im Linear Space arbeiten) und findet nur im Gamma Space Anwendung. (Das ist auch die Erklärung dafür, warum Beleuchtung im linearen Farbraum realistischer aussieht.)

Auch die Helligkeit des Bildschirms, vor dem du sitzt, wird in cd÷m² angegeben und dürfte zwischen 100 und 300 liegen. Wenn du also einen Pixel anzeigst, ist der – Gammakorrektur außen vor – ein Skalierwert für die Helligkeit des Bildschirms an diesem Punkt.

Rendering muss also folgendes tun: Es hat Daten über emittiertes Licht (entweder in W oder in cd) und berechnet nun, wie viel Helligkeit den Betrachter aus der virtuellen Szene je in R, G und B (in cd÷m²) erreicht. Das wird in einer 2D-Matrix gespeichert – besser bekannt unter dem Namen „Textur“ oder „Frame“. Beispiel:
Du hast eine Lichtquelle in deiner Szene, die mit 100/50/25 cd in R,G und B leuchtet (ich weiß nicht, wie viel die Leistung einer 50-Watt-Glühbirne in cd ist, aber das kann man auch irgendwie ausrechnen ;) ). Wenn du nun den Pixel-Shader für ein Objekt durchlaufen lässt, nimmst du diese 100/50/25 aus einem Register, berechnest die Distanz zur Lichtquelle (hier einfach mal 10 m) und teilst durch das Quadrat. Dann weißt du: Dieser Pixel wird mit 1/0,5/0,25 cd÷m² beleuchtet. Dann multiplizierst du noch mit dem Skalarprodukt, damit du weißt, wie viel von dieser Helligkeit in Richtung des Betrachters reflektiert wird, multiplizierst u.U. noch mit einer Textur (die ja nur einen Skalierfaktor für die Reflektivität einer Oberfläche darstellt), schreibst das in den Frame und weißt, wie viele cd÷m² dieser Pixel auf dem Bildschirm hell sein sollte, um die Szene 1:1 wiederzugeben.

Tonemapping läuft dann darauf hinaus, die Funktion zu finden, die zu diesen Helligkeiten passende Skalierwerte ausspuckt damit die Bildschirmhelligkeit, auch in cd÷m², eine möglichst ähnliche Helligkeit ausspuckt. In den simpelsten Fällen ist das eine Multiplikation und ein Exponent 1/2,2 (weil die Skalierwerte, die du zur Grafikkarte schickst, gammakorrigiert sind, sofern du deine Textur nicht als sRGB kennzeichnest. Gammakorrektur ist eine einfache Form von Kompression, um die kontraststarken Werte, die wir eigentlich meinen, in 8 Bits zu kriegen, indem wir die nichtlineare Empfindlichkeit des Auges ausnutzen.)

Über das Thema lassen sich ganze Bände füllen, aber jetzt hast du hoffentlich einen Überblick :)

Gruß, Ky

Edit: Bei den Sternen würde es darauf hinauslaufen, durch die astronomische Helligkeit zu berechnen, wie viel W sie pro Raumrichtung abstrahlen. Das ginge ggf über die astronomische Helligkeit der Sonne und die Solarkonstante. Daraus dann zu cd. Dann berechnet man den Durchmesser der Sterne und ihre Distanz, um die scheinbare Größe zu ermitteln und hat ihre Leuchtdichte.
Problematisch ist nur, dass man dabei im wahrsten Sinne des Wortes mit astronomischen Größen rechnen muss … und ich bin gerade zu sehr eingespannt, um mir da was zu überlegen.
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 »

gut dann doch die Schnellantwort: So ähnlich müßte das dann auch laufen! Ich schreibe gerade an einer ausführlichen Antwort...
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Stephan Theisgen »

Hi! Vielen Dank für die ausführliche Erklärung! Deine Antworten und Beiträge sind immer Erleuchtungen ;-) für mich.

Den Unterschied zwischen photometrischen und radiometrischen Einheiten hatte ich schon verstanden, immerhin beschäftige ich mich jetzt schon den ganzen Tag damit. Allerdings ist das Verhältnis zu den astronomischen Einheiten nicht ganz so klar. Aber dazu nachher mehr...

Erst einmal ein Zitat aus der Wikipedia, dass ich jetzt gefunden habe:
Die Leuchtdichte L (engl. luminance) ist das fotometrische Maß für das, was Menschen als Helligkeit wahrnehmen, also für die Lichtstärke pro Fläche. Eine Lichtquelle mit einer vorgegebenen Lichtstärke erscheint umso heller, je kleiner ihre Fläche ist.
Das passt auch zu Deinen Ausführungen:
cd÷m² repräsentiert die Leuchtdichte, also wie viel Licht von einer bestimmten Fläche kommt. Das empfinden wir, salopp gesagt, als Helligkeit.
So damit steht für mich jetzt erstmal fest, dass ich Cd/m2 im HDR-Rendering verwenden muss, da es der empfunden Helligkeit entspricht und Helligkeit ja der entscheidende Faktor im HDR-Rendering ist.

Ich schreib einfach mal auf, wie weit ich jetzt bin:
Also den echten Helligkeitsunterschied als Verhältnis (I/I0) berechne ich aus den mag-Werten wie folgt:
I/I0 = 2.512^(m – m0)
Der Wert 2.512 ergibt sich aufgrund der mag-Skala aus der 5ten-Wurzel aus 100. (siehe englische Wikipedia: Apparent Magnitude)
Jetzt braucht man eigentlich nur noch für einen Stern mit mag = 0 den entsprechenden Wert in cd/m2, so dachte ich, das funktioniert so aber leider nicht.
Tabellierte Werte für Sonne und Mond sind (siehe Wikipedia):
Sonnenscheibe am Mittag 1,6•10^9
Oberfläche des Mondes 2,5•10^9
Skeptisch macht mich auch, wie der Wikipedia-Artikel weitergeht:
Die Leuchtdichte erfasst die Helligkeit von ausgedehnten, flächenhaften Lichtquellen; für die Beschreibung der Helligkeit von punktförmigen Lichtquellen dienen hingegen Lichtstrom und Beleuchtungsstärke.
Und Sterne sind von der Erde aus eher Punktquelle, da wir sie aber als Fläche (quad, pixel etc. rendern) müssen wir diese Ausdehnung eigentlich berücksichtigen um auf die Werte in cd/m2 zu kommen. Für Mond und Sonne (fast gleiche apparente Fläche am Himmel) spielt das keine Rolle, aber die Sterne werden wir so hoffnungslos unterschätzen, da sie deutlich kleiner sind.

Die Rechnung mit Lux ist recht einfach und ergibt sich nach folgender Internetseite (http://stjarnhimlen.se/comp/radfaq.html) bzw. der englischen Wikipedia zu:
I [lx] = 2.54E-6 lx * 2.512^-(m [mag] - 0mag)
da:
mag = 0 star outside Earth's atmosphere = 2.54E-6 lx
Und die mag-Werte für Sonne und Mond sind (siehe Wikipedia-Artikel):
Sun -26.74 mag
Moon -12.74 mag
Dies ergibt z.B. für die Sonne 126.287 lx und für den Mond 0,31 lx.

Das Resultat simmt dann ganz gut mit den Werten für ein Sonnentag und eine Vollmondnacht bei Wikipedia überein (siehe deutscher Artikel: Lux):
Heller Sonnentag 100.000 lx
Vollmondnacht 0,25 lx
Laut folgender Internetseite (http://stjarnhimlen.se/comp/radfaq.html) entspricht Luminance (Leuchtdichte) in astronomischen Einheiten nicht mag sondern in mag/arcsec2. D.h. zum Umrechnen darf man nicht mag einsetzten sondern mag durch arcsec^2, die Werte hierfür sind laut Wikipedia (Artikel: Angular Diameter)
Sun 31.6′ – 32.7′
Moon 29.3′ – 34.1′
Alpha Centauri A 0.007″
Canopus 0.006″
Sirius 0.005936″
Altair 0.003″
Deneb 0.002″
Proxima Centauri 0.001″
Und hier hänge ich jetzt erst einmal und weiß nicht so richtig weiter… Die Berechnungen in Lux sind ganz sinnvoll, aber wie komme ich jetzt am besten auf cd/m2 da muß ich mal noch etwas forschen…
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Stephan Theisgen »

Ach ja, folgende Seite ist auch ganz nützlich:

http://mysite.du.edu/~jcalvert/astro/magnitud.htm
Benutzeravatar
Krishty
Establishment
Beiträge: 7924
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Die Lux waren genau das fehlende Puzzleteil!
Wenn wir sie aus der scheinbaren Helligkeit berechnen können und sie der Lichtstrom pro Raumwinkel sind, kann man ja ausrechnen, wie viel Licht durch die Winkelfläche fließt, die ein Pixel bzw. eine Sternensprite in der Bildschirmmitte einnimmt. Dann wäre das die Leuchtdichte des Sterns, mit der wir die Sprite leuchten lassen müssen – ist jedenfalls jetzt mein erster Gedanke …
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 »

Klingt gut, aber entweder habe ich da etwas falsch verstanden oder Du liegst gerade nicht ganz richtig. Lux ist leider der Lichstrom pro Empfängerfläche und leider nicht pro Raumwinkel, das müßte man noch umrechnen. Aber ich habe vielleicht einen anderen Weg gefunden!

Das ganze geht wie folgt:

Was wir ausrechnen wollen ist die Flächenhelligkeit in cd/m^2 aus der relativen Helligkeit in mag. Da Sterne meistens als Punktquellen angenommen werden, wird ihnen keine Flächenhelligkeit (z.B. in astronomischen Einheiten in mag/arcsec^2) zugeordnet, Galaxien aber schon. Die Erkenntnis wie man es machen könnte brachten mir nun folgende beiden Wikipedia-Artikel: Surface brightness bzw. auf Deutsch Flächenhelligkeit. Sie zeigen die Umrechnungsformel der Flächenhelligkeit X in mag/arcsec^2 in die Flächenhelligkeit B in cd/m^2:
B = 1.084 * 10^5 * 10(-0.4*X)
.
Es ist aber Aufgrund der logarithmischen Skala nicht ganz so leicht aus den mag-Werten m in mag und der scheinbaren Fläche der Sterne A gegeben in arcsec^2 die Flächenhelligkeit in mag/arcsec^2 auszurechnen, da das ganze nicht linear ist, aber auch diese Formel findet sich in den Artikeln:
X = m + 2.5*log10(A)
.
(Etwas verwirrt hat mich nur, dass die Flächenhelligkeit hier im Original B und nicht X wie oben genannt wurde.)
Eine Beispielrechnung für Alpha Centauri A ergibt mit m = 1.33 mag, angular diameter d = 0.007 arcsec und damit A = 0.000049 arcsec^2 (siehe die Wikipedia-Artikel: Surface brightness und Angular Diameter)):
für X = -9,44 mag/arcsec^2 und damit für die Flächenhelligkeit B = 649880045 cd/m^2. Also eigentlich verdammt hell, für den "größten" Stern R. Doradus ergibt sich:
mit m = 5.73 mag, angular diameter 0.057 arcsec und damit A = 0.003249 arcsec^2 für X = -0.49 mag/arcsec^2 und damit für die Flächenhelligkeit B = 170325 cd/m^2.

Ich hoffe ich habe mich jetzt da nirgendwo verrechnet. Aber viel wichtiger ist, dass man natürlich nie diese kleinen Flächen rendert. Man rendert ja Pixel (Sprites). Will man also wissen, welchen Wert in cd/m^2 das Sprite haben muß, so muß man noch ausrechnen, wie viel arcsec^2 ein Pixel entspricht, und damit die Fläche des Sprites in arcsec^2 angeben und in obiger Formel statt der echten scheinbaren Fläche einsetzen, die man sowieso nur für wenige Sterne findet.

Das schöne an dieser Methode ist, das man auch für Galaxien, für andere Objekte und auch für den Hintergrund ohne Sterne einen entsprechenden Helligkeitswert berechnen kann.

Ich hoffe diese Methode klappt jetzt wirklich so, ich bin noch nicht durch alle Formeln durchgestiegen...
Tejio
Establishment
Beiträge: 107
Registriert: 11.11.2010, 11:33

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Tejio »

Hallo zusammen,

verzeiht mir bitte meinen Offtopic, aber ich finde es immer wieder erstaunlich, mit welchen Sachen man sich im Forum beschäftigt und wie sehr ihr euch einander helft. Ich habe nicht ganz alles verstanden, worum es hier im Thread geht, aber ich bin auch schon fließig dabei, mich in das Thema einzufließen. Danke für die Anregungen!

Schönen Abend schon mal,
Tejio
Benutzeravatar
Krishty
Establishment
Beiträge: 7924
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Tejio hat geschrieben:Ich habe nicht ganz alles verstanden, worum es hier im Thread geht
Wir wollen (gemäß meinem Artikel) Sterne rendern und versuchen nun, von den physikalischen Helligkeitsangaben aus Sternkatalogen darauf zu schließen, wie hell wir die einzelnen Sterne rendern müssen :)
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 »

Also so langsam traue ich der Formel, auch wenn ich noch nachvollziehen muß, wo die Konstanten her kommen. Ich habs mal für die Sonne durchgerechnet:
apparent magnitude: m = -26.73 mag
angular diameter: d = 31.6′ – 32.7′
Die Rechnung nach obiger Formel ergibt: 1.4+10^9 cd/m2, dass finde ich schon sehr nahe dran für Schätzwerte,
denn nach dem Wikipedia-Artikel Luminance gilt:
The sun has luminance of about B = 1.6×10^9 cd/m2 at noon
Jetzt müssen wir halt noch ausrechnen, wieviel arcsec^2 ein Pixel ausmacht...
Benutzeravatar
Krishty
Establishment
Beiträge: 7924
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:Jetzt müssen wir halt noch ausrechnen, wieviel arcsec^2 ein Pixel ausmacht...
Das ist relativ einfach – tan(FoV) ÷ Auflösung ist die Seitenlänge eines Pixels in Einheitsentfernung, atan und fertig. (Einmal beim Start für FoV von 45° ausrechnen und dann, wenn sich das FoV ändert, quadratisch anpassen.)

Ich krame gerade in meinen alten Dateien, wo ich noch den Sternenkatalog habe – habe seit einem Jahr nur noch mit den fertig konvertierten Daten gearbeitet und deshalb den ganzen Konvertierungskram verlegt. Kann sich nur noch um Stunden handeln.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7924
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: HDR Rendering -Physikalische sinnvolle Werte?

Beitrag von Krishty »

Okay, habe es (testweise für 1024) implementiert. Die Werte sind nun wesentlich regelmäßiger als bei meiner geratenen Formel vorher … zwei Screenshots zum Vergleich, vorher und nachher (mit übersteuertem Glare, damit die Helligkeitsabstufungen deutlicher sind):
before.png
after.png
Ich muss jetzt natürlich noch die Helligkeit des Hintergrundbildes und das Tonemapping anpassen … und ich muss noch testen, inwiefern schwache Sterne bei kürzerer Belichtungszeit verschwinden (da ja jetzt offensichtlich viel viel mehr Sterne zu sehen sind, scheinbar mehr als in den meisten Nächten).
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 »

Super! Schön zu sehen, dass es was bringt? Inzwischen weiß ich auch, wo die Formel her kommt, bei Bedarf und/oder genug Zeit, werde ich das hier auch gerne erklären. Allerdings weiß ich noch nicht, wie sie auf den Referenzwert von 1.084 * 10^5 in der Formel kommen. Das konnte ich noch nicht finden...
Ich habe noch eine gute Quelle für die Formel mit Herleitung gefunden: http://web.mit.edu/8.902/www/handouts/m ... arcsec.pdf.
Ich muss jetzt natürlich noch die Helligkeit des Hintergrundbildes und das Tonemapping anpassen … und ich muss noch testen, inwiefern schwache Sterne bei kürzerer Belichtungszeit verschwinden (da ja jetzt offensichtlich viel viel mehr Sterne zu sehen sind, scheinbar mehr als in den meisten Nächten).
Das könnte auch daran liegen, dass die mag-Werte die hier als Referenz genommen werden, für außerhalb der Erde gelten, dass steht zwar nirgendwo, aber die Werte scheinen zu passen (ich rechne ja schon den ganzen Tag hin und her...). Allerdings ohne mein o.g. Problem des Referenzwertes zu lösen, bleibt das natürlich nur eine Vermutung. Die Atmosphäre verschlechtert um ca. 0.4 mag, so stand das jedenfalls mal in einem Paper, dass Du vor kurzem zitiert hast, vielleicht hilft das erstmal...
Benutzeravatar
Krishty
Establishment
Beiträge: 7924
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:
Ich muss jetzt natürlich noch die Helligkeit des Hintergrundbildes und das Tonemapping anpassen … und ich muss noch testen, inwiefern schwache Sterne bei kürzerer Belichtungszeit verschwinden (da ja jetzt offensichtlich viel viel mehr Sterne zu sehen sind, scheinbar mehr als in den meisten Nächten).
Das könnte auch daran liegen, dass die mag-Werte die hier als Referenz genommen werden, für außerhalb der Erde gelten, dass steht zwar nirgendwo, aber die Werte scheinen zu passen (ich rechne ja schon den ganzen Tag hin und her...). Allerdings ohne mein o.g. Problem des Referenzwertes zu lösen, bleibt das natürlich nur eine Vermutung. Die Atmosphäre verschlechtert um ca. 0.4 mag, so stand das jedenfalls mal in einem Paper, dass Du vor kurzem zitiert hast, vielleicht hilft das erstmal...
Neinein, ist auch so schon grandios – ich habe die Schwellenwerte fürs Farbensehen auf realistische Werte gesetzt (0,03 cd÷m² für mesopisch; 0,3 cd÷m² für photonisch) und das Ergebnis ist so gut wie es nur sein kann, ohne in subjektive Wahrnehmungseigenschaften abzurutschen. Hier …
new star luminance.png
… 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.
Stephan Theisgen hat geschrieben:Inzwischen weiß ich auch, wo die Formel her kommt, bei Bedarf und/oder genug Zeit, werde ich das hier auch gerne erklären. Allerdings weiß ich noch nicht, wie sie auf den Referenzwert von 1.084 * 10^5 in der Formel kommen. Das konnte ich noch nicht finden...
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.
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 »

Ok, jetzt habe ich es, allerdings weiß ich immer noch nicht wo die Quellen alle ihre Werte her nehmen, aber hier steht:
Still another unit for intensity is magnitudes per square arcsec, which is the magnitude at which each square arcsec of the extended light source shines:


Magnitudes per Nit = Candelas/m2
square arcsec inside unit airmass outside atmosphere

0 9.0E+4 10.9E+4
+5 9.0E+2 10.9E+2
+10 9.0 10.9
+15 9.0E-2 10.9E-2
+20 9.0E-4 10.9E-4
+25 9.0E-6 10.9E-6
Da ist zu sehen, dass einem Wert von 0 mag/arcsec^2 hier 0.90E+5 cd/m^2 in und 1.09E+5 cd/m^2 außerhalb der Atmosphere entspricht. Die obige Formel verwendet 1.084E+5 cd/m^2, also den wert von 1.09E+5 cd/m^2 für außerhalb der Atmosphere, dass heißt innerhalb müssen wir mit 0.90E+5 cd/m^2 rechnen, da auch die Werte für die apparente Helligkeit in mag von der Erde aus gesehen angegeben sind. Also jetzt noch einmal die verbesserte Formel:
B = 0.90 * 10^5 * 10^(-0.4*(m+2.5*log10(A))
mit
m = apperente Helligkeit in mag
A = scheinbare Fläche am Horizont in Quadratbogensekunden
Natürlich ändert sich ingesamt nicht so viel, aber wenn schon dann korrekt...
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: 7924
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: 7924
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