Aus Linux-Magazin 09/2008

Gewusst wie: Im Raum drehbare Modelle für den Adobe Reader

3D-Grafik für die Massen versprach die Virtual Reality Markup Language – und ist gescheitert: Bis heute zeigt keiner der verbreiteten Browser die 3D-Inhalte ohne Plugin an. Doch mit dem Adobe Reader 8 steht nun tatsächlich ein verbreiteter 3D-Viewer zur Verfügung.

Egal ob bei CAD-Modellen, mathematischen Flächen oder mit einem 3D-Scanner abgetasteten räumlichen Gegenständen – anders als zweidimensionale Abbildungen, die die Realität lediglich aus einem festen Blickwinkel wiedergeben, lassen sich echte 3D-Modelle in einem geeigneten Viewer drehen und von allen Seiten betrachten.

Spiel und Ernst

Computerspiele treiben großen Aufwand, um die dritte Dimension für wechselnde Standorte des Spielers in Echtzeit realitätsgetreu auf dem Bildschirm zu simulieren. Ein Austauschformat für räumliche Modelle inklusive plattformübergreifend verbreitetem Viewer fehlte jedoch lange Zeit. Virtuelle Welten im Internet oder, etwas bescheidener, dreidimensionale, animierte Produktkataloge und Gebrauchsanweisungen, die der Anwender ohne Installation zusätzlicher Software betrachten kann, blieben auf allen Plattformen selten.

Dabei existiert das Gespann aus einem verbreiteten, kostenlosen Viewer und dem zugehörigen Dateiformat bereits: Der Adobe Reader der siebten Generation zeigt in PDFs eingebettete räumliche Modelle an, unter Linux erstellte Dateien brauchen Version 8. Ältere Viewer zeigen statt des 3D-Inhalts lediglich einen leeren Rahmen an. Das Gleiche gilt auch für offene PDF-Betrachter wie Xpdf, Evince und KPDF, denen die 3D-Unterstützung gegenwärtig fehlt.

Wer 3D-PDFs erstellen möchte, muss zunächst ein 3D-Modell in das U3D-Format konvertieren und diese Daten in eine PDF-Datei einbetten. Für den ersten Arbeitsschritt gibt es unter Linux bisher zwei freie Werkzeuge: Intels IDTF-Konverter [1] und das Virtual-Reality-Tool Jreality [2]. Pdflatex [3], Itext [4] oder andere PDF-Bibliotheken erzeugen daraus eine PDF-Datei mit drehbaren räumlichen Modellen.

Flexibler Blickwinkel

Der Adobe Reader bietet alle grundlegenden 3D-Viewer-Funktionen (siehe Abbildung 1), neben dem Kontextmenü liegt oberhalb des 3D-Rahmens ein eigenes Menü. Auf der linken Seite zeigt die Software einen Szenengraphen (vergleiche Kasten “Szenengraph”) mit in der 3D-Szene enthaltenen Teilobjekten, vordefinierten Ansichtsperspektiven und Metadaten an. Die Szene lässt sich mit der Maus drehen, zoomen und verschieben. Mehrere Farben und Beleuchtungen und mehr als ein Dutzend verschiedener Renderer verändern die Darstellung der räumlichen Objekte (Abbildung 1).

Abbildung 1: Der Adobe Reader enthält einen 3D-Viewer mit verschiedenen Renderern und eine Anzeige für den Szenengraphen.

Abbildung 1: Der Adobe Reader enthält einen 3D-Viewer mit verschiedenen Renderern und eine Anzeige für den Szenengraphen.

Die Basisfunktionen, die der PDF-Reader von Haus aus mitbringt, erweitern den ins PDF eingebetteten Javascript-Code. Eine kurze Einführung in das Schreiben interaktiver PDF-Anwendungen gibt [5]. 3D-Objekte lassen sich wie Textformatierungen und Objektfarben über Javascript verändern. Paradebeispiele dafür sind die interaktiven Bedienungsanleitungen der Firma Kaon [6]. Hyperlinks oder Buttons drehen und animieren dort das 3D-Modell so, dass bestimmte Teile einer Kamera oder eines anderen Geräts in Aktion zu sehen sind. Weitere gelungene Beispiele finden sich zum Beispiel auf dem User-Forum Acronaut [7].

