Realistisches Subsurface Scattering

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
starvald
Beiträge: 31
Registriert: 16.04.2010, 17:20
Wohnort: Heppenheim

Realistisches Subsurface Scattering

Beitrag von starvald »

Hallo liebes ZFX Forum!

Ich bin auf der Suche nach einem Algorithmus für realistische Transluzenz. Der Algorithmus muss nicht zwangsläufig in Echtzeit laufen, aber eine Vorberechnung sollte auch nicht mehr als 1-5 Sekunden in Anspruch nehmen.

Ich bin vertraut mit den Translucent Shadow Maps (TSM) und der diffus dipolen Approximation von Jensen et al. Mein Hauptproblem ist, dass meine Approximation genau sein muss, die TSM aber nur für konvexe Geometrie funktionieren. Wenn man die TSM mit Depth Peeling kombiniert (was ich versucht habe), dann ist das Einsammeln der eingehenden Strahlung aber alles andere als trivial - außerdem gilt an diesem Punkt die dipole Approximation nicht mehr.

Mein nächster Ansatz waren die vorberechneten Vertex-Discs von Bunnel in GPU Gems II + III, die eine Berechnung des Formfaktors erlauben. Leider berücksichtigen die Autoren Sichtbarkeit überhaupt gar nicht - ich vermute, dass ihre guten Ergebnisse durch genau auf eine Szene angepasste Parameter entstanden sind. Damit wäre dieser Ansatz für mich nicht zu gebrauchen.

Ich dachte außerdem an zufällig, aber gleichmässig verteilte Punkte in der Bounding Box um das Objekt. Hierbei dürften nur Punkte innerhalb des Objekts Energie auf ihre Nachbarn übertragen. Das wäre ein Shooting-Approach wie ihn auch Radiosity oder Photon Mapping verwenden. Aber hier hat es gleich dutzende Nachteile: Punkte haben weder Fläche noch Normale, wie sollte ich hier einen Formfaktor berechnen? Außerdem müssen hierbei soviele Datenstrukturen zur Beschleunigung aufgebaut werden, dass ich wahrsch. noch Weihnachten daran sitzen würde.

Ich bin mit meinem Latein wirklich am Ende. Ich wäre für wirklich *jede* Idee dankbar!

Beste Grüße aus Heppenheim,

Nicolas

PS: Achja, hier mal eines meiner Werke :-D http://www.youtube.com/watch?v=DsMGQ7kjx1s
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Realistisches Subsurface Scattering

Beitrag von eXile »

Das wichtigste zur Bestimmung eines geeigneten Algorithmus' fehlt leider in deinem Beitrag: Was darf als konstant vorausgesetzt werden, was ist variabel? Beispielsweise würde mich bei konstanter Geometrie und variabler Beleuchtung direkt die SH-Approximation von Subsurface Scattering einfallen, die auch noch im Direct3D-SDK zu finden sein sollte. Leider weiß ich nicht, wie viel Zeit das zum Vorberechnen in Anspruch nimmt.
starvald
Beiträge: 31
Registriert: 16.04.2010, 17:20
Wohnort: Heppenheim

Re: Realistisches Subsurface Scattering

Beitrag von starvald »

Hi und Danke für Deine Antwort!

Die Geometrie ist konstant. Die Beleuchtung ist variabel, aber lediglich eine Punktlichtquelle (also keine Env-Map). Durch die konstante Geometrie sollte ein Brute-Force Algorithmus egtl. recht schnell zu finden sein - dachte ich. Bin beim Lesen in der letzten Stunde noch auf ein Paper von Jensen gestossen, dass mit Photonen und nem Octree funktioniert.

Hatte halt auf was einfaches bruteforcemässiges gehofft :-/
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Realistisches Subsurface Scattering

Beitrag von eXile »

Das hattest du aber schon in Betracht gezogen? OK, das ist Mist, du wolltest ja was "realistisches".

Ich habe gerade noch einmal über die Formfaktoren in Radiosity nachgedacht (siehe auch mal hier ein anderer Post von mir, ganz allgemein zu Radiosity). Dass man keine Fläche hat, ist egal, dazu gibt es bereits entsprechende Grenzwertberechnungen für infinitesimal-kleine Flächeninhalte. Dass man keine Normale hat, kann man insofern vernachlässigen, als dass für den Energietransport das überhaupt keine Rolle spielt -- man brauchte das ja in Radiosity, um aus der Beleuchtungsstärke aus einer bestimmten Richtung das in eine Energie umzuwandeln, und da galt nun einmal Lambert's Law. Also einfach die Kosinus-Terme rausschmeißen. Viel problematischer bei diesem Ansatz ist die vermutlich irrsinnig große Laufzeit -- man rechnet jetzt nicht mehr in einer Welt von 2D-Patches, sondern in 3D-Patches. Darum würde ich das als nicht realisierbar (zumindest mit klassischen Radiosity-Methoden) erachten.
starvald
Beiträge: 31
Registriert: 16.04.2010, 17:20
Wohnort: Heppenheim

Re: Realistisches Subsurface Scattering

Beitrag von starvald »

Dein Link ist ebenfalls nicht plausibel für nicht-konvexe Geometrie. Stell Dir mal Figur 16.4 in Deinem Link (Bild unten) stark gezoomt vor, so dass die Wellen in den Haaren den Bildschirm ausfüllen würden. Das müsste dann immer noch plausibel sein, und nicht so ein entfernter Augpunkt wie in dem Beispiel:

Bild

