# Rendergleichung

Die Rendergleichung, auch Rendering-Gleichung genannt, wird in der 3D-Computergrafik verwendet. Sie wurde 1986 von Jim Kajiya und zur gleichen Zeit von David Immel et al. veröffentlicht. Es handelt sich um eine Integralgleichung, die die Energieerhaltung bei der Ausbreitung von Lichtstrahlen beschreibt und somit die mathematische Basis für alle Algorithmen zur globalen Beleuchtung bildet.

## Geschichte und Einordnung

Im Prinzip war alles, was zur Berechnung dreidimensionaler Bilder nötig war, schon lange vor der Rendergleichung vorhanden: Die Maxwellschen Gleichungen (1861–1864), die spezielle Relativitätstheorie (1905) und die Quantenmechanik (1920er) erklären die Interaktion von Licht und Materie so genau, dass mit ihnen theoretisch die Berechnung beliebig realistischer Bilder möglich wäre.
Für die 3D-Computergrafik erwies sich jedoch bereits sehr früh, dass es völlig unpraktikabel ist, mit diesen grundlegenden Modellen zu arbeiten; sie erfordern in den meisten Fällen einen selbst mit heutigen Computern nicht zu bewältigenden Rechenaufwand. Es zeigte sich jedoch auch, dass es nicht nötig war, mit derart exakten Modellen zu arbeiten: Die Quantenmechanik erklärt Effekte im Kleinen, die im menschlichen Alltag nicht wahrnehmbar sind (vgl. etwa Doppelspaltexperiment), die Relativitätstheorie erklärt Sachverhalte im Großen, die hauptsächlich bei astronomischen Größenordnungen ihre Wirkung entfalten (vgl. etwa Raumzeit) und selbst einige Auswirkungen der Maxwellschen Gleichungen (vgl. etwa Interferenz) sind für die Praxis der Computergrafik oft bedeutungslos.
Die Forscher arbeiteten daher mit der geometrischen Optik, die noch auf das antike Griechenland zurückgeht und das Verhalten des Lichts im Großen – also unter Vernachlässigung seiner Welleneigenschaften – beschreibt. So entstanden Ansätze und Techniken, die statt komplexen Wellen einfache Lichtstrahlen durch die Szene verfolgen und in bewältigbarem Zeitaufwand zu passablen Ergebnissen führten, nämlich Raytracing und Radiosity.
In diese Entwicklung hinein veröffentlichte Jim Kajiya 1986 die Rendergleichung. Kajiya zeigte, dass alle bis dato verbreiteten Rendertechniken direkt aus der Rendergleichung hergeleitet werden können. Damit gab es erstmals einen gemeinsamen mathematischen Unterbau, auf dem die Techniken verglichen werden konnten.
Die Rendergleichung führte in der Folge nicht nur zu einer Systematisierung des Wissensgebietes, sondern inspirierte auch zahlreiche Weiterentwicklungen. Sie gilt heute als dermaßen fundamental, dass viele fälschlicherweise annehmen, Raytracing sei aus der Rendergleichung entstanden oder die vorher entstandene Radiosity-Gleichung sei als Umformung aus ihr hervorgegangen.

## Formel
### Ursprüngliche Formel