Szenengraph

Die Dateien vieler 3D-Anwendungen enthalten als zentrale Datenstruktur einen so genannten Szenengraphen. Das ist eine Baumstruktur, die die Teilobjekte einer Szene einander hierarchisch zuordnet. Außer dem Wurzelknoten und jenen Knoten, die räumliche Objekte enthalten, gibt es solche, die geometrische Informationen, Lichter oder virtuelle Kameras repräsentieren. Jeder Knoten lässt sich durch eine 4-mal-4-Matrix relativ zu seinem Elternknoten positionieren.

Der Adobe Reader 8 zeigt den Szenengraphen auf Wunsch auf der linken Fensterseite an. Der Anwender kann darin Teilobjekte per Hand ein- und ausblenden. Die Knoten lassen sich außerdem – ähnlich wie in HTML – über ein DOM-Modell auch per Javascript manipulieren, um zum Beispiel Teile der 3D-Szene zu animieren.

Standardmäßig

Das Problem beim Austausch von 3D-Daten beginnt bei der mangelhaften Standardisierung. Mindestens 20 verschiedene für den Datenaustausch vorgesehene Formate konkurrieren auf dem Markt, die spezifischen Standards der einzelnen Programme sind dabei gar nicht mitgerechnet. Jedes ist auf eine Nische wie wissenschaftliche Visualisierung, Rendering oder CAD zugeschnitten, keines hat sich allgemein durchgesetzt.

Ordnung ins Chaos

Um diesem Formatwirrwarr abzuhelfen, haben Intel, Nvidia, PTC, Right Hemisphere und einige andere Firmen das U3D-Format [8] entwickelt. Ziel sind kompakte, für die reine Darstellung – nicht die Weiterbearbeitung – optimierte Dateien. Die zum Austausch übers Netz optimierten U3D-Files enthalten daher, anders als VRML-Dateien, alle für die Anzeige nötigen Daten in binärer Form.

Das U3D-Konsortium hat es aber nicht bei bloß maschinenlesbaren Binärdateien bewenden lassen. Intels freie Referenzimplementierung [1] enthält neben einer Basisbibliothek auch einen Konverter, der Szenenbeschreibungen im für Menschen lesbaren Intermediate-Data-Text-Format in binäre U3Ds umwandelt.

Die U3D-Spezifikation ist seit 2005 von der ECMA standardisiert und kostenfrei erhältlich [8]. Was sie aus der Masse der in den letzten Jahren erstanden 3D-Austauschformate heraushebt, ist die Tatsache, dass der Adobe Reader es eingebettet in PDFs anzeigt. Dann können sie etwa 90 Prozent aller Rechner anzeigen, was eine gute Voraussetzung für die Verbreitung von 3D-Inhalten wie Produktbroschüren oder animierten Gebrauchsanweisungen über das Internet schafft. Austauschformate wie STEP (CAD) oder Collada (Rendering) bieten zwar mehr Features, in ihrer Komplexität bleiben sie jedoch umfangreichen 3D-Programmen vorbehalten und eignen sich nicht für kompakte Viewer.

Human-readable

Listing 1 zeigt eine IDTF-Datei, die eine einfache Pyramide aus vier Dreiecken beschreibt. Der Anfang der Datei legt den Szenengraphen fest, der hier nur den Knoten »Pyramide« enthält. In jedem Knoten stecken eine Referenz zum Vaterknoten sowie eine Positionierung mit Hilfe einer 4-mal-4-Matrix und gegebenenfalls dem Verweis auf eine Geometrie-Ressource. Das räumliche Objekt ist die Ressource »Pyramide« in Zeile 23.

Listing 1: Einfache Pyramide im
IDT-Format