Ich werde mal konkreter. Es handelt sich bei der Geometrie ausschließlich um Zähne. Ich habe Deinen Link als allererstes implementiert, allerdings mit Depth Peeling, um die Höcker bei dem Backenzahn zu berücksichtigen (zwischen zwei Höckern ist ja "luft", jedenfalls nichts, was Licht absorbiert). Das Ergebnis siehst du im Anhang: Der Übergang von "viel-Material-durchwandert" nach "wenig-Material-durchwandert" ist abrupt - da kann man soviel blurren wie man möchte, der Rendere-von-vorne-Rendere-von-hinten Ansatz taugt einfach nichts für diese Art von Geometrie.

PS: Habe Dein Update während des Schreibens nicht mitbekommen ;)

PPS: Mit dem Blurren bin ich mir allerdings auch nicht wieder SO sicher. Vielleicht könnte man doch was anständiges hinbekommen, wenn man eine Gauss-Pyramide erzeugt und dann von grob nach fein sampled?
Dateianhänge
Depth Peeling Molar
Depth Peeling Molar
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Realistisches Subsurface Scattering

Beitrag von eXile »

Ich dumpe jetzt hier mal einfach ein paar Referenzen rein:

1. Image-space subsurface scattering for interactive rendering of deformable translucent objects. Grandios, ausschlafen und abstract lesen bringt doch was: Wieder dipole diffusion model.

2. Habe ich gerade meinen ShaderX7 mal aufgeschlagen, denn "irgendwo" hatte ich da doch mal was gesehen. Tatsächlich: "Real-Time Subsurface Scattering using Shadow Maps" von Hyunwoo Ki. Das gibt es als solches natürlich nicht im Internet. Benutzt auch Jensens Formel.

Mir scheint, du bist mit deinen Vorgaben (nicht unendlich weit entfernte Lichter, realitischer als Jensen und dennoch in Echtzeit) an die Grenzen der aktuellen Forschung gelangt, auch wenn ich selber keinen guten Überblick über den aktuellen Stand habe. Dann eben lustiges rumraten: Könnte man was mit distance-fields reißen? Also wirklich in das Modell reintracen und dann dort drin scattering machen?
starvald
Beiträge: 31
Registriert: 16.04.2010, 17:20
Wohnort: Heppenheim

Re: Realistisches Subsurface Scattering

Beitrag von starvald »

Mir ist evtl. eine neue Möglichkeit eingefallen. Ich bin mir ziemlich sicher, dass dieser ganze Screen-Space Kram nichts für mich ist. Wenn das ganze gute Ergebnisse liefert, würde es außerdem in eine kommerzielle Software eingebaut werden, mit Millionen Zeilen Umfang und eben nicht unendlich Rendering-Ressourcen. Vorberechnung ist deshalb so wichtig, zur Not könnten die Berechnungen auch in einem Idle-Prozess laufen.

Hört sich erstmal viel an, aber die vorhandene Software hat für jeden Vorberechnungsschritt hilfreiche Datenstrukturen und Algorithmen, auf die ich nur noch zugreifen müsste.
Edit: Ich musste die an dieser Stelle detailliert geäußerte Beschreibung des Algorithmus auf Anraten meines Arbeitsgebers löschen. Über Ergebnisse werde ich Euch weiterhin informieren.
Zuletzt geändert von starvald am 25.02.2011, 10:29, insgesamt 1-mal geändert.
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Realistisches Subsurface Scattering

Beitrag von eXile »

starvald hat geschrieben:Ich erzeuge eine Menge aus N Vertizen auf der Oberfläche der Triangulation. Die Menge soll stochastisch, aber gleichmässig verteilt sein. Das erreiche ich, indem ich mit einem Zufallsvertex beginne, und dann in jedem folgenden Schritt viele zufällige Vertizen auswähle. Derjenige Vertex, der den maximalen minimalen Abstand zur bereits existierenden Menge hat, wird zur Menge hinzugefügt. Als Metrik benutze ich die geodäsische (?) Distanz auf der Triangulation, also der A* Algorithmus.
Die geodätische Distanz auf dem Modell wird durch den A*-Algorithmus nur approximiert: Denn die Geodäte ist ja schließlich die kürzeste Distanz auf einer Mannigfaltigkeit, und die wird dann nur durch den Vertex-Graphen approximiert. Oder platt gesagt: Du bewegst dich nur auf den Kanten des Modells, die Geodäte kann aber auch mitten über die Faces laufen. Im Endeffekt musst du dann auf eine entsprechend hohe Vertexdichte hoffen (oder selbst herbeiführen) -- oder so etwas basteln. Aber wahrscheinlich hat deine mysteriöse CAD-Software das so wie so in petto.

Ansonsten hört sich der Vorschlag gut durchdacht an. ;)
starvald
Beiträge: 31
Registriert: 16.04.2010, 17:20
Wohnort: Heppenheim

Re: Realistisches Subsurface Scattering

Beitrag von starvald »

Hi,

Ich bin da seit 6 Monaten Software-Entwickler. Musste mein geliebtes Grafikhobby leider komplett auf die Freizeit verschieben und habe nun ggf. die Gelegenheit, mal etwas davon einzubringen! Ist halt immer etwas anderes als privat an nem Proggy zu schrauben.

Tausend Dank für den Hinweis mit der Distanz - das war mir so im Detail nicht bekannt! Da unsere Geometrien aber immer recht fein tesseliert sind, sollte der A* eine sehr gute Approximation sein.

Ich lasse von mir hören! Vielen Dank Dir, Unbekannter :D
Antworten