Screen Space Directional Occlusion
Verfasst: 13.11.2012, 15:09
Servus,
ich arbeite mich momentan durch das Paper zu Screen Space Directional Occlusion (http://www.mpi-inf.mpg.de/~ritschel/Papers/SSDO.pdf) und habe leider ein paar Verständnisprobleme bezogen auf die Implementierung. Fangen wir also mal an: Es handelt sich hierbei um zwei Dinge, einmal um den eigentlichen Occlusion-Faktor und zum anderen der indirekten Beleuchtung. Gegeben sei folgende Formel zur direkten Beleuchtung:
\(\[
L_{dir}(P) = \sum_{i=1}^N \frac{p}{\pi} L_{in}(\omega_i) V(\omega_i) cos(\theta_i) \delta\omega
\]\)
Das geschulte Auge erkennt, dass dies eine erweiterte Gleichung der SSAO Formel ist:
\(\[
A(P) = \sum_{i=1}^N V(\omega_i) cos(\theta_i) \delta\omega
\]\)
Die Erweiterung liegt also darin den BRDF Term mit einer Beleuchtungsfunktion für den Samplevektor \($\omega_i$\) und dem Occlusion Term zu multiplizieren. In dem Paper ist nun die Rede von einem Environment-Map Loopup oder der Auswertung der Beleuchtungsgleichung für Punktlichtquellen. Diesen Punkt verstehe ich noch nicht ganz, muss ich nun hier wirklich für jede Lichtquelle den Sample Punkt \($P + \omega_i$\) auswerten? Wie werden dann Schatten von den Lichtquellen behandelt, oder ist es egal, da es sich eh nur um eine Approximation handelt? Mal davon abgesehen, dass wir dabei dann noch eine Summe bekommen würden und die Berechnung von SSDO nicht mehr konstant wäre sondern abhängig von der Anzahl dynamischer Lichter.
Weiter gehts mit der indirekten Beleuchtung:
\(\[
L_{ind}(P) = \sum_{i=1}^N \frac{p}{\pi} L_{pixel}(1 - V(\omega_i)) \frac{A_s cos(\theta_{s_i}) cos(\theta_{r_i})}{d_i^2} \delta\omega
\]\)
Gemäß der Notation des Papers wird nun also auf Pixel (Beleuchtete Szene nehme ich mal an) als Lichtquelleninformation zugegriffen und für alle nicht verdeckten Sample reflektiert. Ferner steht in dem Paper, dass beide Gleichungen durch zwei Passes realisiert werden, was für mich nicht ganz einleuchtend ist, denn sie sind eigentlich nicht voneinander abhängig. In einem anderen Paper (http://www.cescg.org/CESCG-2011/papers/ ... Istvan.pdf) wird in der zweiten Gleichung statt \($L_{pixel}$\) die Funktion \($L_{dir}$\) verwendet, wo es natürlich wiederrum Sinn machen würde.
Wäre cool wenn mir da mal einer ein bisschen den Ausweg aus dem Irrgarten zeigen könnte.
Mit freundlichem Gruß
RazorX
ich arbeite mich momentan durch das Paper zu Screen Space Directional Occlusion (http://www.mpi-inf.mpg.de/~ritschel/Papers/SSDO.pdf) und habe leider ein paar Verständnisprobleme bezogen auf die Implementierung. Fangen wir also mal an: Es handelt sich hierbei um zwei Dinge, einmal um den eigentlichen Occlusion-Faktor und zum anderen der indirekten Beleuchtung. Gegeben sei folgende Formel zur direkten Beleuchtung:
\(\[
L_{dir}(P) = \sum_{i=1}^N \frac{p}{\pi} L_{in}(\omega_i) V(\omega_i) cos(\theta_i) \delta\omega
\]\)
Das geschulte Auge erkennt, dass dies eine erweiterte Gleichung der SSAO Formel ist:
\(\[
A(P) = \sum_{i=1}^N V(\omega_i) cos(\theta_i) \delta\omega
\]\)
Die Erweiterung liegt also darin den BRDF Term mit einer Beleuchtungsfunktion für den Samplevektor \($\omega_i$\) und dem Occlusion Term zu multiplizieren. In dem Paper ist nun die Rede von einem Environment-Map Loopup oder der Auswertung der Beleuchtungsgleichung für Punktlichtquellen. Diesen Punkt verstehe ich noch nicht ganz, muss ich nun hier wirklich für jede Lichtquelle den Sample Punkt \($P + \omega_i$\) auswerten? Wie werden dann Schatten von den Lichtquellen behandelt, oder ist es egal, da es sich eh nur um eine Approximation handelt? Mal davon abgesehen, dass wir dabei dann noch eine Summe bekommen würden und die Berechnung von SSDO nicht mehr konstant wäre sondern abhängig von der Anzahl dynamischer Lichter.
Weiter gehts mit der indirekten Beleuchtung:
\(\[
L_{ind}(P) = \sum_{i=1}^N \frac{p}{\pi} L_{pixel}(1 - V(\omega_i)) \frac{A_s cos(\theta_{s_i}) cos(\theta_{r_i})}{d_i^2} \delta\omega
\]\)
Gemäß der Notation des Papers wird nun also auf Pixel (Beleuchtete Szene nehme ich mal an) als Lichtquelleninformation zugegriffen und für alle nicht verdeckten Sample reflektiert. Ferner steht in dem Paper, dass beide Gleichungen durch zwei Passes realisiert werden, was für mich nicht ganz einleuchtend ist, denn sie sind eigentlich nicht voneinander abhängig. In einem anderen Paper (http://www.cescg.org/CESCG-2011/papers/ ... Istvan.pdf) wird in der zweiten Gleichung statt \($L_{pixel}$\) die Funktion \($L_{dir}$\) verwendet, wo es natürlich wiederrum Sinn machen würde.
Wäre cool wenn mir da mal einer ein bisschen den Ausweg aus dem Irrgarten zeigen könnte.
Mit freundlichem Gruß
RazorX