01 FILE_FORMAT "IDTF"
02 FORMAT_VERSION 100
03 
04 NODE "MODEL" {
05   NODE_NAME "Pyramide"
06   PARENT_LIST {
07     PARENT_COUNT 1
08     PARENT 0 {
09       PARENT_NAME "<NULL>"
10       PARENT_TM {
11   0.707... -0.707...  0.0        0.0
12   0.612...  0.612... -0.5        0.0
13   0.353...  0.353...  0.866... 0.0
14   0.0        -50.0      0.0       1.0
15       }
16     }
17   }
18   RESOURCE_NAME "Pyramide"
19 }
20 
21 RESOURCE_LIST "MODEL" {
22   RESOURCE_COUNT 1
23   RESOURCE 0 {
24     RESOURCE_NAME "Pyramide"
25     MODEL_TYPE "MESH"
26     MESH {
27       FACE_COUNT 4
28       MODEL_POSITION_COUNT 4
29       MODEL_NORMAL_COUNT 0
30       MODEL_DIFFUSE_COLOR_COUNT 0
31       MODEL_SPECULAR_COLOR_COUNT 0
32       MODEL_TEXTURE_COORD_COUNT 0
33       MODEL_BONE_COUNT 0
34       MODEL_SHADING_COUNT 1
35       MODEL_SHADING_DESCRIPTION_LIST {
36         SHADING_DESCRIPTION 0 {
37           TEXTURE_LAYER_COUNT 0
38           SHADER_ID 0
39         }
40       }
41       MESH_FACE_POSITION_LIST {
42         0 2 3
43         1 3 2
44         0 1 2
45         0 3 1
46       }
47       MESH_FACE_SHADING_LIST {
48         0
49         0
50         0
51         0
52       }
53       MODEL_POSITION_LIST {
54         20 0 0
55         -20 0 0
56         0 20 20
57         0 -20 20
58       }
59     }
60   }
61 }

Die Referenzimplementation [1] enthält eine genaue Beschreibung des IDT-Formats inklusive Beispielen. Weniger gut ist der IDTF-Konverter selbst beschrieben, fehlerhafte Eingaben führen zu undokumentierten Rückgabewerten. Dennoch eignet sich die Software gut dazu, eigene Daten in das U3D-Format zu konvertieren. Neben der reinen Geometrie unterstützt sie weitere Features, etwa vordefinierte Ansichten, Beleuchtung, Texturen und Bewegungen.

Generator

Räumliche Modelle entstehen in der Praxis selten als handgeschriebene Textdateien. 3D-Grafen im IDTF-Format erzeugt Alexey Balakins Visualisierungsbibliothek Math GL [9]. Aus C-, C++- und Fortran-Programmen heraus aufgerufen entstehen unterschiedliche Visualisierungen von Tortengrafiken bis hin zu Vektorfeldern. Die Homepage des Projekts bietet einen umfassenden Überblick.

Aufbauend auf Math GL erstellt das interaktive Werkzeug UDAV [10] Diagramme, die der Anwender ähnlich wie beim Klassiker Gnuplot in einer einfachen Sprache beschreibt (Abbildung 2). Math GL schreibt außer IDTF-Dateien auch Bitmaps und Vektorgrafiken. Anders als diese kann der Anwender jedoch echte 3D-Grafen mit der Maus drehen und von allen Seiten betrachten.

Abbildung 2: UDAV erstellt zahlreiche 3D-Diagrammtypen und exportiert sie als IDTF oder als gewöhnliche Bitmaps.

Abbildung 2: UDAV erstellt zahlreiche 3D-Diagrammtypen und exportiert sie als IDTF oder als gewöhnliche Bitmaps.

Konverter

Liegen bereits räumliche Modelle vor, spielt das aus Italien kommende Meshlab [11] seine Stärken aus (Abbildung 3). Es importiert dank vieler Importfilter (unter anderem OBJ, STL, VRML, 3DS, Collada) mit anderen Programmen erzeugte 3D-Objekte wie CAD-Modelle oder 3D-Laserscans. Die Software startet beim Export in das U3D-Format automatisch den IDTF-Konverter und schreibt zusätzlich auch gleich ein passendes Latex-Schnipsel für die PDF-Erzeugung mit Tex.

Abbildung 3: 3D-Scans wie das räumliche Modell einer Statue von Aim@Shapes sind das Spezialgebiet von Meshlab.

Abbildung 3: 3D-Scans wie das räumliche Modell einer Statue von Aim@Shapes sind das Spezialgebiet von Meshlab.

