Raytracing: Auge - Lichtquelle

Hallo Community :smile:

Ich habe ein Verständisproblem bei Raytracing:

Alles was ich bisher an Theorie über Raytracing gelesen habe,
hat bei mir folgende Vorstellung hinterlassen:
Umgekehrt zur Realität werden bei Raytracing die Strahlen
nicht von der Lichtquelle, sondern vom Auge aus gesendet.
Es wird also ein Strahl vom der Position ausgesendet,
wo theoretisch das Auge ist. Dieser Strahl geht durch
einen Punkt in der Bildebene (Pixel), trifft auf
virtuelle Objekte und wird evtl von diesen reflektiert.
Bei den Objekten sammelt der Strahl Farbinformationen,
die später die Farbe des Pixels ausmachen.
Wenn der Strahl in einer Lichtquelle landet,
dann wird der Bildpunkt entsprechend eingefärbt.
Sonst bleibt er schwarz.
Die Lichtquelle ist ein Punkt im virtuellen 3D Raum.

Mit diesen Informationen kann ich nur folgendes schlussfolgern:
Die Wahrscheinlichkeit, dass ein Strahl vom Auge,
über ein Bildpunkt, reflektiert von Objekten
dann genau in einer punktförmigen Lichtquelle landet, ist extrem gering.
Wie kommt es also, dass bei Raytracing
die Strahlen so präzise in die Lichtquellen treffen
sodass ein Bild entsteht und keine komplett schwarze Fläche?

Werden sie künstlich abgelenkt?
Dann wäre das Bild ja möglicherweise verzerrt und „unnatürlich“.

Ist die Lichtquelle vielleicht nicht ein Punkt sondern ein Körper?
Ich musste bei meinem Raytracing-Programm (pov-ray) immer einen Punkt angeben,
keine Größe oder Form.
Und selbst bei einem Körper wäre die Wahrscheinlichkeit
auf diesen zu treffen zu gering, um die Ergebnisse zu liefern, die es liefert.
Für eine größere Wahrscheinlichkeit müsste der Körper zu groß sein
um eine punktförmige Lichtquelle zu „simulieren“.

Wird der Pixel möglicherweise schon dadurch gefärbt,
dass der Strahl nahe an einer Lichtquelle „vorbei fliegt“?
Dann müsste man eine maximale Distanz festlegen, was den selben Effekt hätte,
wie ein Körper als Lichtquelle (genauer gesagt eine Kugel).
Wenn die Helligkeit von der Distanz abhängig wäre, die der Strahl
im Vorbeiflug von der Lichtquelle hatte, dann müsste das in meiner Vorstellung
auch ziemlich unrealistisch aussehen,
weil dann z.B. ebene Flächen eine ungleichmäßige Beleuchtung hätten.
Wahrscheinlich hätte es auch andere hässliche Auswirkungen.

Ich kann es mir einfach nicht erklären. Wie funktioniert das?

Hallo,

Alles was ich bisher an Theorie über Raytracing gelesen habe,
hat bei mir folgende Vorstellung hinterlassen:
Umgekehrt zur Realität werden bei Raytracing die Strahlen
nicht von der Lichtquelle, sondern vom Auge aus gesendet.

Naja, die werden nicht gesendet, sondern nur rückwärts verfolgt,
wobei die optischen Gesetze so angewendet werden, wie bei
der korrekten Strahlungsrichtung auch.

Es wird also ein Strahl vom der Position ausgesendet,
wo theoretisch das Auge ist.
Dieser Strahl geht durch einen Punkt in der Bildebene (Pixel),
trifft auf virtuelle Objekte und wird evtl von diesen reflektiert.
Bei den Objekten sammelt der Strahl Farbinformationen,
die später die Farbe des Pixels ausmachen.
Wenn der Strahl in einer Lichtquelle landet,
dann wird der Bildpunkt entsprechend eingefärbt.

Naja, in Realität kommt Licht von allen Flächen, die irgend wie
beleuchtet sind, weil diese immer etwas reflektieren.

Aber vereinfacht wird erst mal die direkte Beleuchtung betrachtet.

Sonst bleibt er schwarz.
Die Lichtquelle ist ein Punkt im virtuellen 3D Raum.

Ok. Wie im richtigen Raum auch meist.

Mit diesen Informationen kann ich nur folgendes
schlussfolgern:
Die Wahrscheinlichkeit, dass ein Strahl vom Auge,
über ein Bildpunkt, reflektiert von Objekten
dann genau in einer punktförmigen Lichtquelle landet, ist
extrem gering.

In Praxis ist das natürlich nicht so, weil die Punktlichtquelle
in alle bzw. viele Richtungen abstrahlt.
Also muss das rückwärts auch so angenommen werden.

Wie kommt es also, dass bei Raytracing
die Strahlen so präzise in die Lichtquellen treffen

Da es ja quasi eine Rückwärtsverfolgung ist, bei der festgestellt
werden soll, was sichtbar ist und was verdeckt wird,
kann man natürlich zwischen Bildpunkt und Lichtquelle keine
abbildende Optik annehmen. Die ist ja in Realität auch nicht da.

