#

Kaffee und 3D – Die Entscheidung

Nachdem ich jetzt einige Zeit durch die Java 3D Welt gegoogelt bin, habe ich mich letzten Endes für eine API zum Ausprobieren und Herumspielen entschieden, was jedoch nicht sehr einfach war.

Wie bereits in meinem Post Kaffee und 3D gibt es durchaus viel Auswahl in Sachen Java und 3D. Die Communities sind sehr stark in Bewegung.

Zuerst musste ich mich dafür entscheiden, ob ich eine Low-Level API, wie JOGL und LWJGL, oder eine High-Level API benutze. Der Unterschied sieht in etwa wie folgt aus:

OpenGL (zu der JOGL und LWJGL einfach 1:1 Bindings zur Verfügung stellen,) ist komplexer hand zu haben, als man auf den ersten Blick denkt. Was Assembler oder Bytecode für die Programmiersprachen sind, das ist OpenGL für die 3D Welt. OpenGL Funktionen arbeiten primär mit der 3D-Primitiven Dreieck. Dennoch unterstützt OpenGL einige High-Level Funktionen, welche auch von den Grafikbeschleunigern unterstützt werden: Texture-Mapping in verschiedenen komplexen Varianten (u. a. MIP Mapping, Multitexturing etc.). Genauso wie Deepth- oder Z-Buffering, Shading etc. Dennoch gibt es in OpenGL per se keine direkte Unterstützung für Effekte, wie z. B. Schatten. Möchte man also Schatten in seiner 3D-Welt haben, so muss man selber Algorithmen schreiben. Durch die Low-Level Funktionalität, mit der man durch OpenGL quasi die GPU fast direkt programmieren kann, ist sie perfekt geeignet, um die eigene Rendering-Engine zu optimieren. Zum Herumspielen ist dies jedoch viel zu kompliziert. Daher habe ich mich für eine High-Level API entschieden.

Die Liste der in Frage kommenden High-Level APIs war noch größer: Java3D, Xith, Espresso3D und jMonkeyEngine.

Da Java3D als die Schnellste gilt, wollte ich zuerst diese benutzen und habe mir etwas Literatur dazu durchgelesen, von der es reichlich gibt: Das Sun Tutorial (meiner Meinung nach das Beste), Java3D von Selman (bei Manning, welches nach meiner Meinung enttäuschenderweise nur eine ausführliche Javadoc Behandlung ist. Da heisst es z. B. im Kapitel unter Shadows in etwa: Schatten sind zu komplex und können in Echtzeit 3D Anwendungen nicht benutzt werden, sie sind dem Raytracing vorbehalten…) oder dem ganz gut gelungenen „Killer Game Programming“ von Davison, zu dem eine komplette freie Version online verfügbar ist.
Im Ganzen sehr viel Info, ABER: Java3D unterstützt nur primär Funktionalitäten, die durch OpenGL abgedeckt werden, und dazu gehören Effekte wie Schatten, Stoffkleidung oder Partikelsysteme nicht dazu. Ich konnte auch keine Add-Ons oder Tutorials finden, in denen Beispiele für gute Schatten vorhanden sind. Lediglich ein ganz simpler Schatteneffekt wird beschrieben.
Damit kam Java3D trotz bester Performan für mich vorerst nicht in Frage.

Xith’s API ist, wie die von Java3D, auf einen sehr übersichtlichen und OO-orientierten Szenengraphen basiert. Sehr viele optische Effekte, wie Schatten, Shademapping (ähnlich einer Textur, die jedoch für jeden Pixel eine Reflektions- bzw. Helligkeitseigenschaft definiert) etc. werden unterstützt. Nach dem Verwerfen der Java3D API wollte ich es mit dieser API versuchen und las mich durch das Forum. Dabei stellte ich zwei wichtige Dinge fest:
1. Nur wenige Tutorials und Beispiele
2. In einem Benchmark-Thread stellte sich heraus, das Xith langsamer als die anderen APIs war.

Espresso3D hatte ebenfalls viele Features, aber viel zu wenig Beispiele und Dokumentation.

Meine endgültige Wahl fiel damit auf jMonkeyEngine, die nicht nur eine immense Vielzahl an Features hat, wie 3D Swing, Schatten, Terraincalculation und -rendering, Cloth (Stoffkleidungs) Effekte oder eine Particle Engine, sondern auch sehr viele Tutorials, Beispiele und ein gut besuchtes Forum bietet.

Macht euch also darauf gefasst, dass ich mich in nächster Zeit ein bisschen damit beschäftige und meine Erfahrungen in Form eines Blog-Tutorials posten werde.
Mein Ziel ist es eigentlich nur, eine Art Rollenspiel zu machen, etwa im Stil von Diablo. Nur nicht so komplex, vielleicht auch als SciFi. Mal schauen. Hauptsache ein bisschen rumspielen.

Tags:, , , , , , ,

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.