Leider gibt es bisher weder für Intels Referenzimplementation noch für Meshlab, Math GL oder UDAV Pakete, sie sind aber in Arbeit. Für die Referenzimplementation gelingt das Kompilieren unter Linux erst mit einem Patch von Michail Widassow und Alexey Balakin [12].

Die Virtual-Reality-Software Jreality [2] erzeugt U3D-Dateien ohne den Zwischenschritt über den IDTF-Konverter (Abbildung 4). Der mathematische Lehrstuhl der Universität Berlin entwickelt die Software als flexibles Werkzeug für die Darstellung mathematischer Experimente. Dank zahlreicher gängiger Eingabeformate wie Mathematica, VRML, dem Povray-Format und STL ist die Anwendung aber nicht auf mathematische Anwendungen beschränkt, sondern konvertiert auch die Modelle vieler anderer 3D-Programme.

Abbildung 4: Das Virtual-Reality-Werkzeug Jreality stellt mehr als pure Mathematik dar und bietet einen direkten U3D-Export.

Abbildung 4: Das Virtual-Reality-Werkzeug Jreality stellt mehr als pure Mathematik dar und bietet einen direkten U3D-Export.

Inszeniert

Die Darstellung auf dem Bildschirm übernimmt das Java-OpenGL-Binding Jogl [13]. Fehlen die notwendigen OpenGL-Bibliotheken, springt ein langsamerer Software-Renderer ein. Ihre Leistungsfähigkeit stellt die Software in der 3D-Cave des Lehrstuhls unter Beweis. Dank Java ist kein Kompilieren erforderlich, per Webstart läuft die Anwendung sogar aus dem Browser heraus.

Jreality ist eines der wenigen unter Linux verfügbaren freien Virtual-Reality-Programme. Es enthält viele interessante Ansätze, etwa ein Werkzeug, das es erlaubt, direkt mit der Maus auf räumliche Objekte zu malen. Das Ergebnis übernimmt der U3D-Export als Textur. Die Software, die sich leicht um weitere Importfilter oder 3D-Werkzeuge erweitern lässt, bietet sich daher als leistungsfähiger Baukasten zur Entwicklung eigener Virtual-Reality-Anwendungen an.

Gut verpackt

Gleichgültig, wie das U3D-Modell entstanden ist, der normale Benutzer kann erst nach dem Einbetten in ein PDF etwas mit dem 3D-Objekt anfangen. Theoretisch gelingt dies mit beinahe jeder PDF-Bibliothek. Besonders dafür zu empfehlen sind jedoch Pdflatex [3] und die Java-Bibliothek Itext [4].

Mit Style einfügen

Wie so vieles andere löst Latex das Einbinden räumlicher Modellen mit einem eigenen Style: Alexander Grahns Movie-Style [3] unterstützt das Einbetten von Multimedia-Formaten wie Mpeg oder Flash, aber auch von U3D-Modellen. Listing 2 zeigt den dafür erforderlichen Latex-Code. Das »includemovie«-Statement darf neben der U3D-Datei und dem gewünschten Renderer auch die Kameraposition enthalten. Sinnvolle Werte hierfür ermittelt ein Trick: Eine Vorabversion der Latex-Datei enthält keine Werte für »3Dcoo« und »3Droo« (Zeilen 14 und 15), dafür das Moviref-Statement (Zeile 17).

Listing 2: 3D-PDFs mit
Latex

01 documentclass[a4paper]{article}
02 usepackage[3D]{movie15}
03 usepackage[german]{babel}
04 usepackage[colorlinks=true]{hyperref}
05 begin{document}
06 Hier steht Text...
07 begin{center}
08 includemovie[
09   poster,
10   toolbar,
11   label=test.u3d,
12   text=(test.u3d),
13   3Dlights=CAD,
14   3Dcoo=7.071072101593018 -42.92892837524414 17.320518493652344,
15   3Droo=133.842698794126
16 ]{linewidth}{9cm}{pyramide.u3d}
17 movieref[3Dcalculate]{test.u3d}{Click here!}
18 end{center}