Die Rendergleichung lautet:
    $L(x,x')=g(x,x')\cdot \left(L_{e}(x,x')+\int _{S}b(x,x',x'')L(x',x'')\mathrm {d} x''\right)$
Sie beschreibt, wie viel Licht einen Oberflächenpunkt $x$ von einem anderen Oberflächenpunkt $x'$ aus erreicht. Dabei wird ein dritter Oberflächenpunkt $x''$ berücksichtigt, dessen Licht zunächst auf $x'$ trifft und von dort aus nach $x$ reflektiert wird. Die einzelnen Teile haben die folgende Bedeutung:
* Der Energiefluss $L(x,x')$ gibt an, wie viel Licht $x$ von $x'$ aus erreicht. Es handelt sich um eine Strahldichte mit der Einheit W·m$^{−2}$·sr$^{−1}$. Analoges gilt für den Term $L(x',x'')$.
* Der geometrische Term $g(x,x')$ beschreibt die gegenseitige Lage der Punkte in der Szene. Normalerweise hat der Term den Wert ${1}/{r^{2}}$, wobei $r$ die Entfernung von $x$ und $x'$ ist. Er gibt dann an, wie viel des von $x'$ ausgehenden Lichtes $x$ tatsächlich exakt trifft. Dies gilt auch, falls eine dazwischen liegende Oberfläche völlig durchsichtig ist; in diesem Fall nimmt die Oberfläche das Licht auf der einen Seite auf und strahlt es auf der anderen Seite neu aus. Liegt jedoch zwischen $x$ und $x'$ eine undurchsichtige Oberfläche, so ist der Term 0, das heißt bei $x$ kommt kein Licht von $x'$ auf direktem Weg an.
* Der Emissionsterm $L_{e}(x,x')$ gibt an, wie viel Licht von $x'$ aus nach $x$ abgestrahlt wird (falls $x'$ eine Lichtquelle der Szene darstellt). Dies ist wiederum eine Strahldichte mit der Einheit W·m$^{−2}$·sr$^{−1}$.
* Der Streuungsterm $b(x,x',x'')$ gibt an, welcher Anteil des Lichts, das $x'$ von $x''$ aus erreicht, in Richtung $x$ reflektiert wird. Es handelt sich hierbei um eine bidirektionale Reflexionsverteilungsfunktion (BRDF).
* $S$ ist die Gesamtheit aller Flächen in der Szene.
Kajiya stellte die Rendergleichung in leicht abgewandelter Form vor, diese Darstellung hat sich inzwischen jedoch als zweckmäßiger erwiesen. In der ursprünglichen Form war der Emissionsterm keine Strahldichte und der Streuungsterm war ein dimensionsloses Konstrukt statt einer BRDF.

### Äquivalente Darstellung

Äquivalente Darstellungsformen der Rendergleichung werden gewählt, um andere Anwendungsfälle anschaulicher zu beschreiben. Verbreitet ist die folgende Darstellung, die beschreibt, wie viel Licht vom Oberflächenpunkt $x$ aus in Richtung des Vektors ${\vec {\omega }}$ abgestrahlt wird:
    $L(x,{\vec {\omega }})=L_{e}(x,{\vec {\omega }})+\int _{\Omega }{f_{r}(x,{\vec {\omega }}',{\vec {\omega }})L(x,{\vec {\omega }}')({\vec {\omega }}'\cdot {\vec {n}})\mathrm {d} {\vec {\omega }}'}$
Die einzelnen Teile haben im Wesentlichen dieselbe Bedeutung wie in der anderen Darstellung, sind jedoch in Abhängigkeit von der Richtung statt eines zweiten oder dritten Punktes gegeben:
* Der Energiefluss $L(x,{\vec {\omega }})$ gibt an, wie viel Licht von $x$ aus in Richtung ${\vec {\omega }}$ abgestrahlt wird; es handelt sich auch hier um die Strahldichte.
* Der Emissionsterm $L_{e}(x,{\vec {\omega }})$ gibt an, wie viel Licht von $x$ aus in Richtung ${\vec {\omega }}$ ausgestrahlt wird (falls der Punkt selbst eine Lichtquelle darstellt).
* Der Streuungsterm $f_{r}(x,{\vec {\omega }}',{\vec {\omega }})$ ist eine BRDF mit Einfallswinkel ${\vec {\omega }}'$ und Reflexionswinkel ${\vec {\omega }}$.
* Der Term $L(x,{\vec {\omega }}')$ beschreibt, wie viel Licht aus Richtung ${\vec {\omega }}'$ den Punkt $x$ erreicht.
* ${\vec {n}}$ ist die Normale der Oberfläche im Punkt $x$.
* $\Omega$ ist die Gesamtheit aller Winkel der Hemisphäre über der Oberfläche.
Die Werte innerhalb des Integrals lassen sich z. B. durch Raytracing, also durch das Aussenden eines Lichtstrahls in Richtung ${\vec {\omega }}'$, berechnen. Die Annäherung des Integrals durch eine Monte-Carlo-Simulation und das rekursive Aussenden von Lichtstrahlen führt zum Path Tracing, das Kajiya zusammen mit der Rendergleichung beschrieb.