PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Rendering] Skylight/Sunlight Techniken?


Nasenbaer
2011-02-04, 23:30:33
Kennt hier jemand vielleicht Paper/Tutorials für Realtime-fähige Ansätze für das Rendering von Himmel und Sonne - bspw. wie bei Crysis?

In ner Crytek-Präsi ham sie sich mal dazu geäußert allerdings nur sehr vage und haben dabei auch den Nishita-Ansatz verfolgt (der laut eigenen Aussagen gar nicht für die Himmelsdarstellung von der Erde aus gedacht ist).
Von Preetham/Hoffman gabs auf der GDC02 mal nen Talk aber da wird auch einiges außen vor gelassen für die Implementierung.

Suche vorallem nach nem Ansatz der keine LookUp-Tables nutzt aber dafür auch nicht soo realistisch sein muss.

Krishty
2011-02-05, 14:32:32
Suche vorallem nach nem Ansatz der keine LookUp-Tables nutzt aber dafür auch nicht soo realistisch sein muss.Wenn ich mich recht erinnere, benutzt dieses (http://developer.amd.com/media/gpu_assets/ATI-LightScattering.pdf) Paper keine LUTs. Die Ergebnisse sehen dafür aber auch wirklich bescheiden aus … Entschuldige, das ist ja genau der Ansatz, auf den du dich bezogen hast. Was wird da außen vor gelassen? So, wie ich das sehe, fehlt dort nur die Berechnung der optischen Dichte, und dafür finden sich in diversen anderen Veröffentlichungen gute Formeln (ich glaube sogar, dass die CIE da irgendwann mal was standardisiert hat).

Gibt es bestimmte Gründe, keine LUT zu benutzen? So ziemlich alle Echtzeitansätze heute benutzen eine 3D-Textur (oder auch 2D oder 1D, falls sie z.B. auf Bodennähe beschränkt sind) und produzieren damit wirklich ansehnliche Ergebnisse. Ohne LUT kannst du nur Streuung erster Ordnung annähern, und die sieht nur am hellichten Tage gut aus. Sobald es dämmert, ist die furchtbar.

Alles, was man zu dem Thema mal gelesen haben muss, dürfte auf www.vterrain.org/Atmosphere/ verlinkt sein.

Gruß, Ky

Nasenbaer
2011-02-05, 16:14:14
Jo ging mir genau um die Berechnung der optischen Dichte. Da das nur Beiwerk für meine Dipl-Arbeit ist, die sich eigentlich auf Terrain-Global-Illumination bezieht, habe ich mich bisher nicht sehr ausführlich damit beschäftigen können.

Das ist auch der Grund warum ich gerne auf LUTs verzichten würde - lässt sich schneller implementieren, was für ein Nebenproblem der Arbeit ja ganz praktisch wäre. Die VTerrain-Linkliste kenne ich, aber wie du ja sagst, werden halt meistens LUTs benutzt, und darum hoffte ich, dass er vielleicht auch noch den ein oder anderen Ansatz gibt, der dort nicht aufgeführt wird.

Im Prinzip brauche ich halt eine Funktion, die mit bei Angabe eine Richtung (z.B. in sphärischen Koordinaten), die einfallende Irradiance zurückliefert. Werde das dann wohl erstmal per Image Based Lighting (also Light Probes) machen - Laut meinem Konzept soll beide möglich sein - das wird dann wohl schneller gehen.

AlSvartr
2011-02-05, 16:28:17
Jo ging mir genau um die Berechnung der optischen Dichte. Da das nur Beiwerk für meine Dipl-Arbeit ist, die sich eigentlich auf Terrain-Global-Illumination bezieht, habe ich mich bisher nicht sehr ausführlich damit beschäftigen können.

Darf man die mal lesen, wenn sie fertig ist? Würde mich interessieren... :)

Krishty
2011-02-05, 17:50:38
Jo ging mir genau um die Berechnung der optischen Dichte. Da das nur Beiwerk für meine Dipl-Arbeit ist, die sich eigentlich auf Terrain-Global-Illumination bezieht, habe ich mich bisher nicht sehr ausführlich damit beschäftigen können.Okay. In Real Time Rendering of Atmospheric Scattering Effects for Flight Simulators (http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=2554) wird in Formel 5.7 & 5.8 (Seiten 70 & 71) eine Annäherung für die optische Dichte vorgeschlagen. Die gilt aber nur bis zum Universum und bezieht Verdeckung durch Berge u.ä., die du sicher haben willst, nicht ein. Du hättest drei Möglichkeiten: In einer Shader-Schleife iterativ annähern
Im Shader den Schnittpunkt mit der Außenhülle der Erdatmosphäre berechnen, in ein Verhältnis zur Entfernung des Berges setzen und den Formelwert damit multiplizieren
Eine 2D-LUT benutzen, die dir die Dichte zwischen zwei beliebigen Punkten ausspuckt (allerdings erfordert es dort einige Tricks, Artefakte zu vermeiden)Hat alles seine Pros und Kontras. Wenn du die optische Dichte erstmal hast, brauchst du für Streuung erster Ordnung nur die optische Dichte, die Richtung der Sonne und je die Wellenlänge von rotem, grünem und blauem Licht in die Streuformeln einsetzen. Ausrechnen und du hast die Leuchtdichte dieses Blickpfads (oder Vertex’ oder Pixels, je nachdem, ob du das auf per-Vertex- oder per-Pixel-Ebene machst) und den Faktor, um den er alles dahinterliegende abschwächt. Das sind dann Werte im Linear Space, aber mit denen wirst du bei GI ja sowieso arbeiten.

Wenn du es auf andere, besser vertraute Art und Weise lösen kannst, dann tu das. Wenn man Atmospheric Scattering ohne rundum ausgefeiltes Modell implementiert sind die Ergebnisse nämlich bei weitem nicht so hübsch wie die Paper versprechen; meine ersten Himmel waren schon nachmittags alle grün …

Nasenbaer
2011-02-05, 19:56:41
@AlSvartr

Na klar dafür sind die ja da. ^^ Musst dich aber noch gedulden, 1.7. ist erst Abgabetermin und damit wird sie ca. erst ab 1.8. veröffentlicht werden.

@Krishty

Hehe, die Arbeit habe ich auch gelesen und bin fast dran verzweifelt. Die Bezeichnung der Dichtewerte wechselt in der Arbeit mehrfach und der Code am Ende offenbart, dass dann das Konzept ein wenig "angepasst" wurde, damit das Ergebnis stimmig ist. :/
Klar ist antürlich alles nur ne Approximation aber bin absolut kein Fan von Magic-Numbers, wenn diese einfach so vom Himmel schneien.

Aber der letzte Absatz drückt's dann wohl recht gut aus. ^^ Werd dann doch erstmal Abstand von davon nehmen und dann zu 100% auf LUTs (also ne HDR Environment-Map *g*) setzen.

AlSvartr
2011-02-06, 04:29:29
@AlSvartr

Na klar dafür sind die ja da. ^^ Musst dich aber noch gedulden, 1.7. ist erst Abgabetermin und damit wird sie ca. erst ab 1.8. veröffentlicht werden.

Kein Problem ..im Moment bin ich eh erstmal noch mit meiner eigenen Masterarbeit beschäftigt (ein Postprocessing-Framework für interaktive Anwendungen) ;) ..aber klingt halt nach nem interessanten Thema, und schaden kanns ja nicht, mal zu sehen, was andere Forenmitglieder so machen :D

Ich merk mir das dann mal irgendwie vor, dass ich dich dann nochmal frage.