Wie kann man ein sichtbares Spektrum mit gleichmäßiger Intensität korrekt rendern?


8

Ich versuche, die richtige Darstellung des sichtbaren Spektrums auf dem Bildschirm zu rendern. Mein aktueller Fortschritt ist die Verwendung von CIE 1931-Standard-Beobachter-Farbanpassungsfunktionen, die durch die in diesem Artikel angegebenen Gleichungen analytisch angenähert werden . Das aktuelle Bild sieht folgendermaßen aus:

aktuelles Bild konnte ich erzeugen

Hier ist der Hintergrund nicht idealerweise schwarz, um die negativen Beiträge der Farbanpassungsfunktionen einzuführen:

Farbanpassungsfunktionen

Das Problem dabei ist jedoch, dass das Bild irgendwo um 490 nm einen Intensitätsabfall zu haben scheint. Ich vermute, dass dies mit der Summe der drei Funktionen zusammenhängt, die dort ein Minimum haben. Siehe die gegen die Wellenlänge aufgetragene Summe:

Summe von drei Farbanpassungsfunktionen

Meine Frage lautet nun: Wie kann ich die Intensität des Bildes korrigieren? Gibt es einen Standard zur Berücksichtigung der spektralen Empfindlichkeit bei der Umwandlung der Wellenlänge in eine RGB / XYZ-Darstellung?


Hier fand ich einige Informationen zu dieser Frage
Michael Weizenfeld

Schauen Sie sich diesen Thread an, insbesondere die Antwort von Greg Ward später in den Beiträgen. Ich denke, es hängt mit Ihrer Frage zusammen. radiance-online.org:447/pipermail/radiance-general/2015-June/…
Ali

@ali meinst du, es hängt mit meiner dummen Addition von ungewichteten RGB-Werten zusammen? Ich habe diesen Fehler bereits gefunden und in meiner Antwort darüber nachgedacht.
Ruslan

Antworten:


3

Ich vermute, dass dies mit der Summe der drei Funktionen zusammenhängt, die dort ein Minimum haben. Siehe die gegen die Wellenlänge aufgetragene Summe

Dies ist eigentlich ein falscher Weg, um diese Funktionen zu summieren: Das sRGB-Modell gibt an, dass die RGB-Komponenten mit geeigneten Gewichten gewogen werden müssen, um die Leuchtkraft zu erhalten. Dann wird die Leuchtkraft, nicht überraschend, gleich der Y-Komponente der XYZ-Darstellung.

Das Problem dabei ist, dass das Bild irgendwo um 490 nm einen Intensitätsabfall zu haben scheint

Ich kann tatsächlich die Neigung nicht nur in der Nähe von 490 nm sehen, sondern auch eine kleinere in der Nähe von 570 nm.

Wie auch immer, ich glaube, ich habe den Grund dafür gefunden. Zeichnen wir zunächst die entsättigten Farben, die beim Rendern verwendet wurden, in das Farbdiagramm:

Chromatizitätsdiagramm mit dem entsättigten Spektrum im Inneren

Das gestrichelte Dreieck ist der sRGB-Farbumfang, und die durch die unteren beiden Linien der grünen Kurve gebildete Spitze entspricht dem weißen (grauen) Punkt D65. Beachten Sie, dass vom weißen Punkt drei "Unebenheiten" entfernt sind, die violett, bläulich-grün und rot entsprechen. Oder dass es einen starken Abfall der Sättigung in Richtung von 490 nm und eine moderate Abnahme in Richtung von etwa 570 nm gibt. Lassen Sie uns dies grafisch charakterisieren und die Differenznorm der gerenderten Punkte vom Weißpunkt auftragen:

Diagramm eines Sättigungsmaßes

Dies ist genau das , was ich im Bild visuell als Sättigung wahrnehme und mich so mit dem Hintergrund verschmelze.

Woher kommt diese seltsame Form? Und die Antwort ist vom Spektralort im vollen XYZ-Raum. Siehe folgende Abbildung: Die blaue Kurve ist der Spektralort und die Orange ist ihre Projektion auf eine Ebene senkrecht zum Vektor {1,1,1}.

Spektralort im XYZ-Raum

Die Form, die wir im Chromatizitätsdiagramm erhalten haben, ist so etwas wie eine planare Entfaltung des Spektralorts.

In Bezug auf den Realismus dieses Renderings bin ich mir ziemlich sicher, dass wir, wenn wir versuchen, ein reales Spektrum auf eine graue, nicht fluoreszierende Oberfläche zu projizieren, auch diese beiden "seltsamen" Einbrüche sehen werden. Und sie werden weniger auffällig, wenn Sie die Helligkeit des Spektrums im Verhältnis zur Helligkeit der Oberfläche erhöhen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.