Skip to main content


Zutaten: Zucker, Kakaomasse (50%), Milchzucker, Weizenmehl, Vollmilchpulver, Magermilchpulver, Butterreinfett, Sahnepulver, Butter (1,4%)
Kann Spuren von Analysis und Geometrie enthalten.

II-05_titel_cg

Die Rendergleichung

Max kommt zu Rike ins Loft. Er hat ein Glas mitgebracht und stellt es auf den Tisch. Max ist mit seinem Studium ein bisschen weiter und belegt nun Computergrafik.

Max Hi, Rike, wie geht es Dir?

Rike Hi, Max! Gut! Und selbst?

Max Danke! Ich habe hier ein Glas mitgebracht. Sieht doch ganz einfach aus. Das will ich modellieren, eine Glastextur drauflegen und rendern. Aber ich bekomme es nicht so richtig hin! Woran liegt das?

Rike Oh, Max, das ist ein weites Feld, da steckt ziemlich viel Mathematik dahinter. Ich versuche mal, das zu erklären.

Max Okay.

Lokales Lichtsetting

II_05_geometry_arnold_01-07

Rike Wir fangen mal mit nicht transparenten, nicht selbstleuchtenden Oberflächen an. Nehmen wir mal an, Dein Glas ist aus weißer Keramik. Dann müssen wir für jeden Punktxder Oberfläche des Glases – oder besser des Bechers – ausrechnen, wie viel Licht er in Richtung\omegazu einem Pixel der virtuellen Kamera abgibt.

II_05_geometry_arnold_10-02

Max Trifft denn nur ein Lichtstrahl auf meine Kamera?

Rike Hey Max, gute Frage, einer wäre etwas wenig. Jeder Pixel auf dem Sensor der virtuellen Kamera erhält einen anderen Strahl, der vonxausgeht.

II_05_geometry_arnold_12-02

Max Okay, das sind bei einer Vollformatkamera ca.:

2\;800\; \times\; 4\;200\; px = 11\;760\;000 px,

echt 'ne Menge Pixel!

Tangenten und Normale

Rike Stimmt. Die Berechnungen muss man für jedes Pixel machen. Dann haben wir noch eine Lichtquelle in Richtung \omega\,^{\prime},vom Punkt x aus gesehen. x liegt auf der Oberfläche S, da legen wir die Tangenten X und Y an, Z zeigt in die Richtung der Normalen von S in x.

Max Mein Glas ist aber rund! Nicht so, wie Du gezeichnet hast!

Rike Das macht nichts, hier, das ist so:

II_05_geometry_arnold_03-04
Tangentialebene und Tangenten X und Y an die OberflächeS im Punktx.

Du musst Dir das ganz lokal vorstellen! Statt der Krümmung nehmen wir die Tangentialebene, lokal!

Die Bidirectional Reflection Distribution Functionf_r

Max Und was ist am Rand des Bechers? Wie legst Du da die Tangenten?

Rike Hey Max, noch eine gute Frage! Wir müssen natürlich nicht nur lokal schauen, sondern die Oberflächen aller Objekte der Szene betrachten, also auch die Ränder. Am Rand des Bechers ändert sich die Reflexionseigenschaft. Entweder ist da Luft oder der Tisch unterm Becher. Das wird durch eine Funktion beschrieben,

f_r(- \omega\,^{\prime}, x, \omega),

die heißt Bidirectional Reflection Distribution Function.

Max Hmm, BRDF? Hab ich schon mal im 3D-Programm gesehen.

Rike Richtig, an der Stelle kannst Du die Reflexionseigenschaft der einzelnen Objekte einstellen, also richtungsabhängige Reflexion oder Rauigkeit. Aus all den Oberflächeneigenschaften der einzelnen Objekte und der Geometrie Deiner Szene errechnet der Renderer des 3D-Programms diese Funktion f_rfür jeden Punkt.

II_05_brdf_01

Max Okay, was noch?

Der Energieerhaltungssatz

Rike Diese Funktion f_r muss eine Bedingung erfüllen:

\int_{\Omega_x}\;f_r(-\omega\,^{\prime}, x, \omega)\,\cdot\,\cos \theta\,^{\prime} d\omega\,^{\prime} \leq 1

Max Was ist das?

Rike Die Formel steht für die Energieerhaltung im Lokalen. Sie sagt, dass in einer kleinen Umgebung \Omega_x vonx weniger Licht reflektiert als einfällt. Der Rest wird in Wärme umgewandelt.

Max Na klar! Was ist \theta\,^{\prime}?

