ParrotEngine 0.2 released

Terrain Rendering

Terrain Rendering

Ab sofort ist die Version 0.2 der 3D Parrot Engine verfügbar! Gegenüber der Vorversion wurde die grundlegende Struktur der Engine überarbeitet, das Renderverfahren flexibler gestaltet und eine Menge Performanceoptimierungen sowie Verbesserungen an der Klassenstruktur vorgenommen.

Dieses Release hat als Hauptaufgabe die Basisinfrastruktur der Engine so zu stabilisieren, dass eine feste Grundlage entsteht auf der alle weiteren Erweiterungen implementiert werden können ohne eine erneute Anpassung der Grundstruktur zu erfordern.

Mit dieser Version kommen nun auch einige Beispielprogramme um den Einstieg in die Programmierung mit der Engine zu erleichtern und auch um die Features zu demonstrieren. Das Build-System wurde komplett überarbeitet so dass nun ein einzelnes build.xml alle Aufgaben erledigen kann: Auch das Starten der Beispielprogramme.

Ein Getting-Started Tutorial zeigt, wie einfach mit der Entwicklung mit der Engine begonnen werden kann. Angefangen von der Einrichtung der Entwicklungsumgebung bis hin zum ersten lauffähigen Programm. Die Downloads und weiteren Links befinden sich wie gehabt auf der Hauptseite der Engine.

RenderState Sortierung und Optimierung

Renderstate Verwaltung

Renderstate Verwaltung

Jedes Objekt einer Szene kann ein oder mehrere Materialien verwenden. Ein Material wird über einen RenderState repräsentiert, welcher neben den üblichen OpenGL Material-Settings auch alle Textureinstellungen, die Shader-Programme, En- und Disabled Eigenschaften, den zu verwendenden Polygon Mode, Blend Operationen und viele weitere Eigenschaften enthält. Bei jedem Wechsel des aktiven RenderStates werden nur die OpenGL calls ausgeführt die wirklich notwendig sind. Es ist außerdem nicht notwendig, dass irgendein Objekt weiß welche Einstellungen in OpenGL vorliegen bevor es sich zeichnet – durch das Setzen seines RenderStates kann es sicher sein, dass genau nur die von ihm geforderten Einstellungen aktiv sind.

Realtime Graphanzeige

Realtime Graphanzeige

Ein Timer-Framework hilft dabei Performance-Engpässe zu erkennen und zu beseitigen.

Shader-Support

Die Engine unterstützt Vertex- und Fragmentshader in GLSL. Die Shader sind in die RenderStates eingebettet und werden so als Teil der Materialien angesehen. Die Shader können deklarativ mit Properties im Programm verknüpft werden. Auf diesem Weg können Parameter an die Shader übergeben werden.

Console

Steuerungskonsole

Steuerungskonsole

Um zur Laufzeit eine gute Kontrolle über die Engine zu haben und auch um auf ein laufendes Programm direkt Einfluss zu nehmen, gibt es die Console. Sie wird mit der Taste “^” eingeblendet und verfügt unter anderem über eine Historie der Eingabezeilen, Scrollback-Funktion und auch eine Eingabehilfe mit der Tabulator-Taste. Es ist für jedes Objekt sehr einfach möglich Variablen oder Kommandos in der Console zu registrieren und diese damit zur Laufzeit aufrufbar zu machen. Die der Console bereitgestellten Variablen sind so implemetiert, dass kein Performanceverlust dadurch entsteht. Es besteht also kein Grund darin, mit den Console-Variablen sparsam umzugehen.

Frustum Culling

Jedes Objekt im Szenenbaum besitzt eine Kugel die es komplett einschließt. Bevor Objekte gezeichnet werden, wird zunächst diese Kugel auf Sichtbarkeit geprüft und erst wenn die Kugel zumindest teilweise den aktiven Frustum berührt, wird das Objekt selbst auch gezeichnet. Das Terrain wird sogar in viele kleine Teile zerlegt und diese werden dann geprüft – allerdings werden die Terrainteile in Blöcke und nicht in Kugeln eingefasst.

Partikeleditor

Der Partikelsystem-Editor

Der Partikelsystem-Editor

Mit dem Partikeleditor kann komfortabel ein Partikelsystem aus mehreren Partikelströmen erzeugt werden. Der Editor unterstützt das Live-Verändern von Texturen, Bewegungseinstellungen, Farbverläufen, Größenänderungen, Schwerkraftverlauf, Emitterstärke und einiges mehr. Die so erzeugten Partikelsysteme können in einer XML-Datei exportiert und dann im eigenen Programm durch die Engine geladen in den Szenenbaum eingehangen werden.

Fontcreator

Der Bitmapfont-Creator

Der Bitmapfont-Creator

Der Fontcreator erzeugt aus TTF-Fonts Schrifttexturen die als Bitmapfonts verwendet werden können.

3D-TTF Text

3D Fonts aus Truetype Fonts

3D Fonts aus Truetype Fonts

Die Engine kann aus TTF-Dateien 3D-Texte erzeugen. Die Qualität der Texte kann beeinflusst werden und somit ist eine Steuerung der Menge an Geometriedaten möglich die erzeugt werden. Die 3D-Texte sind nach ihrer Erstellung normale 3D-Objekte und auch mit Texturkoordinaten versehen, so dass die normalen Objektoperationen damit möglich sind.

Terrain Rendering mit LOD

Terrain Rendering

Terrain Rendering

Aus einer Heightmap in Verbindung mit einer optionalen Textur kann ein Terrain erzeugt werden. Das Terrain wird unterteilt in ein NxN Raster von Blöcken. Diese werden – je nach Entfernung vom Betrachter – in unterschiedlichen Levels-of-Detail (LOD) dargestellt um die Menge an zu zeichnenden Geometriedaten zu optimieren.

Skybox

Einer Szene kann eine Skybox zugewiesen werden – dadurch ist es einfach möglich einer Szene einen Hintergrund zu geben der sich entsprechend bei der Änderung der Blickrichtung so verhält, als würde er eine weite umliegende Welt darstellen.

Input Handling

Über eine Abstraktionsschicht werden die Benutzereingaben gekapselt und vorverarbeitet. Die Eingaben landen in einer Queue die dann an die in dieser Queue registrierte Listener verteilt werden. Diese Listener erhalten dann die Möglichkeit exklusiv die Eingaben zu verarbeiten oder aber auch nur als Proxy zu fungieren und unverändert passieren zu lassen. Durch dieses Verfahren ist es einfach möglich eine Mouselook-Funktion für ein Programm zu implementieren: Einfach einen TurntableRotator instanzieren und in die Queue einhängen – wenn nun für jedes Frame der Frustum des TurntableRotators geholt und in die Engine gesetzt wird kann man sich schon mit der Maus frei umsehen.

Endlicher Automat

Zur Verwaltung von Spielzuständen und deren Wechsel untereinander ist ein endlicher Automat integriert.

Audio-System

Das integrierte Audio-System unterstützt das Abspielen von mehreren gleichzeitigen Sounds im WAV als auch im OGG-Format.

Blender Export Script

Zur Erstellung von 3D-Objekten ist ein Python Export-Skript für Blender bei der Engine dabei. Dieses Skript muss lediglich in den Skript-Path von Blender kopiert werden und ist anschließend in den Export-Modulen von Blender zu finden. Das Skript exportiert alle selektierten Objekte in einzelne XML-Dateien die jeweils den Namen des Objekts tragen. Wenn Texturen zugeordnet sind, werden diese ebenfalls exportiert. Empties (leere Objekte in Blender) landen als Marker Objekte in den exportierten Objektdateien – damit kann von Applikationen über den Namen des Markers auf deren Position und Ausrichtung innerhalb eines Objekts zugegriffen werden. Die Partikel-Demo nutzt dieses Feature zum Beispiel um die Position des Partikelsystems im Holzstapel zu bestimmen.

Schnittpunkt eines Strahls mit einem Terrain

Zur Berechnung des Schnittpunkts eines Strahls mit einem Terrain ist es wichtig die Menge der zu prüfenden Dreiecke zu minimieren, da ein Terrain in der Regel aus sehr vielen Flächen besteht. Ein sehr guter und schneller Weg dies zu erreichen besteht darin, den Weg des Strahls mitzuverfolgen und alle auf dem Weg für einen Schnittpunkt infrage kommenden Dreiecke zu testen.

Continue reading

Feuer-Demo des Partikel-Systems

Feuer mit dem neuen Partikelsystem

Feuer mit dem neuen Partikelsystem

Ich habe eine Webstart-Demo online gestellt die den aktuellen Stand des Partikel-Systems in der Parrot Engine zeigt. Das Bild zeigt ein aus Partikeln bestehendes Feuer.

In der Engine gibt es bereits einen umfangreichen Partikel-Editor der das erstellte System per XML exportieren kann. Diese XML-Datei wird direkt von der Engine verarbeitet und das hierdurch definierte System kann anschließend direkt in den Szene-Graphen eingefügt werden. Das Zeichnen und simulieren des Systems steuert dann alles die Engine ganz automatisch.

Beim nächsten Release wird sowohl der Partikel-Editor schon mit dabei sein als auch diese Feuer-Demo und der Alienshooter. Ich hoffe auch, dass ich dazu kommen werde mit dem nächsten Release einiges an Dokumentation mitzuliefern: Eine Referenzdoku sowie ein “Getting-Started” sind wohl erstmal am dringensten.

Preview-Release des Alien-Shooters!

Das erste Preview-Release meines Alien-Shooters ist raus!

Intro Screenshot

Intro Screenshot

Ihr könnt den Alien Shooter über Java WebStart starten (aktuell defekt, da JOGL Webstart Libraries nicht funktionieren)

Spielinhalt

Das Ziel des Spiels ist es so viele Punkte wie möglich durch das Abschiessen von Aliens zu sammeln. Die Aliens steigen hinter einer Bergkette auf und überqueren das Spielgebiet bevor sie wieder verschwinden. Der Spieler hat während dieser Passage die Möglichkeit die Ufos abzuschiessen.

Zum Schiessen hat der Spieler eine Kanone mit zwei Rohren die jeweils abwechselnd eine Rakete abfeuern können. Raketen fliegen nicht unendlich schnell, so dass man etwas vorhalten sollte um die Ufos auch zu treffen.

Es gibt Extrapunkte wenn mehr als 70% der Schüsse ihr Ziel erreicht haben und wenn alle Ufos eines Levels erledigt wurden.

Das Spiel endet, wenn in einem Level nicht mindestens die geforderte Abschussquote erreicht wurde.

In der aktuellen Preview-Version gibt es derzeit nur eine Sorte Ufos und 5 Level. Die später folgende, fertige Version wird viele verschiedene Feinde, deutlich mehr Level und ggfls. auch Powerups und Sondermissionen beinhalten.

Bedienung

Die zum Spielen notwendigen Tasten werden stets eingeblendet. Außerdem benötigt ihr die Maus um die Kanone zu steuern und zu schiessen.

Während des Spiels kann mit “ESC” pausiert werden.

Fehler gefunden?

Falls irgendetwas nicht funktionieren sollte, dann sendet mir bitte die Datei “alienshooter.log” aus eurem Homeverzeichnis mit einer Beschreibung was ihr gemacht habt, was nicht funktierte und wie sich das geäußert hat.

Die Log-Datei findet ihr unter einem deutschen Windows XP unter C:/Dokumente und Einstellungen/BENUTZERNAME. Unter Vista findet ihr den Ordner unter C:/Users/BENUTZERNAME. Bei Vista ist es egal ob ihr eine deutsche oder englische Version benutzt.

Ich freue mich natürlich auch über Anregungen, Anfragen, Kritik, Tipps und alles andere an Feedback!

Viele Grüße und viel Spaß – Stefan

Das Alien Shooter-Spiel nähert sich der Fertigstellung

Die letzten Tage waren vor allem mit der Arbeit an dem 3D-Font erfüllt. Hierzu habe ich die Convert-Funktion von Blender genutzt (Alt-C) um aus einem Font-Objekt ein Mesh zu erzeugen. Nachdem die Faceanzahl über den Decimate-Modifier verringert wurde und der Font per extrudieren in die Tiefe gezogen wurde, habe ich die Vorderseite manuell noch etwas interessanter gestaltet. Das manuelle Löschen der Vorderseite jedes Characters und durch eine manuell erzeugte, mit einer Kante versehenen auszutauschen war eine wahre Fleissarbeit…

Der 3D Font wird in Blender erstellt

Der 3D Font wird in Blender erstellt

Dieser Font kommt nun überall im Spiel zum Einsatz. Der neu erstellte Intro-Screen enthält diesen Font zweimal – jeweils mit einem anderen RenderState. Der Titel des Spiels ist mit einer Textur überzogen deren u/v Koordinaten über einen Fragment-Shader bewegt werden. Der Text unten “Press SPACE to start” entält lediglich einen sehr einfachen Lighting-Shader der einfache Beleuchtungseffekte erzeugt damit der Font räumlicher wirkt.

Screenshot vom Intro Bildschirm

Screenshot vom Intro Bildschirm

  • Die Raketen die der Spieler abfeuern kann haben nun, nach der Optimierung des Partikelsystems auch eine Rauchwolke die sie hinterlassen.
  • Titelmusik ist implementiert (von http://audio.ibeat.org/)
  • Die Ufos haben nun auch einen Explosions-Sound wenn sie getroffen werden
  • Es gibt einen Radar der anzeigt wo gerade Ufos sind – der Spieler muss dann nicht so viel suchen
  • Ein Level des Spiels besteht aus mehreren Angriffswellen – definiert über XML-Dateien. So können einfach neue Levels hinzugefügt werden.

Und es geht weiter….