July 27, 2008

3D/Flash

3D in Flash had remained in relative obscurity until last year, because Actionscript was just not fast enough to power more than some bland, unimpressive 3D-scenes. However, with the advent of AS3, Flash made a major leap. Around February 2008, the three most ubiquitous open-source 3D-engines Papervision, Away3D and Sandy3D published their recent installments, which lead to an explosion in the usage of 3D in Flash. For Coobico, I made an in-depth assessment of these three engines shortly thereafter, to decide which one would be most suitable to our creative vision and our production pipeline from 3D to Flash.

Sandy3D is the oldest of the frameworks, one of its branches is even available for AS2. Papervision, being a bit younger, was available in its effects- and “Great White"-branches up until now, but it was announced that both branches will be merged into Great White shortly. Away3D originally was a Papervision-derivative, but made some impressive improvements on its own after breaking with Papervision.

In fact, Away3D offers one of the most powerful packages of the three: it comes with a lot of features, shaders and the most different types of parsers (notably an .obj-parser), and does a very good job with z-sorting. However, I found various in-depth tasks (like re-assigning textures on the fly) a bit counter-intuitive to me. Talking about textures, phong-shading of rectangular shapes can lead to funny results, due to triangulation issues (i.e. one polygon of a shape is shaded while the other one stays unshaded). The biggest let-down of Away3D might be the lack of documentation (as usual). By the time I was checking it out, it was hard to find any documentation for any of the in-depth features--I finally decided against Away3D, cause there was not enough time to rummage through tons of undocumented classes, just to find out what they might actually be doing. Please notice though, that this is already a few months ago: if documentation of Away3D has improved in the meantime, I would highly recommend it, if you want to get into 3D.

Papervision, even though having earned a good reputation with a large community of developers, was a bit of a let-down to me in the end. It was lacking a few of the standard-features of the other two competitors, namely native support of 3D-sound and 2D-sprites. Phong-shading had the same problems as Away3D. Again, this was a few months ago, and I didn’t checked back in the meantime. It might very well be that PV3D has already implemented more features in the meantime.

Sandy, last but not least, is not as hyped as Away and PV3D, but its thorough set of features and rendering-capabilities is on par with Away3D (even though it admittedly needs to improve its z-sorting). All of its packages are very well documented, with quite a few tutorials available, because this engine is around just for such a long time already. Maybe this is also a reason why I felt that understanding Sandy was most easy and intuitive. Then there is a neat feature to turn down the quality of shapes from triangular to rectangular, which eliminates shading-artefacts of boxes, very important for Coobico.

Ultimately, I decided that Coobico would be developed with Sandy, because it felt most compatible. There are other solutions like Sharikura, which seemingly encompasses all other engines, but which is not yet publicly available, and Alternativa, a commercial solution, which yet has to prove if it can handle very large scenes with animations.


3D/Flash

Bis ins letzte Jahr spielte 3D in Flash eine eher untergeordnete Rolle, da Actionscript 2 einfach nicht schnell genug war, um mehr als kleine, unspektakuläre 3D-Szenen zu rendern. Dies hat sich aber mit AS3 komplett gewandelt, und führte dazu, daß im Februar die aktuellen Releases der drei am weitest-verbreiteten 3D Open-Source-Engines Papervision, Away3D und Sandy3D veröffentlicht wurden—was sehr zur Verbreitung von Flash-basierten 3D-Anwendungen führte. Ich habe kurz danach die drei Engines ausprobiert, um herauszufinden, welche für Coobico am ehesten kompatibel ist.

Sandy3D ist das älteste der drei Frameworks, eines der Releases ist sogar noch in AS2 erhältlich. Papervision ist ein wenig jünger und war bislang in zwei Versionen verfügbar (Effect-Branch und Great White), diese sollen aber demnächst zu einer Version zusammengeführt werden. Away3D ist ein Papervision-Derivat, hat aber seit seiner Abspaltung von PV3D sehr beeindruckende Fortschritte gemacht.

Genau genommen bietet Away3D mit die mächtigsten Bibliotheken, hat eine Menge verschiedener Shader und Parser (vor allem ein .Obj-Parser) im Angebot. Das Framework macht auch eine sehr gute Figur beim Z-Sorting, ein derzeitiges Problemfeld der Engines. Trotzdem empfand ich tieferliegenden Routinen als eher unintuitiv (z.B. das dynamische Verändern von Texturen). Zum Thema Texturen: sowohl bei Away als auch bei PV3D gibt es einige Darstellungsartefakte beim Phong-Shading von rechteckigen Körpern, wohl ein Problem der Triangulation, bei der ein Polygon einer Fläche geshadet und das andere ungeshadet dargestellt wird. Ich habe mich schließlich gegen Away3D entschieden, weil weite Teile der Engine (wie bei den meisten Flash-Frameworks) unkommentiert waren. Es ist einfach kontra-produktiv, wenn man sich durch zahlreiche Klassen durchwühlen muss, um ihren Sinn und Zweck zu ergründen. Aber wie gesagt, das liegt nun schon einige Monate zurück, ich kann hier nichts dazu sagen, ob sich die Dokumentation von Away3D mittlerweile verbessert hat. In diesem Fall würde ich Away3D wärmstens empfehlen.

Papervision hat bereits einen guten Ruf bei einer großen Entwicklergemeinde. Ich fand aber, daß PV3D insgesamt weniger Features bietet als seine Konkurrenten, z.B. den Einsatz von 3D-Sounds und 2D-Sprites. Das Phong-Shading hat dieselben Probleme wie Away3D. Auch hier noch einmal die Anmerkung, daß sich die Situation in den letzten Monaten vielleicht bereits verändert hat.

Zum Thema Sandy3D scheint es nicht soviel Hype im Internet zu geben, obwohl Sandy es meiner Meinung nach problemlos mit Away3D aufnehmen kann, sei es nun bei der breiten Menge seiner Features, als auch bei der Geschwindigkeit seiner Rendering-Engine—Sandy muß allerdings zugegebenerweise noch seine Hausaufgaben im Bereich Z-Sorting machen. Alle Packages sind sehr gut dokumentiert und es gibt eine große Anzahl von Tutorials, die auf alle wichtigen Punkte eingehen (vermutlich weil es Sandy bereits so lange gibt). Vielleicht auch ein Grund, warum ich den Einstieg in Sandy deutlich intuitiver fand als bei den Konkurrenten. Sandy bietet zudem ein für Coobico sehr nützliches Feature: durch das Drosseln der Polygon-Qualität von dreieckig zu rechteckig lassen sich Darstellungsartefakte beim Shading rechteckiger Körper unterdrücken.

Zu guter letzt habe ich mich dafür entschieden, daß die Entwicklung von Coobico auf Sandy basieren soll, die Engine erschien am kompatibelsten mit unserem bisherigen Code und unserer Produktions-Pipeline.

Es gibt natürlich auch noch weitere 3D-Frameworks, diese Liste ist nicht erschöpfend—da wäre z.B. Sharikura zu nennen, eine Lösung, die alle anderen in den Schatten zu stellen scheint, z.Zt. aber leider noch nicht öffentlich zugängig ist. Und dann wäre da noch Alternativa, ein kommerzielles Produkt, das sehr beeindruckend wirkt, aber bislang noch nicht bewiesen hat, wie gut es sehr große Szenen und Animationen handhaben kann.

:) <- Lutz