Eye Dome Lighting: eine nicht fotorealistische Shading-Technik.
Eye Dome Lighting (EDL) ist eine nicht-fotorealistische Shading-Technik, die entwickelt wurde, um die Tiefenwahrnehmung in wissenschaftlichen Visualisierungsbildern zu verbessern. Es stützt sich auf effiziente Postprocessing Passes, die auf der GPU mit GLSL-Shadern implementiert sind, um interaktives Rendering zu erreichen. Für die Berechnung der Shading-Funktion werden ausschließlich projizierte Tiefeninformationen benötigt, die dann auf das farbige Szenenbild angewendet werden. EDL kann daher auf jede Art von Daten angewendet werden, unabhängig von ihren geometrischen Merkmalen mit Ausnahme von Daten, die eine transparente Darstellung erfordern.
In diesem Artikel beschreiben wir zunächst kurz EDL und geben dann einige Details darüber, wie es in ParaView integriert wurde. EDL wurde von Christian Boucheny während seiner Doktorarbeit entwickelt. Das ursprüngliche Ziel war es, die Tiefenwahrnehmung bei der Visualisierung großer 3D-Datensätze, die komplexe Industrieanlagen oder Ausrüstungen für Electricite de France (EDF) darstellen, zu verbessern. Tatsächlich ist EDF ein großes europäisches Elektrounternehmen, in dem Ingenieure täglich komplexe Daten wie 3D-Scans von Kraftwerken oder Ergebnisse aus numerischen Multiphysik-Simulationen visualisieren.
Was ist Eyedome Lighting?
Das Shading nimmt einen besonderen Platz unter den visuellen Mechanismen ein, die der Wahrnehmung komplexer Szenen dienen. Globale Beleuchtungsmodelle, einschließlich eines physikalisch inspirierten Ambient Occlusion Begriffs, werden oft verwendet, um das Relief von Oberflächen zu betonen und räumliche Beziehungen zu verdeutlichen. Die Anwendung solcher Modelle bleibt jedoch kostspielig, da sie oft aufwändige Vorberechnungen erfordert und daher für einen explorativen Prozess in der wissenschaftlichen Visualisierung ungeeignet ist. Andererseits liefern bildbasierte Techniken, wie z.B. Kantenverbesserung oder Halos aufgrund von Tiefenunterschieden, nützliche Hinweise für das Verständnis komplexer Szenen. Subtile räumliche Zusammenhänge, die mit realistischen Beleuchtungsmodellen nicht sichtbar sind, können mit diesen nicht-fotorealistischen Techniken verstärkt werden.
Die hier vorgestellte, nicht-fotorealistische Shadingtechnik EDL stützt sich auf die folgenden Leitgedanken.
Bildbasiertes Lighting: Diese Methode ist inspiriert von Ambient Occlusion oder Skydome Lighting Techniken, mit dem Zusatz von Viewport Dependency. Im Gegensatz zur Standardanwendung dieser Techniken werden in unserem Ansatz die Berechnungen im Bildkoordinatenraum durchgeführt, wobei nur die Tiefenpufferinformationen verwendet werden, wie in Crytek Screen-Space Ambient Occlusion. Diese Techniken erfordern keine Darstellung im Objektkoordinatenraum, so dass keine Kenntnisse über die Geometrie der visualisierten Daten oder Vorverarbeitungsschritte erforderlich sind.
Lokalität: Das Shading eines bestimmten Pixels sollte sich in erster Linie auf seine unmittelbare Nachbarschaft im Bildraum stützen, da die Auswirkungen von Interaktionen mit großer Reichweite von den Betrachtern zunächst nicht erkannt werden.
Interaktivität: Unser Hauptanliegen ist es, kostspielige Operationen zu vermeiden, die die interaktive Erkundung verlangsamen und somit das Verständnis der Daten einschränken würden. Aufgrund der Entwicklung der Grafikhardware scheint eine begrenzte Anzahl von Operationen, die an Fragmenten durchgeführt werden, der effizienteste Ansatz zu sein.
Das Grundprinzip des EDL-Algorithmus besteht darin, eine Halbkugel (die Kuppel) zu betrachten, die auf jedem Pixel p zentriert ist. Diese Kuppel ist durch eine „horizontale Ebene“ begrenzt, die senkrecht zur Beobachterrichtung am Punkt p steht. Das Shading ist eine Funktion der Menge dieser Kuppel, die bei p sichtbar ist oder wird umgekehrt durch die Menge dieser Kuppel bestimmt, die von den Nachbarn von p versteckt werden. Mit anderen Worten, ein Nachbarpixel reduziert die Beleuchtung bei p, wenn seine Tiefe geringer ist als die von p. Dieses Verfahren definiert eine Schattierungsgröße, die ausschließlich von den Tiefenwerten der nahen Nachbarn abhängt. Um eine bessere Schattierung zu erreichen, die weiter entfernte Nachbarpixel berücksichtigt, wird ein Multiskalenansatz implementiert, bei dem die gleiche Schattierungsfunktion bei niedrigeren Auflösungen angewendet wird. Diese schattierten Bilder werden dann gefiltert, um das Aliasing zu begrenzen, das durch eine geringere Auflösung hervorgerufen wird und zwar mit Hilfe eines bilateralen Kreuzfilters und anschließend mit dem schattierten Bild in voller Auflösung zusammengefügt.
Kompilieren und Verwenden von EDL in ParaView.
Eye Dome Lighting Shading ist in ParaView als Plugin implementiert. Der Code befindet sich im ParaView-Source-Tree unter Plugins/EyeDomeLighting. Bevor der Build des Systems durchgeführt wird, muss eine neue Variable PARAVIEW_BUILD_PLUGIN_EyeDomeLighting in der Cmake-Schnittstelle auf ON geschaltet werden, um den Aufbau des Systems zu ermöglichen.
Sobald das Systems erstellt ist, kann das Plugin über die Funktion Plugins verwalten im Menü Tools geladen werden. Die dynamische Bibliothek des EDL-Plugins heißt derzeit libRenderPassEyeDomeLightingView. Beim Laden erscheint in der Liste der verfügbaren Ansichten ein neuer Ansichtstyp mit der Bezeichnung „Render View + Eye Dome Lighting“. Wählen Sie es einfach aus und alle in der Ansicht geladenen 3D-Daten werden mit EDL schattiert. Beachten Sie, dass die EDL-Schattierungsfunktion bisher aufgrund der ParaView-spezifischen Materialpipeline der klassischen Ansicht überlagert ist. Durch eine Änderung der letztgenannten würde es möglich sein, verschiedene Schattierungen flexibler zu definieren.
Plugin-Architektur in ParaView.
Der EDL-Algorithmus ist als vtkImageProcessingPass implementiert. Dies ermöglicht es uns, den Algorithmus aus dem Plugin auf folgende Weise aufzurufen:
Wenn wir uns diesen Code ansehen, können wir bereits einige wichtige Details der Implementierung beschreiben.
Das Plugin selbst besteht aus einem vtkPVRenderView, einer ParaView-Ansicht. Die Ansicht enthält eine neue Methode SetImageProcessingPass, die unseren Algorithmus an der richtigen Stelle in die Visualisierungspipeline einfügt. Dieses Framework für die Nachbearbeitung von Bilddurchläufen wurde kürzlich zum R&D von EDF hinzugefügt. Die Position, an der der Imaging Pass eingefügt wird, erlaubt es derzeit jedoch nicht, die Transparenz korrekt anzuwenden. Dies ist auf das komplexere Pipeline-Design für die Transparenzdarstellung zurückzuführen, das auf Depth Peeling setzt und die Weiterentwicklung in VTK sollte bei Bedarf erfolgen.
Die Methode SetUseDepthBuffer wurde zu vtkPVSynchronizedRendered hinzugefügt, um die Verwendung von Tiefenpuffern einzuschalten. Tatsächlich verwendet EDL einen Tiefenpuffer, aber die meisten Algorithmen nicht. Das ständige Einschalten des Algorithmus kann zu einer Verlangsamung des Systems führen, wenn der Tiefenpuffer nicht benötigt wird. Um dieses Problem zu vermeiden, wird SetUseDepthBuffer mitgeliefert. Der Benutzer ist dann für die Aktivierung des Tiefenpuffers verantwortlich, wenn sein Algorithmus dies erfordert. Der Standardwert ist off.
Die Verwendung des Tiefenpuffers durch EDL war eine der Hauptherausforderungen für die Integration von EDL in ParaView. Tatsächlich sollte das Plugin in Standalone-, Client-, Server- und Parallel-Server-Modus arbeiten. Darüber hinaus werden auch gekachelte Displays berücksichtigt. Einige Entwicklungen wurden durchgeführt, um ein paralleles Compositing des Tiefenpuffers mit IceT zu ermöglichen. Diese Funktionalität von IceT den Renderpasses zu unterwerfen, war das Hauptziel zur korrekten Implementierung von EDL.
Shading Algorithmus.
Das vtkEDLShading basiert auf einer weiteren Klasse mit der Bezeichnung vtkDepthImageProcessingPass. Diese Klasse enthält einige allgemeine Methoden, die nicht spezifisch für den EDL-Algorithmus sind und zur Implementierung anderer Algorithmen verwendet werden können. Beispielsweise haben wir einen bildbasierten Ambient Occlusion Shading Algorithmus und eine darauf basierende ParaView-Ansicht implementiert. So könnte jeder Benutzer eine Klasse aus vtkDepthImageProcessingPass ableiten, um einen solchen Algorithmus zu implementieren.
Danksagungen.
Der EDL-Algorithmus ist das Ergebnis einer gemeinsamen Arbeit von Electricite de France, CNRS, College de France und Universite J. Fourier im Rahmen der Doktorarbeit von Christian Boucheny.