Photorealistische Darstellung von CAD-Zeichnungen im DXF-Dateiformat

Diplomarbeit von Thomas Müller

Hintergrund

Viele CAD (Computer Aided Design)-Programme bieten heute neben der eigentlichen Konstruktion auch Möglichkeiten zum Rendern der CAD-Zeichnung. Leistungsfähige Render-Funktionen (wie z.B. Raytracing oder Radiosity) sind aber meist den Programmen der oberen Preisklasse vorbehalten und selbst dann müssen diese oft noch als zusätzliche Tools teuer zugekauft werden. Ideal wäre es, wenn man diese Zeichnungen unabhängig vom CAD-System rendern und sich dann noch in seiner dreidimensionalen Zeichnung (dann allerdings mit einer weniger rechenintensiveren Schattierungsart, z.B. Gouraud Schattierung) virtuell bewegen könnte. Beides soll mit dem im Rahmen dieser Diplomarbeit entwickelten Programm möglich sein. Eine gut vorstellbare Anwendung wäre z.B. die virtuelle Begehung eines als CAD-Zeichnung vorliegenden Hauses oder Gebäudes vor dessen Fertigstellung.
Das von der Firma Autodesk entwickelte DXF (Drawing Interchange Format)-Dateiformat wurde gewählt, da es das zur Zeit verbreitetste Datenaustauschformat für CAD-Programme darstellt und eigentlich jedes solche Programm DXF-Dateien erzeugen kann.

Theoretischer Hintergrund

Es soll ein Programm für Windows 95/NT unter Zuhilfenahme von OpenGL entwickelt werden, das die schnelle grafische Darstellung von im DXF-Dateiformat vorliegenden, dreidimensionalen CAD-Zeichnungen ermöglicht, ohne daß ein CAD-System zur Verfügung stehen muss oder falls das CAD-System keine besonderen Rendering Funktionen anbietet. Zusätzlich soll der Benutzer weitere DXF-Zeichnungen, sowie einzelne Objekte aus DXF-Zeichnungen in die vom Programm erzeugte dreidimensionale Szene einfügen und eine neue Zeichnung im DXF-Dateiformat, die aus den aktuellen Daten generiert wird, schreiben können.
Zur Betrachtung der Szene werden die, von CAD-Programmen bekannten, 6 verschiedenen Standard-Ansichten (vordere-/hintere Ansicht, linke-/rechte Seitenansicht und obere-/untere Ansicht), sowie eine Ansicht aus beliebigen Blickwinkeln (Perspektivische Darstellung) angeboten. Dabei soll für jedes Fenster der Darstellungsmodus gewählt werden können, d.h. ob die jeweilige Ansicht als Gittermodell (mit/ohne Entfernung der verdeckten Linien) oder schattiert (Flat Shading / Gouraud Shading) dargestellt wird.
Neben den in den DXF-Zeichnungen eventuell schon definierten, sollen noch weitere Lichtquellen (Gesamtanzahl <= 8) verschiedenen Typs beliebig in der Szene plaziert und die die Lichtquellen charakterisierenden Parameter, wie z.B. Intensität und Farbe der einzelnen Lichtanteile, beeinflusst werden können.
Insbesondere soll eine virtuelle, nahezu Echtzeit-Bewegung durch die dreidimensionale Szene möglich sein, wobei die Geschwindigkeit der Bewegung natürlich in erheblichem Maß vom Darstellungsmodus, der Rechnerausstattung und besonders der Komplexität der Szene abhängig ist. Detailinformationen über die einzelnen Objekte (z.B. Layer, zu dem das entsprechende Objekt gehört) erhält man dabei durch einfaches Anklicken mit der Maus. Die auch geplante Unterstützung des Ein- bzw. Ausschaltens der einzelnen, in den DXF-Zeichnungen definierten Layern, hat neben dem eigentlichem Zweck, nur bestimmte Teile der Zeichnung zu betrachten, auch den Sinn, die Geschwindigkeit während der Bewegung zu erhöhen.
Weiterhin soll der Export der Daten ins POV-Ray-Dateiformat möglich sein, um so auf die aktuelle dreidimensionale Szene neben den von OpenGL unterstützten Schattierungsarten auch die Verfahren Raytracing oder Radiosity anwenden zu können.

Realisierung

Um DXF-Zeichnungen darstellen zu können müssen dessen Daten so aufbereitet werden, daß eine Konvertierung der in der Zeichnung benutzten Elemente (sogenannte Entities, z.B Circle, Solid und Polyline) in einzelne Polygone möglich wird. Dies bedeutet, das zuerst die einem bestimmten Element zugehörigen Eigenschaften wie beispielsweise Skalierung, Rotationswinkel oder auch die Elementbreite, Elementhöhe und die zugehörige Extrusionsrichtung aus der DXF-Datei gelesen werden. Mit Hilfe dieser und noch anderer Daten erfolgt dann die Berechnung der Welt-Koordinaten der verschiedenen Eckpunkte des entstehenden Objektes, wodurch schließlich die Generierung der einzelnen Polygone möglich wird.
Beispielsweise wird aus einer Polyline mit 2 Punkten und einer gegebenen Objektbreite > 0 und Objekthöhe > 0 ein Objekt mit insgesamt 6 4-Punkt Polygonen bzw. 12 3-Punkt Polygonen (Dreiecke).
Zusätzlich müssen für alle Polygone Normalenvektoren bestimmt werden, dessen Berechnungsart von der verwendeten Schattierung abhängig ist. Erst dadurch werden die einzelnen Polygone korrekt schattiert.
Die Berechnung der Polygone erfolgt natürlich nur einmal und während der Bewegung durch die Szene werden diese dann nur noch ausgegeben, sofern der jeweilige Layer in der CAD-Zeichnung, auf dem die zugehörigen Polygone oder besser gesagt die durch diese erzeugten Objekte angeordnet sind, eingeschaltet ist.

Entwicklungsstand

Aus dem DXF-Dateiformat werden bisher die folgenden Elemente unterstützt: 3DFace, Solid, Trace, Line, Arc, Circle, Point, Insert und Polyline (inklusive 3D-Meshes und Polyface-Meshes). Leider ist die Darstellung von einigen DXF-Zeichnungen noch nicht so korrekt wie die der Beispielzeichnung, z.B. befinden sich einige Objekte einfach nicht an der Position, an der sie eigentlich erscheinen sollten. An der Lösung dieses Problems arbeite ich noch und ich hoffe so bald wie möglich den/die Fehler zu finden.
Zusätzlich sind u. a. noch folgende Dinge zu implementieren:

  • Generieren einer neuen Zeichnung, nachdem einzelne Objekte oder auch komplette Zeichnungen in die aktuelle Szene importiert wurden
  • "Korrekte" Berechnung der Normalenvektoren für die Gouraud-Schattierung
  • Unterstützung von Layern
  • Entwerfen von diversen Dialogen für Programmeinstellungen
  • Eventuell eine Umstellung des Programms von bisher 4-Punkt Polygonen auf ausschließlich 3-Punkt Polygone (Dreiecke), da bei diesen garantiert ist, daß alle Eckpunkte in einer Ebene liegen, was bei den 4-Punkt Polygonen nicht unbedingt der Fall sein muss bessere Schattierung. Nachteil: höherer Speicherbedarf
  • Debugging

 

Zur Demonstration wird eine DXF-Zeichnung verwendet, die einen Raum mit verschiedenen Einrichtungsgegenständen darstellt. Folgende Bilder, die bis auf das letzte aus meinem Programm stammen, zeigen diese Zeichnung nun aus mehreren Blickwinkeln und in verschiedenen Darstellungsarten. Das letzte Bild ist eine von dem Programm POV-Ray mittels Raytracing-Verfahren gerenderte Ansicht, nachdem die Daten der Szene (u.a. Polygone, Kamera, Lichtquellen) in eine Datei im POV-Ray-Dateiformat exportiert wurden.

Glossar

Flat Schattierung

Die Flat Schattierung ist die einfachste Schattierungsart. Für jedes Polygon wird nur ein Normalenvektor berechnet, wodurch alle Pixel im Polygon die gleiche Farbe haben.

Gouraud Schattierung

Bei dieser Schattierungsart werden Normalenvektoren für jeden einzelnen Eckpunkt des Polygons berechnet, wodurch sich schon qualitativ bessere Ergebnisse erzielen lassen. In der Praxis geschieht die Berechnung eines Normalenvektors durch Einbeziehung der Normalenvektoren aller an den entsprechenden Eckpunkt angrenzenden Polygone.

Layer

Im CAD-Bereich dienen Layer zur Gruppierung von Objekten und dessen gemeinsamer Manipulation. Man kann sie sich vorstellen als Zeichnungsebenen, die zusammen die komplette Zeichnung ergeben (ebenso wie ein technischer Zeichner Objektgruppen auf einzelnen transparenten Bögen zeichnet und diese dann genau übereinanderlegt).

OpenGL

OpenGL ist eine Sammlung von 3D-Grafikroutinen, die von der Firma Silicon Graphics entwickelt wurde und besonders leistungsfähig bei der Darstellung dreidimensionaler Szenen ist. Mögliche Schattierungsarten sind hier die Flat- und die Gouraud Schattierung.

POV-Ray

POV-Ray ist ein sehr leistungfähiges, kostenloses Rendering Programm, das neben Raytracing auch ein Radiosity-Verfahren anbietet.

Radiosity

Radiosity ist ebenso wie Raytracing ein sehr rechenintensives Verfahren zur Erzeugung photorealistischer Bilder. Der Vorteil gegenüber Raytracing ist die Berücksichtigung der gegenseitigen indirekten Beleuchtung der einzelnen Objekte, der Nachteil die Nichtunterstützung von spiegelnden Oberflächen.

Raytracing

Eine Möglichkeit zur Erzeugung photorealistischer Bilder ist der Einsatz des Raytracing Verfahrens. Dies ist eine Technik, die die Interaktion zwischen Licht, dreidimensionalen Objekten, deren Oberflächeneigenschaften und dem Beobachter modelliert.

Für weitere Informationen bitte E-Mail an muelli@uni-paderborn.de.