Verteiltes Rendering in Mehrsegment-Projektionsumgebungen auf OpenGL-Ebene

Mehrsegment-Projektionsumgebungen sind grafische Sichtgeräte, die besonders in den Bereichen der Virtuellen Realität und der wissenschaftlich-technischen Visualisierung zur hochaufgelösten Darstellung computerinterner 3D-Modelle eingesetzt werden. Charakteristisch für diese Geräteklasse ist die Bilderzeugung durch mehrere Projektoren. Somit lassen sich extrem hohe Auflösungen auf gleichzeitig sehr großen Projektionsflächen erreichen. Die technischen Herausforderungen liegen in der flüssigen Berechnung der Inhalte der einzelnen Bildsegmente und der bildsynchronen Ansteuerung der Projektoren. Zur aktiv-stereoskopischen Anzeige des Gesamtbildes ist zusätzlich die Synchronisation des Bildaufbaus (Strahlrücklauf) erforderlich. Als typische Vertreter gelten sogenannte walls (ebene Projektion), curved screens (zylindrische Projektionen), workbenches (Projektion auf zwei senkrecht zueinander stehende Ebenen) und caves (Projektion auf die Seiten eines Würfels).

Klassische kommerzielle System basieren meist auf speziellen Architekturen, z.B. SGI Onyx. Diese Rechner verfügen über mehrere synchronisierbare Grafikpipelines, die sich relativ unkompliziert entsprechend der konkreten Gegebenheiten konfigurieren lassen. Die grafische Anwendung steuert die Pipelines direkt an. Nachteilig ist hier natürlich der sehr hohe Preis.

Der Ersatz teurer Spezialrechner durch handelsübliche PCs hat sich in vielen Bereichen der generativen Grafik etabliert. Die Leistungsfähigkeit moderner Grafikkarten aus dem Konsumerbereich genügt selbst für die Echtzeitvisualisierung großer Modelle. In Mehrsegment-Projektionsumgebungen sind der Nutzung von Standardhardware jedoch enge Grenzen gesetzt. Hauptgrund ist die fehlende Möglichkeit zur hardwarebasierten Synchronisation der Bildwechsel mehrerer Systeme. Professionelle Grafikkarten zum Einbau in PC-Architekturen verfügen jedoch über geeignete Hardware und erlauben damit verteiltes, bildsynchrones Rendering.

Ausgehend von der zylindrischen Projektion des Panoram Visualization Centers ergeben sich zwei Ansätze zur verteilten Bildberechnung unter Verwendung eines PC-Clusters:

Während verteiltes Rendering auf Modellebene netzwerkbasierte Applikationen erfordert, lassen sich durch die Verwendung einer Zwischenschicht auf Systemebene potenziell beliebige OpenGL-basierte Applikationen ohne Modifikation auf dem Visualization Center betreiben. 

Gegenstand dieses Projektes ist die Implementation eines Meta-Layers zur verteilten Bildberechnung unter Verwendung des Open-Source Chromium Kernels auf Standard-PC's.

Die folgende Abbildung zeigt den prinzipiellen Aufbau beider Varianten:


Abb. 1: Aufbau und Datenflüsse in einer 3-Segment-Projektion

Blaue Rechtecke veranschaulichen die grafische Applikation, gelbe den OpenGL Meta Layer. Links ist verteiltes Rendering auf Applikationsebene, rechts auf OpenGL-Ebene dargestellt.

Durch gezielte Manipulationen der OpenGL Kommando- und Datenströme, die vom Renderer erzeugt und an die OpenGL übergeben werden, sind für die Applikation transparente Verbesserungen der Bildqualität, der Darstellungsgeschwindigkeit und Änderungen der Darstellungsmodi möglich. 

Die Notwendigkeit zur Verbesserung der Bildqualität ist hauptsächlich dem Aspekt geschuldet, dass die Anwendung in einem Fenster mit sehr hoher Auflösung läuft. Nicht alle Programme verwenden dafür geeignete Darstellungsmodi und -filter. 

Zum Erreichen einer angemessenen Framerate ist es erforderlich, den OpenGL Kommandostrom zu optimieren. Die zu übertragende Informationsmenge sowie die Anzahl der an den Visualisierungssystemen zu rendernden grafischen Primitive sind zu minimieren. Durch die begrenzte Bandbreite bei der Verteilung der OpenGL-Streams über ein Netzwerk entsteht ein Engpass, der sich in einer geringeren Framerate gegenüber einem einzelstehenden System bemerkbar macht. Dies ist insbesondere dann gegeben, wenn die Anwendung ungünstig programmiert wurde. Beispielhaft sei der Verzicht auf bzw. die sparsame Verwendung von Displaylisten genannt. Die Integration eines Caches für Kommandoströme verbunden mit der Kapselung von Ausgabeblöcken zu Displaylisten gleicht einen Teil des Performanceverlusts wieder aus. Effektive Culling-Algorithmen verbessern das Laufzeitverhalten weiter. Schließlich ist die Substitution von Geometrien durch vereinfachte Versionen Gegenstand der aktuellen Überlegungen hinsichtlich der Realisierung von applikationstransparentem Level-of-Detail. 

Für die beiden oben genannten Funktionsklassen ist die Vermeidung sichtbarer Darstellungsfehler oberstes Kriterium. Im Gegensatz dazu kann es durchaus gewollt sein, mit Hilfe zusätzlicher Funktionalität die grafische Darstellung bewusst zu verändern. Beispielhaft seien manipulierte Darstellungsmodi, z.B. Wireframe oder Flatshading, genannt.

Kontak: Mario Lorenz