Integration von XML-basierten Shader-Programmen in X3D
Studienarbeit von Anne Belkner
Motivation
Extensible 3D (X3D) ist eine offener Standard für die Beschreibung von dreidimensionalen virtuellen Welten, Spielen und interaktiven Anwendungen. X3D wurde von dem Web3D Consortium entwickelt und unterstützt mehrere Dateikodierungen, darunter die Virtual Reality Modeling Language (VRML) und die Extensible Markup Language (XML), die den plattformübergreifenden Datentransfer und Datenaustauch ermöglicht. In den letzten Jahren haben die Fortschritte in der Entwicklung von Grafikkarten rasant zugenommen. Moderne Grafikhardware übernimmt einen großen Teil der zeitkritischen Grafikberechnungen komplexer dreidimensionaler Szenen. Durch die Entwicklung von Grafikkarten mit programmierbaren Einheiten ist der Benutzer heute in der Lage in einer Szene ein hohes Maß an Realismus zu simulieren. Die Programme, die der Programmierer durch die frei programmierbaren Einheiten erstellen kann, werden Shader genannt. Heute werden Shader unter anderem in höheren Programmiersprachen wie Nvidias C for Graphics (Cg), 3DLabs OpenGL Shading Language (GLSL) und Microsofts High Level Shading Language (HLSL) beschrieben. Die Entwicklung einer XML-basierten visuellen Shading Language durch den Diplomand Ralf Borau hat die Erstellung von Shader-Programmen immens vereinfacht. Das im Rahmen seiner Diplomarbeit entstandene Entwicklungssystem baut auf der datenflussorientierten Programmierung auf. Durch die visuelle Darstellung von Programmfragmenten sollte die anpruchsvolle Entwicklung von Shader-Programmen einer breiteren Masse von Menschen zugänglich gemacht werden. Die Integration der visuellen Shading Language in X3D hätte zum einen den Vorteil, dass die entwickelten Shader in komplexen X3D-Szenen getestet werden können. Zum anderen würde X3D in Verbindung mit programmierbaren Shadern 3D-Inhalte in hoher visueller Qualität ermöglichen.
Ziel der Arbeit
Für die visuelle Entwicklung von Shadern in Cg hat Ralf Borau den Visual Editor entwickelt. Der in Java implementierte Editor unterstützt die visuelle Programmierung von Vertex- und Fragment-Programmen. Diese Programme können innerhalb des Editors direkt auf eine 3D-Testszene angewendet werden. Der Implementierung des Visual Editors ging die Entwicklung eines Modells für eine visuelle Programmiersprache und der Entwurf eines XML-Datenformats zum Speichern der konstruierten Shader voraus. Sascha Ertelt hat den Visual Editor in seiner Studienarbeit „Erweiterung einer visuellen Shading Language um OGSL Unterstützung“ um Funktionalitäten ergänzt. Unter anderem wurde die Unterstützung der OpenGL Shading Language in das Entwicklungstool integriert und das Java OpenGL Binding GL4Java durch Jogl ersetzt. Diese Studienarbeit beschreibt die neue X3D-Komponente Shader, durch die der Benutzer in X3D einzigartige visuelle Effekte erzeugen kann. Im Rahmen dieser Studienarbeit sollte ein Entwicklungssystem entstehen, das zum einen die Erstellung von XML-basierten Shader-Programmen durch die visuelle Shading Language ermöglicht. Zum anderen sollte der Entwickler eine X3D-Szene um programmierbare Shader in XML und der OpenGL Shading Language erweitern können. Shader, die mit der visuellen Shading Language programmiert wurden, können so direkt in einer X3D-Szene getestet werden. Die Funktionen zum Laden des X3D-Inhaltes und zum Erkennen und Interpretieren der Shader-spezifischen Knoten werden von den Bibliotheken Xj3D und Aviatrix3D bereit gestellt.
Realisierung
Im Rahmen dieser Studienarbeit wurde in der Sprache Java ein Programm für die Integration von Shadern in X3D entwickelt. Der Benutzer ist in der Lage zu entscheiden, ob er einen XML-basierten Shader oder einen Shader in der OpenGL Shading Language in das X3D-Format integrieren möchte. Durch die Eingliederung des Visual Editors in das Programm kann der Benutzer zusätzlich Shader im XML-Format erstellen oder geladene Shader bearbeiten. Das von der visuellen Shading Language verwendete Datenflussdiagramm trägt dazu bei, dass Fehler beim Programmmiervorgang vermieden werden. Programme, die mithilfe der visuellen Shading Language erzeugt werden, lassen sich durch die Umwandlung in ein XML-Dokument direkt durch eine Instanz der Knoten VertexProgram und FragmentProgram der neuen X3D-Komponente Shader referenzieren. Beim Parsen des X3D-Dokumentes werden die XML-basierten Shader lokalisiert und durch ein XSLT-Stylesheet in ein äquivalentes Programm in der OpenGL Shading Language umgewandelt. Anschließend erzeugt das Entwicklungssystem eine Anfrage zum Kompilieren und Linken der Shader an die zuständige Instanz der Aviatrix3D-Bibliothek. Mit dem entworfenen Programm zur Integration von programmierbaren Shadern ist es möglich ein X3D-Dokument und XML-basierte Shader anzuzeigen und zu bearbeiten. Das Entwicklungssystem unterstützt eine effektive und effiziente Erweiterung des X3D-Dokumentes durch den Benutzer, indem es knotenspezifische Kontextmenüs und Dialoge bereit stellt, die strukturiert und verständlich aufgebaut sind. Das Entwicklungssystem stellt ein Ausgabefenster zur Darstellung einer X3D-Szene bereit, in dem die Ausführung der Shader getestet werden kann. Durch die Verwendung von Java, OpenGL und der OpenGL Shading Language ist dieses Entwicklungssystem unter Windows, Linux und Mac OS lauffähig.
Bilder
Die grafische Benutzungsoberfläche des Entwicklungssystems zur Integration von Shadern in X3D, die in der folgenden Abbildung zu sehen ist, setzt sich aus zwei wesentlichen Komponenten zusammen. Im linken Fenster (1) wird ein X3D-Dokument hierarchisch in einer Baumstruktur dargestellt. Der Benutzer ist in der Lage einen Baumknoten auszuwählen, zu editieren und über Popup-Menüs, auch genannt Kontextmenüs, um Kindknoten zu ergänzen oder Knotenfelder zu initialisieren. Im rechten Fenster (2) befindet sich eine blau hinterlegte Arbeitsfläche, in der sich der Diagram Editor und die Toolbar des Visual Editors, sowie ein Ausgabefenster befinden. In dem Diagram Edior werden Vertex- und Fragment-Programme in Form von Datenflussdiagrammen angezeigt und bearbeitet. Die Toolbar dient dem Erzeugen neuer Knoten und Anschlüsse in einem geöffneten Diagramm. Das Ausgabefenster zeigt eine 3D-Szene ausgehend von dem X3D-Dokument im linken Fenster der Benutzungsoberfläche.
Links
Web3D Consortium
OpenGL Homepage
Für weitere Informationen bitte E-Mail an abelkner@uni-paderborn.de.