Hinweis: Dieser Artikel ist ein Beitrag zum ScienceBlogs Blog-Schreibwettbewerb 2015. Hinweise zum Ablauf des Bewerbs und wie ihr dabei Abstimmen könnt findet ihr hier. Informationen über die Autoren der Wettbewerbsbeiträge findet ihr jeweils am Ende der Artikel.
——————————————
Vor ein paar Wochen stand ich wegen einem Zugausfall im Regen und als für einen kurzen Moment die Sonne raus kam, konnte ich einen Regenbogen bewundern. Das Simulieren von einem Regenbogen gehört in der Computergrafik zu den anspruchsvolleren Aufgaben und so hab ich die restliche Wartezeit damit verbracht, mir ein wenig Gedanken zur Computergrafik und der beteiligten Physik zu machen.
Ein Regenbogen entsteht vereinfacht gesagt dadurch, dass Sonnnlicht sich in einem Regentropfen bricht und nach einer Reflektion im Tropfen in einem anderen Winkel zurück gestrahlt wird. Durch der Brechung ist dieser Winkel für jede Frabe des Spektrums ein klein wenig anders wodurch sie dann an einer anderen Stelle des Himmels erscheint. Das nennt man Dispersion, die auch Prinzipt hinter den Farbeffekten bei Prismen ist. Genau wegen dieser Eigenschaft sind Prismen wie auch der Regenbogen nicht ganz leicht mit dem Computer zu simulieren.
In der Computergrafik rechnet man meistens mit RGB Farben. Das heißt Displays erzeugen Farbeindrücke dadurch, dass für jeden Bildpunkt rotes, grünes und blaues Licht mit unterschiedlicher Stärke gemischt wird. Für die häufigsten der in der Natur vorkommenden Farben gibt es eine solche Mischung aus Rot, Grün und Blau die im menschlichen Auge den gleichen Effekt auslösst wie die eigentliche Farbe. Zu den selteneren Farben, die man auf diesem Weg nicht simulieren kann gehören dann besonders intensive, reine Farbe. Alle vom Computer darstellbaren Farben können, weil sie aus drei Grundfarben gemischt werden, durch den Anteil der jeweiligen Grundfarbe beschrieben werden. Und genau das wird meistens auch gemacht, wie man bei der Bildberarbeitung, der Gestaltung von Webseiten und vielen anderen Bereichen feststellen kann.
In der Natur kommen wesenlich mehr als nur diese drei Grundfarben vor. Selbst die Annahme, dass unsere Augen Rot, Grün und Blau als Grundfarben wahrnehmen ist nicht ganz richtig. Die Details dazu sind aber ein eigenes Thema, für das ich mal einen eigenen Post schreiben müsste. Licht besteht natürlich aus alle Bestandteilen des Spektrums und selbst der sichtbare Teil des Spektrums enthält unendlich viele verschiedene Farben. Diese kann das Auge aber nicht einzeln unterscheiden, sondern liefert nur einen Gesamteindruck, wewegen der Trick mit den drei Grundfarben auch super funktioniert.
Trifft Licht allerdings auf ein Prisma, so spaltet es sich auf und die einzelnen Farbanteile werden sichtbar. Will man das am Computer simulieren, hat man aber meist statt dem gesamten Spektrum nur den RGB-Wert für das eintreffende Licht. Man weiß also bei einem gelben Lichtstrahl nicht, ob das Licht jetzt wie am Computerdisplay aus Rot und Grün gemischt wurde oder nur aus dem gelben Anteil des Spektrums besteht. Es kann natürlich auch eine Mischung aus Beidem, also Rot, Grün und dem daziwschen liegendem Gelb sein. Es gibt für einen gegebenen RGB-Farbwert quasi unendlich viele Spektren, die genau den gleichen Eindruck erzeugen, aber hinter einem Prisma unterschiedlich Bilder erzeugen. Und genau das ist das Problem, weil woher soll man wissen, welches Spektrum sich wirklich hinter der Farbe versteckt?
Bei Regenbögen behilft man sich meistens damit, dass Regenbögen nur unter bestimmten Bedingungen (relativ flacher Sonnenstand, hohe Feuchtigkeit der Luft) auftreten und Sonnenstrahlen dann ein recht ähnliches Spektrum besitzen. Dieses Spektrum ist auch relativ gleichmäßig, weswegen der Bogen alle Farben enthält. Wäre dies nicht der Fall, würden einzelne Farben fehlen oder wären deutlich schwächer. Gerade bei künstlicher Beleuchtung trifft man solche Spektren durchaus an.
Mir hatte sich an dem regnerischen Nachmittag die Frage gestellt, ob die Benutzung von RGB-Farben statt dem gesamten Spektrum sich nicht nur bei Dispersion sondern auch unter ganz “normalen” Bedingungen auswirkt. Immerhin könnte es ja ein Material geben, dass nur gelbes Licht aber kein grünes und rotes Licht reflektiert. Bestrahlt man so ein Material mit weißem oder “echtem” gelbem Licht so würde es den gelben Anteil wieder abstrahlen und es hätte daher eine gelbe Farbe. Bestrahlt man so ein Material hingegen mit einem gelb wirkenden Licht, das in Wirklichkeit aus Rot und Grün gemischt wurde, so würde dieses Licht nicht reflektiert sonder absorbiert und das Material würde schwarz wirken. In beiden Fällen wären der RGB-Wert des Lichtes der gleiche gewesen obwohl sie zu einem vollkommen verschiedenen Ergebnis geführt hätten. Auch wenn es wahrscheinlich nicht allzu viele Materialien gibt, die sich so extrem verhalten (immerhin haben computergenerierte Bilder ja zumindest annähernd die gleichen Farben wie auf Fotos), dürfte man den Effekt trotzdem antreffen.
Daher habe ich mich dann zuhause dazu entschieden, das ganze mal am Computer zu simulieren. Dazu habe ich das zurückgestrahlte Licht für verschiedene Materialien unter verschiedenen Beleuchtungen berechnet. Ich habe jeweils für das Licht und das Reflektionsspektrum den RGB-Wert bestimmt und einmal direkt damit gerechnet. Und zum Vergleich das ganze nochmal mit dem gestamten Spektrum durch gerechnet und erst anschließend für das reflektierte Licht einen RGB-Wert bestimmt und die beiden verglichen. Leider konnte ich für detailierte Spektren so gut wie keine Quellen finden, die eine Lizenz mit offenen Nutzungsbedingungen hatten. Deswegen beschränke ich mich hier auf ein paar von mir rekonstruierte Spektren [1] und solche Lichtspektren [2], die zwar frei verwendbar sind, dafür aber nicht zu 100% genau sind. Das macht allerdings nichts, weil der Effekt selbst dadurch nicht beeiflusst wird und ich zum Vergleich noch Simulationen mit Spektren aus anderen Quellen mit ähnlichem Ergebnis gemacht hatte.
Das Ergebnis meiner kleinen Simulation scheint meine Vermutung zu bestätigen. Für Gold sind klare Unterschiede zu erkennen, wenn statt dem vollen Spektrum nur mit Rot, Grün und Blau gerechnet wird. Allerdings sind bei Silber die Unterschiede kaum noch zu erkennen und bei Aluminium gar nicht mehr vorhanden. Man muss sich also bei unserer heutigen Computergrafik noch keine großen Gedanken über die Grenzen von RGB-Farben machen. Zumindest solange man mit den gängigen Verfahren noch andere wesentlichere Abweichungen erhält. Nähert man sich allerdings der Perfektion oder braucht man aus anderen Gründen (zum Beispiel weil man an den Dispersionseffekten interessiert ist oder für wissenschaftliche Simulationen). Und weil das natürlich auch schon länger bekannt ist, gibt es genau für solche Zwecke auch Programme. Mit der Open-Source Software Pov-Ray oder mit Blender und kann das jeder selbst ausprobieren. Allerdings sind diese nicht gerade ganz leicht zu bedienen. Und wäre ich gleich auf die Idee gekommen, das damit zu berechnen (das Program enthält eigene Spektren), hätte ich mir etwas Arbeit gespart, wäre aber mit Sicherheit nicht über die vielen interessanten Artikel zu dem Thema gestolpert. So oder so freue ich mich natürlich auch weiterhin über jeden Regenbogen.
P.S.: Sollte es Interesse an diesem oder ähnlichen Themen geben, werde ich versuchen auch außerhalb des Schreibwettbewerbs etwas dazu zu schreiben und die Chance nutzen, dabei wieder viel neues zu lernen.
[1] Reflektions-Spektren der Metalle aus einem Diagram von DrBob bei Wikipedia entnommen (CC BY-SA 3.0 Unported, https://en.wikipedia.org/wiki/File:Image-Metal-reflectance.png)
[2] Licht-Spektren von https://spectralworkbench.org/ (Public Domain)
————————————————-
Hinweis zum Autor: Dieser Artikel wurde von Johannes (“JoselB”) geschrieben: “Ich bin Softwareingenieur und das ist mein erster Blogbeitrag seit meiner kurzen OpenSource-Zeit während dem Studium.”
Kommentare (21)