Also wird nur geprüft, ob vom Bildpunkt aus die Lichtquelle
sichtbar oder verdeckt ist.
Wenn sichtbar, dann muss der Strahl eben bis in die Quelle
verfolgt werden.

Ich musste bei meinem Raytracing-Programm (pov-ray) immer
einen Punkt angeben,

Punktlichtquellen sind mathematisch am einfachsten zu fassen
und stellen eine Idealisierung dar, die in Praxis meist
als gute Näherung zutrifft.

Ich kann es mir einfach nicht erklären. Wie funktioniert das?

Du denkst viel zu kompliziert.
Gruß Uwi

Hallo Uwi,

danke schon mal für die Antworten.

> Also wird nur geprüft, ob vom Bildpunkt aus die Lichtquelle
> sichtbar oder verdeckt ist.
> Wenn sichtbar, dann muss der Strahl eben bis in die Quelle
> verfolgt werden.

Aber wie wird der Strahl bis an die Quelle verfolgt? Darum geht es mir.
Also wenn ich dich richtig verstanden habe, dann lag ich richtig mit der Annahme, dass der Strahl in der Lichtquelle landen muss… sozusagen.
Er muss also im Endeffekt, wenn man ihn rückwärts abläuft, von der Lichtquelle bis zum Auge laufen. Und von den Objekten wird er realistisch reflektiert (Eintrittswinkel = Austrittswinkel).

In der Realität sehen wir ja nur deswegen etwas, weil von den unglaublich vielen Lichtstrahlen „zufällig“ mal einige im Auge landen. Aber bei Raytracing kann man es sich ja nicht leisten so viele Strahlen auszusenden damit einige von denen zufällig in der Lichtquelle landen.

Also wenn ich einen simplen Raytracer selber bauen wollte, wie würde ich das anstellen? Ich stelle es mir so vor, dass ich den Strahl vom virtuellen Auge aus durch die virtuelle Bildebene sende und dann gemäß Reflektierungsgesetzen von den virtuellen Objekten abprallen lasse. Aber dann landet der strahl sicherlich nicht in der Lichtquelle.

Ich finde meinen Denkfehler nicht.

unglaublich vielen Lichtstrahlen „zufällig“ mal einige im Auge
landen.

Ich versteh nicht, was du mit deiner „Zufälligkeit“ hast. Wenn du in einem See stehst und neben dir ein grosser Stein ins Wasser plumpst … findest du es dann auch „zufällig“ von einer der Wellen getroffen zu werden? Außerdem gibt es ja noch indirektes, diffuses Licht, was das Auge treffen kann. In einem Raum mit entsprechend starker Lichtquelle und genügend Oberfläche ist es fast unausweichlich, daß reflektiertes Licht ins Auge dringt.

Du denkst zu viel :wink:

Hallo,

Aber wie wird der Strahl bis an die Quelle verfolgt? Darum
geht es mir.

Ich denke, vom virtuellen Beobachter (Auge) wir zu jedem Bildpunkt
ein Strahl verfolgt und von jedem Bildpunkt zur Lichtquelle.
Damit hat man ein definierte Anzahl Strahlen, die durch die Auflösung
des Bildes bestimmt wird.

Also wenn ich dich richtig verstanden habe, dann lag ich
richtig mit der Annahme, dass der Strahl in der Lichtquelle
landen muss… sozusagen.

Klar. Strahlen, die im Nirwana landen, interessieren ja nicht,
weil die keine (aktive) Beleuchtung darstellen.

Er muss also im Endeffekt, wenn man ihn rückwärts abläuft, von
der Lichtquelle bis zum Auge laufen. Und von den Objekten wird
er realistisch reflektiert (Eintrittswinkel =
Austrittswinkel).
Aber bei Raytracing kann man es sich ja nicht leisten
so viele Strahlen auszusenden damit einige von denen zufällig
in der Lichtquelle landen.

Hilse hat es schon verdeutlicht.

Also wenn ich einen simplen Raytracer selber bauen wollte, wie
würde ich das anstellen? Ich stelle es mir so vor, dass ich
den Strahl vom virtuellen Auge aus durch die virtuelle
Bildebene sende und dann gemäß Reflektierungsgesetzen von den
virtuellen Objekten abprallen lasse. Aber dann landet der
strahl sicherlich nicht in der Lichtquelle.

Doch, weil die meisten Flächen diffus, wie ein
Lambertscher Strahler) reflektieren.
http://de.wikipedia.org/wiki/Lambertscher_Strahler

Neben der Farbe und Grauwert der Fläche müßte also auch der Winkel
die scheinbare Helligkeit jedes Bildpunktes bestimmen.
Vereinfach kann man aber auch erst mal annehmen, das eine diffus
reflektierende Fläche rundum gleichmäßig reflektiert.

Nur bei Spiegeln ist natürlich die Reflexton mit exakten
vorgegebenen Winkel zu berücksichtigen.

Ich finde meinen Denkfehler nicht.

Du denkst zu viel um die Ecke :wink:
Gruß Uwi