Der Link »Click here!« berechnet passende Werte. Der Programmierer übernimmt sie per Copy&Paste in den Latex-Code. Das Einbinden von U3Ds mit dem Movie-Style geht also sehr schnell und gelingt auch Tex-Anfängern. Zudem lassen sich im Zusammenwirken mit der Beamer-Klasse Vortragsfolien mit 3D-Inhalten erstellen [14].

Aus Java-Programmen heraus erzeugt Bruno Lowagies Bibliothek Itext [4] PDFs mit praktisch allen von Adobe dokumentierten Features – auch mit eingebetteten 3D-Inhalten, [15] listet nützlichen Beispielcode. Mit Hilfe des Itext-Toolkits [16] können nicht nur Programmierer etwas mit Itext anfangen. Ein einfaches GUI zur Bedienung der PDF-Library lässt sich sogar über Java-Webstart nutzen. »Tool |Manipulate | Add3D« startet ein Programm, das eine U3D-Datei auf der ersten Seite eines bestehenden PDF einfügt. Wer allerdings mehr Kontrolle benötigt, muss den Quelltext individuell anpassen.

Neue Dimensionen

Egal ob es um eindrucksvolle Produktpräsentation oder nüchterne Konstruktionszeichnungen geht: Die dritte Dimension bietet einen deutlichen Zugewinn an Information. Dank des kostenlosen Adobe Reader ist sichergestellt, dass so gut wie jeder Computerbenutzer die Dateien öffnen kann. Die Linux-Werkzeuge zum Erstellen von 3D-PDFs sind alle noch recht neu, es fehlt meist an Paketen und am letzten Schliff. So ist es zum Beispiel noch nicht möglich, vordefinierte Ansichten in das U3D zu schreiben. Auch der Komfort wäre besser, wenn zum Beispiel Jreality mit der Itext-Library fertige PDFs erstellen könnte.

Version 9 des Adobe Reader wird eine neue U3D-Version und ein weiteres 3D-Format – PRC – unterstützen. Beide Formate kennen die im CAD-Bereicht üblichen NURBS-Geometrien, PRC-Dateien dürfen sogar über die reine Anzeige hinausgehende 3D-Daten enthalten, die sich in CAD-Systemen weiterverwenden lassen. Orest Shardt arbeitet daran, das PRC-Format für sein Visualisierungswerkzeug Asymptote [17] einzubinden. (pkr)

Infos

[1] U3D-Referenzimplementation: [http://sourceforge.net/projects/u3d]

[2] Jreality: [http://www3.math.tu-berlin.de/Jreality/]

[3] Latex-Style Movie: [http://www.ctan.org/tex-archive/macros/Latex/contrib/movie15/]

[4] Itext: [http://www.lowagie.com/Itext]

[5] Peter Kreußel, “PDF statt Flash”: Linux-Magazin 07/08, S. 107

[6] Kaon: [http://www.kaon.com/3DPDF.html]

[7] Acrobat User Forum: [http://www.acronaut.de]

[8] U3D-Standard: [http://www.ecma-international.org/publications/standards/Ecma-363.htm]

[9] Math GL: [http://mathgl.sourceforge.net]

[10] UDAV: [http://udav.sourceforge.net]

[11] Meshlab: [http://Meshlab.sourceforge.net]

[12] IDTF-Konverter-Patch: [ftp://linux-magazin.de/pub/magazin/2008/09/3D_PDF]

[13] Jogl: [https://jogl.dev.java.net]

[14] Stefan Lagotzki, Peter Kreußel, “PDF-Präsentationen mit Impress, Scribus und Latex”: Linux-Magazin 07/08, S. 62

[15] Itext-U3D-Beispiel: [http://www.1t3xt.com/downloads/source/?page=code&id=771]

[16] Itext-Toolbox: [http://Itexttoolbox.sourceforge.net]

[17] Asymptote: [http://asymptote.sourceforge.net]

Der Autor

Carsten Zerbst lebt und arbeitet in Hamburg. Seit er 1991 auf Linux stieß, ist Tcl/Tk die Skriptsprache seiner Wahl. Inzwischen arbeitet er im Bereich der Produktdatenverwaltung bei einem großen Dienstleister.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben