Tempelmodelle in der Irrlicht Engine

by Jan Seyler und Nithi Rungtanapirom

Erfahrungsbericht

Hier wollen wir eine Einschätzung unseres Praktikums und kleiner Schwierigkeiten, die sich einem stellen, geben.

Einarbeitung

Irrlicht

Das Einarbeiten in die Irrlicht Engine fiel uns sehr leicht. Wenn man die Tutorials durcharbeitet, bekommt man einen sehr schnellen Zugang zum Umgang mit Irrlicht. Uns fiel das ganze natürlich etwas schwerer, weil wir beide C++ nur rudimentär beherrschten. Trotz allem ist das erste Einarbeiten in Irrlicht sehr einfach. Man hat schnell ein begehbares Terrainmodell auf Basis einer Heightmap erstellt. Danach wird es etwas schwerer. Wenn man sich an die "advanced" Tutorial ranwagt, merkt man schnell den Anstieg des Anspruchs.

GIS-Daten

Bei den GIS-Daten gestaltete sich das ganz doch um einiges schwerer. Zu ihnen war keinerlei Dokumentation oder readme vorhanden. Wir mussten uns also zuerst klar werden, was für Daten wir vor uns hatten und was man damit machen kann. Wir kamen dem ganzen mit Hilfe der Dateiendungen auf die Spur. Danach mussten wir uns im Dschungel aus FreeGIS-Anwendungen eine passende heraussuchen. Dies war schwerer, als man denkt, denn es lesen nicht wirklich viele Programme das ArcGIS Format lesen und geschweige denn verarbeiten können.
Als wir uns dann die Daten endlich anschauen konnten, hatten wir keinen leisen Schimmer, was wir damit machen könnten ;)
Nach einigem intensiven Anwenden einer großen, bekannten Internetsuchmaschine sind wir schließlich auf die Shapelib gekommen. Da die Dokumentation hierzu auch nicht wirklich ausführlich bzw. nicht wirklich leicht verständlich ist, haben wir auch hier noch eine kurze Zeit verweilen müssen. Nach einigen kleineren oder größeren Problemen mit C++ (die nur an unseren Kenntnissen lagen) haben wir es dann geschafft die Daten einzulesen. Dann haben wir mit Hilfe des Whitepapers herausgefunden, dass wir für die Höhen nur Shapefiles des Typs 1 und 3 hatten. D.h. wir hatten in einem Fall NUR Punkte und im anderen Fall Linien, allerdings komplett ohne Höhen. Nun standen wir also vor dem Problem, zweidimensionale Shapefiles für ein dreidimensionales Problem hatten. Dank Thuban wussten wir allerdings schon, dass Höhen vorhanden sein müssen, denn wir konnten Sie auslesen. Wir kamen nach einigen ratlosen Versuchen also darauf die DBF File auszulesen. Dort hatten wir dann die Höhen.
Das nächste Problem war dann aus einigen wenigen Punkten eine Heightmap zu erstellen. Aber das habe ich bereits an anderer Stelle beschrieben.

Wie erkennbar, haben wir hiermit die meiste Zeit verschwenden müssen. Aber nach einiger Lesearbeit und vielem "Probieren geht über Studieren" haben wir es dann doch geschafft.
Das letzte Problem war schließlich die Menge der Daten, da der PC bei 21000 Punkten schon ca 25 Minuten rechnen musste und wenn wir die bessere Abtastrate von Contour.shp ausnutzen wollten, mussten wir 7 h 20 Min auf ein Ergebnis warten. Danach hatten wir eine Heightmap, die 150 MB groß war und somit zuerst bearbeitet werden musst. Aber mit jedem Runterrechnen kommt ein weiterer Datenverlust hinzu.

Konkrete Anwendung von Irrlicht

Die tatsächliche Anwendung von Irrlicht war ebenfalls kompliziert, da wir nicht die herkömmlichen Vorgehensweisen anwenden konnten. Unser Terrain war einfach zu groß und so konnten wir die herkömmlichen Renderingmethoden, die Irrlicht bietet nicht verwenden. Wir mussten also nach einer Lösung suchen, die ein großes Terrain rendern konnte und andererseits nicht zu ressourcenaufwändig war.
Hier stießen wir auf die TlShTerrainSceneNode von arras. Diese ermöglicht es, sehr große Terrains in Irrlicht zu rrealisieren. Hierbei kann man sowohl auf Heightmaps basierende Terrains, randomisierte Terrains oder auf Höhenmatrizen basierende Terrains realisieren.

Eine Dokumentation für die Node ist, außer dem konkreten Thread im Forum nicht vorhanden. Die Community antwortet zwar auf die meisten Fragen sehr schnell, aber es ist nicht gerade einfach sich den Code ohne Anleitung anzueignen. Hierbei ist anzumerken, dass arras für seine Node sehr viele eigene Funktionen geschrieben hat und somit nicht die übliche Irrlicht Notation zu verwenden ist. Nachdem wir einige Header an unsere Wünsche angepasst hatten, war die Node sehr nützlich und recht leicht anzuwenden. Andere Nodes sind, soweit wir es probiert haben, kompatibel zur TlShTerrainSceneNode.


Durch die Menge der Daten und den Rechenaufwand wurde einiges signifikant schwerer, da man bei jeder Änderung, die man probieren wollte, die gesamte Rechenzeit zur Berechnung aller Höhen (auf dem verkleinerten Gebiet noch immer 6 Min für jede Ausührung). Dies kostete sehr viel Zeit. Man kann dies umgehen, indem man einen höheren Faktor zum Verkleinern des Gebiets wählt oder sich für Testzwecke eine Heightmap erstellt und dann nur das Release auf Basis der konkreten Höhenberechnung ausführen lässt.

Abschließender Eindruck

Insgesamt hat das Praktikum sehr viel Spaß gemacht, wir haben viel gelernt, sowohl über C++, als auch über 3D-Grafiken, Engines und Satellitendaten. Es war an manchen Stellen frustrierend, gerade ein Problem, an dem man lange saß, gelöst zu haben und dadurch sofort auf das nächste zu stoßen. Aber das sind genau die Arbeitsschritte an die man sich gewöhnen muss und an denen man das meiste lernt.
Wir hatten am Anfang des Semesters die Wahl zwischen einem Robotikpraktikum und diesem Praktikum. Wir fanden Grafikdesign interessanter und haben uns so für dieses entschieden. Ich muss sagen, nach all den Schwierigkeiten und Problemen, die sich uns stellten, würde ich diese Wahl immer wieder treffen. Es hat einfach Spaß gemacht.

Ich hoffe es ist mir gelungen, diesen Eindruch wenigstens ein wenig mit dieser Homepage wiederzugeben. Und allen, die tatsächlich bis hier her gelesen haben: Dankeschön und meinen ehrlichen Respekt.