Ideale Spiegelreflexion ist wie ein perfekter Spiegel. Ich schaue mir den Code für SmallPt an und sehe, dass eine der Kugeln ein ideales Spiegelmaterial hat:
Sphere spheres[] = {//Scene: radius, position, emission, color, material
/ ...
Sphere(16.5,Vec(27,16.5,47), Vec(),Vec(1,1,1)*.999, SPEC),//Mirr
/ ...
};
Bei der Strahlungsberechnung geschieht Folgendes:
} else if (obj.refl == SPEC) // Ideal SPECULAR reflection
return obj.e + f.mult(radiance(Ray(x,r.d-n*2*n.dot(r.d)),depth,Xi));
wo f
ist die Objektfarbe von Vec(.999,.999,.999)
.
Ich war überrascht, hier eine Farbvervielfachung zu sehen. Hat ein idealer Spiegel keine Farbe? Ich denke wie es f
ist Vec(.999,.999,.999)
, effektiv geht es durch die Farbe fast unverändert? Irgendwelche Gedanken darüber, warum .999 verwendet wurde und nicht 1? Ich vermute, das ist etwas, um einen winzigen Energieverlust zu modellieren?
raytracing
specular
PeteUK
quelle
quelle
Antworten:
Was "ideal" in diesem Zusammenhang bedeutet, ist, dass es keine Divergenz in Richtung der Lichtreflexionsvektoren gibt (dh keine Rauheit), sondern dass sie alle als perfekte Reflexionen von einer optisch flachen Oberfläche betrachtet werden. Selbst für optische flache Oberflächen wird bei der BRDF-Bewertung immer noch die Fresnel-Gleichung angewendet, die die Spiegelreflexion ändert und möglicherweise wellenlängenabhängig ist, was bei Metallen ein gemeinsames Merkmal ist.
In smallPt gibt es jedoch keine Fresnel-Näherung (z. B. Schlick-Näherung ), sondern das Oberflächenreflexionsvermögen wird einfach mit einem konstanten Term multipliziert, was falsch ist. Auch die Spiegelalbedo von 0,999 ist für jedes reale Material sehr hoch. Nachfolgend finden Sie eine Tabelle der Spiegelreflexionsbereiche verschiedener Metalle und Dielektrika bei normaler Inzidenz als Referenz:
quelle
Das Metallspekular ist ein Produkt der hellen Farbe und der Albedo des Materials. Nur für Nichtmetalle ist die Farbe des Spiegels unabhängig von der Albedo, aber auch eher dunkel. Ein perfekter Spiegel wäre daher eine perfekt glatte metallische Oberfläche mit einer Albedo von 1. Man könnte also sagen, ein solcher Spiegel wäre weiß und hätte keine Farbe.
Ein realistischerer Spiegel würde zum Beschichten etwas wie Silber mit einer Albedo von (0,972, 0,960, 0,915) verwenden. Diese Farbe stellt den Prozentsatz des Lichts jeder Frequenz dar, der von Silber reflektiert wird. Daher muss es mit der Farbe des reflektierten Lichts multipliziert werden.
quelle
In diesem Zusammenhang bezieht sich "perfekter Spiegel" auf eine perfekt flache Oberfläche mit einer diffusen Farbe von 0% (reines Schwarz). Es ist jedoch immer noch möglich, eine spiegelnde Farbe zu haben: Zum Beispiel verhält sich eine Weihnachtsbaumkugel wie ein perfekter Spiegel, färbt aber immer noch die Reflexion. Wenn Sie die 99% weiße Farbe durch eine rote Tönung ersetzen, erhalten Sie den roten Weihnachtskugel-Look.
In SmallPT haben Kugeln zwei Farben:
e
die Emissionsfarbe undc
. Der Trick ist, dassc
es zwei verschiedene Bedeutungen gibt, die vom Materialtyp abhängenrefl
:refl
istDIFF
,c
wird als diffuse Farbe interpretiert.refl
istSPEC
,c
wird als Spiegelfarbe interpretiert.Im Fall Nr. 2 wird also die diffuse Farbe weggelassen, was einer diffusen Farbe von 0%, reinem Schwarz, entspricht.
Falls Sie es noch nicht überprüft haben, ist diese Präsentation eine hervorragende Code-Erklärung für SmallPT , dicht, aber gründlich: smallpt: Global Illumination in 99 Zeilen C ++ .
quelle
Ideale Spiegel sind genau das, ideal. Die Frage, ob es Farbe hat oder nicht, kommt nie ins Spiel, sein Ideal spiegelt es alles wider. Wie die Division durch Null ist es undefiniert. Dies bedeutet jedoch nicht, dass Sie Ihr Ergebnis nicht mit einem multiplizieren können, es ist immer noch dasselbe Ergebnis.
Das Problem ist, dass wir die Konzepte von Intensität und Farbe erfolgreich miteinander vermischt haben. Wir nehmen in RGB einfach an, dass die Farbe 3 unabhängige Intensitäten hat. Was überhaupt nicht stimmt, es ist eine ziemliche Vereinfachung der Funktionsweise der Realität. Es gibt wirklich so etwas wie ein hochintensives dunkles Orange, das RGB nicht erklären kann. Als solches ist es schwer zu sagen, da wir zwei unabhängige Dinge als eins zusammenführen. Aber ja, wahrscheinlich wird etwas Energie aus einem in diesem Code unbekannten Grund entfernt.
quelle