SSS Frust
Verfasst: 03.06.2012, 21:40
Hallo liebes Forum,
Frust. Stichwort Translucent Shadow Maps und Subsurface Scattering. Ich will mich einfach nur mal auskotzen ;-)
Ich versuche seit einiger Zeit, Echtzeit-Subsurface Scattering auf non-konvexe Objekte zu übertragen. Hintergrund ist der, dass die diffus dipole Approximation von Jensen nicht mehr greift, wenn zwischen der gedachten Verbindung von Oberflächenpunkt in der Shadow Map und dem Sichtbaren Punkt vom Betrachter aus nicht nur das Material durchlaufen wird (also z.B. eine hohle Kugel).
Meine Idee war deshalb, die Sichtbarkeit von jedem Punkt zu jedem anderen vorzuberechnen, aber natürlich nur von jedem Vertex aus. Genauer gesagt von jedem Vertex zu einem Oberflächenpatch (konkret: 10.000 Vertizen, aber nur max. 2000 Patches). Das lässt sich dank Cuda in 0.25s berechnen und stellt den "Flux" innerhalb des Objektes dar. Das sieht dann so aus (je dunkler der Oberflächenpunkt, desto weniger andere Oberflächenpunkte können durch eine direkte Verbindung erreicht werden).

Der jetzige Brute-Force Algorithmus berechnen nun SSS pro Vertex, indem die diffus dipole Approximation (~~ Energiefluss) zu jedem Patch berechnet wird, aber NUR WENN dieser sichtbar ist. Das Ergebnis ist SCHEISSE!! (das Licht kommt von rechts hinten)

Zum Vergleich der naive Ansatz:

Beim naiven Ansatz ohne Sichtbarkeit gibt es viel weniger Artefakte und das ganze Bild wirkt smoother. Dabei hat der Ansatz mit der Sichtbarkeit durchaus seine Existenzberechtigung, wie man am linken unteren Fuß dess Buddha sehen kann: Der naive Ansatz ist hier fälschlicherweise zu hell)
Also: Viel Arbeit, bislang wenig Erfolg :-( Ich habe derzeit keine Idee, wie ich die Smoothness-Problem in den Griff bekommen kann. Ich habe aber eine Ahnung, woran es liegen könnte: Die Subsurface-Scattering-Funktion ist offenbar sehr stetig und "weich", während meine Sichtbarkeit binär ist. Ich kombiniere also eine stetige Funktion mit einer unstetigen - dann ist das Ergebnis (Multiplikation) natürlich auch unstetig. blabla.
Danke fürs Zuhören! Über Ideen würde ich mich freuen :)
Starvald
Frust. Stichwort Translucent Shadow Maps und Subsurface Scattering. Ich will mich einfach nur mal auskotzen ;-)
Ich versuche seit einiger Zeit, Echtzeit-Subsurface Scattering auf non-konvexe Objekte zu übertragen. Hintergrund ist der, dass die diffus dipole Approximation von Jensen nicht mehr greift, wenn zwischen der gedachten Verbindung von Oberflächenpunkt in der Shadow Map und dem Sichtbaren Punkt vom Betrachter aus nicht nur das Material durchlaufen wird (also z.B. eine hohle Kugel).
Meine Idee war deshalb, die Sichtbarkeit von jedem Punkt zu jedem anderen vorzuberechnen, aber natürlich nur von jedem Vertex aus. Genauer gesagt von jedem Vertex zu einem Oberflächenpatch (konkret: 10.000 Vertizen, aber nur max. 2000 Patches). Das lässt sich dank Cuda in 0.25s berechnen und stellt den "Flux" innerhalb des Objektes dar. Das sieht dann so aus (je dunkler der Oberflächenpunkt, desto weniger andere Oberflächenpunkte können durch eine direkte Verbindung erreicht werden).
Der jetzige Brute-Force Algorithmus berechnen nun SSS pro Vertex, indem die diffus dipole Approximation (~~ Energiefluss) zu jedem Patch berechnet wird, aber NUR WENN dieser sichtbar ist. Das Ergebnis ist SCHEISSE!! (das Licht kommt von rechts hinten)
Zum Vergleich der naive Ansatz:
Beim naiven Ansatz ohne Sichtbarkeit gibt es viel weniger Artefakte und das ganze Bild wirkt smoother. Dabei hat der Ansatz mit der Sichtbarkeit durchaus seine Existenzberechtigung, wie man am linken unteren Fuß dess Buddha sehen kann: Der naive Ansatz ist hier fälschlicherweise zu hell)
Also: Viel Arbeit, bislang wenig Erfolg :-( Ich habe derzeit keine Idee, wie ich die Smoothness-Problem in den Griff bekommen kann. Ich habe aber eine Ahnung, woran es liegen könnte: Die Subsurface-Scattering-Funktion ist offenbar sehr stetig und "weich", während meine Sichtbarkeit binär ist. Ich kombiniere also eine stetige Funktion mit einer unstetigen - dann ist das Ergebnis (Multiplikation) natürlich auch unstetig. blabla.
Danke fürs Zuhören! Über Ideen würde ich mich freuen :)
Starvald