Local Lighting

Transformation von Normalen

Mit einer Transformationsmatrix $M$:

(1)
\begin{align} n^Tp=0 \overset{M}{\rightsquigarrow } n'^Tp'=0 \\ \end{align}

es gilt $p'=Mp$ ; aber $n'=?$

(2)
\begin{align} n'^T(Mp)=0 \Leftrightarrow (n'^TM)p=0 \Leftrightarrow \underbrace{(M^Tn')^T}_{n}p=0 \\ \end{align}

und somit

(3)
\begin{align} n=M^Tn' \Leftrightarrow n'=M^{-T}n . \end{align}

Bei einer Transformation eines Objektes müssen seine Normalen also mit dem invers transponierten der Transformationsmatrix transformiert werden.

Phong-Beleuchtungsmodell

Mit Punktposition $p$, Normalen $n$, Viewerposition $v$ und Lichtquellenposition $l$:

(4)
\begin{align} C(p,n,v,l) = \underset{Ambient}{C_a} + \underset{Diffuse}{C_d(p,n,l)} + \underset{Specular}{C_{sp}(p,n,v,l)} \end{align}

Ambienter Term

Simulation globaler Beleuchtung:

(5)
\begin{align} C_a = C_A\alpha_a \end{align}
  • Farbvektor $C_A$: Farbe des Ambienten Lichtes in der Szene
  • Materialmatrix $\alpha_a$: Reflektivität des Materials

Diffuser Term

Simuliert rauhe Oberflächen:

(6)
\begin{align} C_d(p,n,l) = C_l\alpha_d\cos\varphi \end{align}

Bildchen!

  • Farbvektor $C_l$: Farbe der Lichtquelle

Durch den $\cos$-Term wird simuliert, dass eine Lichtquelle bei flacherem Winkel weniger Energie an eine Oberfläche abgibt. Das Licht wird von diesem Punkt aus uniform (isotrop) abgegeben. Bildchen: Oberfläche, Lichtstrahl gleicher breite, einmal senkrecht, einmal flacher

Spekularer Term

Simuliert glänzende Oberflächen:

(7)
\begin{align} C_{sp}(p,n,v,l) = C_l \alpha_{sp} \left( {r^T (p-v) \over ||r|| ||p-v||}\right)^s \end{align}

** Bildchen! **

  • Reflektierter Lichtstrahl $r = 2nn^T(p-l) - (p-l)$: Bildchen mit Herleitungen…
          1. $(p-l)$ auf $n$ projizieren: $nn^T(p-l)$
          2. Differenz 2 mal von $(p-l)$ abziehen: $r = (p-l) - 2*(l -nn^T(p-l)) = 2nn^T(p-l) - (p-l)$
  • ''Shininess'' $s$: Simuliert, wie sehr fokussiert das Licht reflektiert wird **Bildchen mit $\cos^i$

Phong-Blinn-Approximation

Da irgendwer meint, das sei zu langsam, wird die Berechnung der Abweichung reflektierten Lichtsrahl - Betrachterrichtung approximiert:

(8)
\begin{align} C_{sp}(p,n,v,l) = C_l \alpha_{sp} (n^Th)^s \end{align}
  • Mit Halfway-Vektor $h = {l+v \over || l+v ||}$. Beachte: $(l-p)+(v-p) = l+v$ Bildchen

Erweiterungen

Attenuation

Da die Energie, die von einer (Punkt-)Lichtquelle empfangen wird, mit dem Abstand zu ihr quadratisch fällt:

(9)
\begin{align} att(p,l) = {1 \over att_{lin}||p-l||+att_{quad}||p-l||^2} \end{align}

Der lineare Term wurde dazu"erfunden", weil eine allein quadratische Attenuation nicht gut aussah.

Spotlight

Simulation eines Spotlights, mit Position $l$, Richtung $d_l$ (normalisiert) und "Fokussierung" $f$ (ähnlich wie beim spekularen Term):

(10)
\begin{align} spot(p,l) = \left( {d^T_l(p-l) \over || p-l ||} \right)^f \end{align}

Depth Cueing

Simulation eines athmosphärischen Effekts für große "Outdoor"-Szenen. Je weiter eine Oberfläche vom Betrachter entfernt ist, desto grau-blauer sieht sie aus, sie verschmilzt mit der Athmosphärenfarbe $C_{dc}$. $b$ ist hier ein von der Entfernung etwas unintuitiv abhängiger Faktor:

(11)
\begin{equation} C_{final} = b C_{phong} + (1-b) C_{dc} \end{equation}

Alles zusammen (such sich hierfür ma wer ne bessere Überschrift)

(12)
\begin{eqnarray} C_{phong} = C_a + \sum_{l \in L} \left[ spot(p,l) att(p,l) (C_d(p,n,l)+C_{sp}(p,n,v,l)) \right] \end{eqnarray}

Zusätzliche Annahmen (Vereinfachen einige Terme)

  • Unendlich entfernte Lichtquelle: $l = (x,y,z,0)$
  • Unendllich entfernfer Betrachter: $v = (0,0,\infty) \Rightarrow {p-v \over ||p-v||}=(0,0,-1)$
previous next
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.