Rike \theta\,^{\prime} ist der Winkel zwischen der Richtung \omega\,^{\prime} und der NormalenZ. f_r\,\cdot\,\cos \theta\,^{\prime} beschreibt die Projektion in Z-Richtung, also das Licht, was von der Oberfläche reflektiert wird.

Max Okay, verstehe.

Die Hitfunctionh

Rike Jetzt brauchen wir noch eine Größe

h(x, \omega\,^{\prime}),

das ist die Hitfunction. Sie beschreibt den ersten Punkt h(x, \omega\,^{\prime}),auf der OberflächeS,den ein Strahl von der Lichtquelle in Richtung \omega\,^{\prime} gehend trifft, eben hit.

II_05_geometry_arnold_08-03

Max Wozu brauche ich den?

Rike Der emmitiert Licht in Richtung x,der Punkt ist dann bei Verdeckungen der OberflächeSdie neue Position einer Lichtquelle in\omega\,^{\prime}-Richtung. Beim Becher braucht man das wirklich.

II_05_geometry_arnold_09-02
In diesem Rendering ist der Hitpunkth(x, \omega\,^\prime)zuxinnen und durch den Becher selbst verdeckt.

Max Okay. Jetzt haben wir immer noch keine Gleichung.

Rike Stimmt. Als Letztes brauchen wir noch den Begriff der Lichtintensität

L(x, \omega)

für ein kleines Flächenelement umxfür jede Richtung\omega.

Max Und wie geht das mit der Farbe? Brauche ich nicht für jeden Punktx die RGB-Werte?

Rike Ja klar, Du kannst das für jeden Kanal einzeln ausrechnen, wenn Du willst, sogar für jede Wellenlänge des Lichtes. In der finalen Gleichung kommt die Lichtintensität (pro Kanal oder Wellenlänge)

L( h(x, \omega\,^{\prime}), - \omega\,^{\prime})

vor, das ist die Lichtintensität am Hitpunkt in negativer\omega\,^{\prime}-Richtung.

Max Klar!

Die Rendergleichung für nicht transparente, nicht selbstleuchtende Objekte

Rike So, jetzt haben wirs. Die Rendergleichung für nicht selbstleuchtende, nicht transparente Objekte ist

L(x, \omega) = \int_{\Omega_x}\,L( h(x, \omega\,^{\prime}), - \omega\,^{\prime})\,\cdot\,f_r(- \omega\,^{\prime}, x, \omega)\,\cdot\,\cos \theta\,^{\prime} d\omega\,^{\prime}

Max Oooh!

Rike Das ist die grundlegende Gleichung für die Lichtintensität. Sie besagt, dass die Lichtintensität an einem Punkt x in Richtung\omegadurch das Integral der Lichtintensitäten der Hitpunkte vonxüber alle Richtungen\omega\,^{\prime},projiziert auf die Normalenrichtung der Oberfläche anx,bestimmt wird.

Max Sag mal, die Lichtintensität inxberechnet sich durch das Integral über alle Lichtintensitäten am Hitpunkt? Wie geht das?

Rike Da liegt wirklich der Hase im Pfeffer! Das Integral ist keine Berechnungsvorschrift. Es ist eine Gleichung über die physikalischen Zusammenhänge, die eine starke Abhängigkeit des Lichtes in einem Punkt von seinem Umgebungslicht beschreibt.

Max Stimmt.

Rike Die Rendergleichung ist eine Integralgleichung. Es gibt nur sehr wenige explizite Lösungen.

Max War alles umsonst?

Rike Nein, die Gleichung ist wunderbar! Sie ist seit 1986 bekannt und es gelingt immer besser, sie anzuwenden und zu lösen, auch für Dein Glas kriegen wir das hin. Die besten Renderer von 3D-Programmen lösen das sehr trickreich. Fahr doch mal zur FMX, da wird das toll erklärt. Du kannst auch wiederkommen, dann machen wir weiter. Für heute reicht's Dir wohl. Willst Du ein Glas Wein?

***

Übungsaufgaben

  1. Nenne triviale Lösungen der Rendergleichung!
  2. Ist die Funktionf_rin unserem Becher-auf-dem-Tisch-Beispiel stetig und/oder differenzierbar?

Lösungen

    1. L\equiv 0 ~ absolutes Dunkel
    2. L\equiv const = c_1, \; f_r \equiv const = c_2,\;\cos \theta\,^{\prime} =1 ~ ein flächiges Licht, senkrecht über der Ebene
  1. Nein, f_r ist nur stückweise stetig und differenzierbar.