Realistische Beleuchtungssimulation mittels Photon-Maps
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Realistische Beleuchtungssimulation mittels Photon-Maps (Realistic Illumination Simulation using Photon-Maps) Systementwicklungsprojekt am Lehrstuhl Graphik und Visualisierung der TU München Prof. R. Westermann Dimitri Khanin Betreuer: Dr. P. Kipfer Einleitung Die photorealistische Visualisierung dreidimensionaler Szenen ist noch immer eine Herausforderung in der Computergraphik. Mit der Verfügbarkeit immer leistungsfähigerer Prozessoren und Graphiksysteme vergrößern sich zwar die Möglichkeiten der Anwendung, die Bedürfnisse der Benutzer werden aber auch immer anspruchsvoller. So werden die Berechnungsverfahren im Bereich Architektur mit immer größeren, detaillierten Szenen konfrontiert. Physikalisch korrekte Lösungen werden bei der Beleuchtungsplannung von Innenräumen erwartet. Und die Geschwindigkeit spielt dabei eine wichtige Rolle. Zurzeit existieren zwei am meisten verwendeten Verfahren für globale Beleuchtung: raytracing (dt. Strahlverfolgung) und radiosity. Beide haben ihre Vor- und Nachteile und deswegen können sich nicht gegenseitig ausschließen. Es wird ständig nach neuen Möglichkeiten zur Verbesserung dieser Algorithmen aber auch nach prinzipiell neuen Verfahren gesucht. Mit Photonmaps stellte Jensen [1] ein Verfahren vor, welches mit wenig Mehraufwand auch die Visualisierung komplexer optischer Phänomene wie diffuse Reflexionen oder Kaustiken (engl. caustics) ermöglicht. Aufgabenstellung Ziel der Arbeit ist ein Software zu entwickeln, womit die dreidimensionalen Objekte im Form von DXF-Dateien eingelesen und einschließend zu den beliebigen Zeitpunkten innerhalb des Jahres durch Sonnenlicht beleuchtet werden können. Als Basis für die Entwicklung soll ein schon vorhandenes Visualisierungs-Tool für die statistische Auswertung von Besonnungsdaten dienen. Theoretische Grundlagen Die Arbeitsweise des klassischen Photonmap-Verfahrens lässt sich in zwei Phasen unterteilen. Im ersten Schritt wird die von den Lichtquellen ausgehende Energie in Form kleiner Pakete (Photonen) durch die Szene transportiert. Beim Kontakt eines Photons mit einer Oberfläche wird entschieden, ob das Photon absorbiert, reflektiert oder transmittiert werden soll. Das Auftreffen des Photons auf eine diffuse Oberfläche wird in einer speziellen Datenstruktur (kd-Baum, s. unten) vermerkt. Die Visualisierung erfolgt im zweiten Schritt durch Strahlverfolgung und Auswertung der gespeicherten Photonendaten. k-d-Bäume (k-d steht für „k-dimensional“) bilden eine Verallgemeinerung eines binären Suchbaums mit einem Sortierschlüssel. Diese Bäume verwalten eine Menge von mehrdimensionalen Datenpunkten (im unseren Fall Photonen). Jeder Baumknoten erhält ein komplettes Datenrecord und zwei Zeiger auf den linken und 1
rechten Sohn. Die Werte der einzelnen Attribute werden abwechselnd auf jeder Ebene des Baums zur Diskriminierung verwendet. Es handelt sich um eine statische Struktur, die Operationen Löschen und die Durchführung einer Balancierung sind sehr aufwendig. Realisierung Das Modell wird eingelesen und mit den entsprechenden Texturen visualisiert. Nach der Bestimmung des Zeitpunktes, zu dem die Berechnung stattfinden soll, wird die Sonnenposition ermittelt. Dies passiert mit dem so genannten DIN Algorithmus (Deutsches Institut für Normung) [3]. Dieser Algorithmus berücksichtigt zwar nicht die Brechung des Sonnenlichtes in der Atmosphäre was für unsere Simulation aber ausreichend ist. Als Eingabe für den Algorithmus dienen: • geografische Position des Ortes (beschrieben durch Breitengrad φ und Längengrad ), es werden die festen Werte für München verwendet λ • ein Tag des Jahres • Uhrzeit des Tages (in Mitteleuropäischer Zeit (MEZ) angegeben, also für die Orte außerhalb von MEZ-Zone muss gegebenenfalls eine Korrektur vorgenommen werden) Anhand dieser Angaben wird der Sonnenstand berechnet. Der ist durch • Sonnenhöhe γ • Sonnenazimuth α definiert. Der Algorithmus liefert ziemlich genaue Ergebnisse. Danach werden die Photonen abgeschossen. Für jede Fläche wird ein Raster erzeugt, in dessen Zellen die eigentliche Berechnung stattfinden soll. Für den Mittelpunkt jeder Zelle wird mittels Aussenden eines Strahls in die Lichtrichtung zuerst bestimmt, ob dieser Punkt beleuchtet ist. Falls dieser Strahl ein Objekt in der Szene trifft, bedeutet das dass entsprechende Zelle im Schatten liegt und es wird ein Schattenphoton erzeugt und mit jeweiligen Koordinaten in den Baum gespeichert. Im zweiten Fall wird diese Stelle als beleuchtet angenommen, es wird eine Reflexionsrichtung bestimmt, ein „normales“ (direct illumination) Photon wird angelegt und es wird berechnet, ob der neue Reflexionsstrahl innerhalb der Szene bleibt, d.h. sich mit den anderen Objekten schneidet. Im diesen Fall wird es im Schnittpunkt ein neues Reflexionsphoton erzeugt, das die Farbe seines Ursprungpunktes aufweist, die aber mit dem Reflexionskoeffizient des Ausgangspunktes multipliziert (also gedämpft) wird. Dieser Koeffizient wird im Alphakanal der zugehörigen Textur gespeichert. Die Tiefe der Spiegelungsberechnung, also die Anzahl von berechneten Reflexionen wird vom Benutzer bestimmt. In diesem Schritt werden die Photonen ohne Rücksicht auf ihre räumliche Position in den kd-Baum geschrieben. Erst dann, wenn alle Photonen abgeschossen wurden, passiert einmalige Balancierung des Baums. Jedes gespeicherte Photon verfügt über folgende Informationen: • Farbe • räumliche Position • einfallende Strahlrichtung • Normalvektor • Typ (Normal-, Schatten- oder Reflexionsphoton) 2
Nun kann die Suche nach Photonen, die innerhalb eines Kreises um einen Punkt liegen, ziemlich schnell durchgeführt werden. Im weiteren Schritt werden die „Beleuchtungstexturen“ erzeugt. Für die oben beschrieben Rasterpunkte an den Flächen werden die umliegenden Photonen gesucht und anhand ihrer Farbenwerte wird die resultierende Farbe errechnet. In der Endphase werden die Haupttexturen (Texturen die Eigenschaften von Flächen bestimmen) mit den Beleuchtungstexturen mittels Shader moduliert. Verbesserungen und Erweiterungen Wie schon erwähnt wurde, werden die Objekte aus CAD-Programmen in Form von DXF-Datei importiert. DXF (Drawing Exchange Format) ist ein Vektorformat, das von der Firma Autodesk entwickelt wurde und stellt zurzeit das am meisten verbreitete Datenaustauschformat für CAD-Programme dar. Die Dokumentation dafür liegt offen. Dennoch ist das Lesen von solchen CAD-Daten alles andere als unproblematisch, insbesondere wegen der Vielzahl an verschiedenen Versionen und der Tatsache, dass verschiedene Software-Hersteller eigene Programmteile zur Erzeugung von DXF-Dateien einsetzen. Kaum ein Datenaustausch gelingt auf Anhieb vollkommen. Außerdem hat es sich im Laufe der Arbeit herausgestellt, dass die DXF- Dateien eigentlich keine Informationen über die Oberflächeneigenschaften des Modells (Farbe, Reflexionskomponente, Textur usw.) speichern können. Dies alles bedeutet, dass für weitere Entwicklung des Tools ein neues Datenformat gefunden werden soll, z.B. die 3DS-Dateien. Als weitere Erweiterungsmöglichkeit soll man die Berücksichtigung von Brechungseigenschaften von bestimmten Materialien nennen. Ergebnisse 3
Literatur [1] Jensen, Henrik Wann, Christensen, Niels Jorgen. Efficiently Rendering Shadows using the Photon Maps. In Proceedings of Computergraphics, pages 285 – 291, Alvor, December 1995. [2] Jensen, Henrik Wann. Global Illumination using Photon Maps. Rendering Techniques ’96 (Processing of the 7th Eurographics Workshop on Rendering, pages 21 – 30, 1996 [3] Quaschning, Volker. Regenerative Energiesysteme: Technologie, Berechnung, Simulation; mit 79 Tabellen, München, Hanser, 1998, ISBN 3-446-19369-3 4
Anhang User Manual Mit dem Menüpunkt File -> Open… kann man eine Datei bestimmen, aus der das Modell eingelesen wird. Weiter besteht es die Möglichkeit mit dem Punkt Shadows -> Create… die bestimmte Sonnenposition einzugeben. Bei der Betrachtung der Szene können wahlweise die Objekte sowohl mit Texturen als auch mit Kanten, nur mit Texturen und nur mit Kanten dargestellt werden. Darüber hinaus kann man nach der Beleuchtungsberechnung die Lichtstrahlen ein- oder ausblenden. Die Navigation durch die Szene wird hauptsächlich mit der Maus gesteuert: Bewegung nach links mit der linken Taste gedrückt – Rotation im Uhrzeigersinn um die vertikale Achse Bewegung nach rechts mit der linken Taste gedrückt – Rotation gegen den Uhrzeigersinn um die vertikale Achse Bewegung nach oben mit der linken Taste gedrückt – Rotation zu sich um die horizontale Achse Bewegung nach unten mit der linken Taste gedrückt – Rotation von sich um die horizontale Achse Bewegung mit der rechten Taste gedrückt – das Modell in die entsprechende Richtung parallel zum Bildschirm bewegen Das Mausrad nach vorne drehen – Einzoomen Das Mausrad nach hinten drehen – Auszoomen Betätigung dabei Shift-Taste bescheunigt den Zoomprozess 5
Sie können auch lesen