Ich bin Daniel, Informatikstudent, und werde die Nutzung von 3D-Figuren in Visionaire implementieren. Das ganze läuft über ein Praktikum der TU Wien, das heißt ich bin an einen gewissen Zeitrahmen gebunden und muss den Aufwand so einteilen, dass ich bis Ende Januar fertig bin. Natürlich kann und will ich auch danach noch weiterarbeiten, weil es einige Dinge gibt, die ich während des Praktikums nicht in Angriff nehmen kann. Ich hatte schon einen Plan mit Arbeitspaketen erarbeitet, aber wie es der Zufall so will, ist mir gestern kurz nach der Fertigstellung der PC abgeraucht... Deshalb hier nur eine grobe Zusammenfassung, was geplant ist und in welcher Reihenfolge. Zunächst aber einiges Grundsätzliches:
Es gibt mehrere Möglichkeiten, 3D-Objekte im 2D-Raum darzustellen. Die vermutlich naheliegendste ist, einen unsichtbaren 3D-Raum über den 2D-Raum zu legen, in dem sich die 3D-Figuren bewegen. So ist es z.B. in Wintermute gelöst, hat aber einige gravierende Nachteile: 3D-Raum und Kamera müssen über mehrere Parameter so sauber über den 2D-Raum gelegt werden, dass nicht auffällt, dass zwei Räume übereinander liegen (wenn z.B. eine 3D-Figur einen Weg Richtung Bildhintergrund entlangläuft, darf sie nicht irgendwann in den Boden oder über den Horizont hinaus laufen). Dazu kommt, dass in einem separaten 3D-Raum die Verdeckungsinformationen der 2D-Szenerie nicht mehr zur Verfügung stehen, da diese keine echte Tiefeninformation enthalten. Das führt dazu, dass man in Wintermute - zumindest in dem öffentlichen 3D-Beispiel - die komplette Szene ebenfalls in den 3D-Raum laden muss. Damit hat man im eigentlichen Sinn kein 2D-Spiel mehr, sondern ein 3D-Spiel mit fixer Kamera. Der Sinn des 2D-Adventures ist aber meiner Meinung nach gerade, auf die Scherereien mit 3D Verzichten zu können.
Die Möglichkeit, die ich umsetzen möchte, wird deshalb keinen sichtbaren 3D-Raum beinhalten, sondern jede 3D-Figur in einem eigenen, separaten, unsichtbaren 3D-Raum in eine Textur rendern, die dann einer 2D-Figur zugewiesen wird. 3D-Personen sind also nur geringfügig erweiterte 2D-Personen, wobei für Aussehen und Animationen nicht einzelne Bildsequenzen geladen werden, sondern ein 3D-Model sowie dessen Animationen. Es ändert sich dadurch praktisch nichts, nur dass Animationen nur noch für eine einzige Richtung nötig sind. Innerhalb des Spiels gibt es durch diese Herangehensweise keinen Unterschied zwischen 2D- und 3D-Figuren, keine Verdeckungsprobleme und keine Umstellungen für den User.
Hier also meine Arbeitspakete, nach Wichtigkeit sortiert:
- Grundgerüst: Das Ganze muss natürlich erst mal rudimentär funktionieren, also 3D-Animation -> Textur -> Figur -> Spiel - Collada-Import: Collada wird das primäre Format sein, um das ich mich kümmere. Der Grund dafür ist, dass es eine offene Spezifikation und freie Bibliotheken zum Lesen dafür gibt. - Licht und Kamera: Zusätzlich zu den Tabs in der Ansicht "Personen" soll es noch Tabs für Beleuchtung und Kameraeinstellungen für 3D-Figuren geben. Zunächst sollen grundlegende Parameter verändert werden können, darunter Lichtfarbe und Intensität sowie Kamerablickpunkt und horizontale Rotation um den Blickpunkt (nach unten oder oben Schwenken, z.B. für die Bewegung auf Übersichtskarten von schräg oben). - Toon-Shading: Soll ebenfalls in den Licht-Eigenschaften einstellbar sein, dazu die Parameter Linienstärke, Linienfarbe und Anzahl der Farbabstufungen. - Blob-Shadows: Einfache und schnell zu berechnende Schatten. - Andere Datenformate: Die Bibliothek, die wir zum Einlesen verwenden wollen, heißt Assimp. Sie unterstützt viele verschiedene Formate (http://assimp.sourceforge.net/main_features_formats.html), jedoch nicht das proprietäre FBX. FBX lässt sich nur über einen Loader des FBX SDK von Autodesk importieren, was Visionaire natürlich in gewisser Weise abhängig machen würde. Das wird also einer der letzten Punkte sein, mit denen ich meine Zeit verbringe.
Darüber hinaus könnte man sich überlegen, danach auch noch andere Schattentypen zu implementieren. Das Problem dabei ist, Schatten auf andere (2D)-Objekte zu werfen. Wintermute z.B. bietet diese Möglichkeit, aber wieder mit dem Workaround, die komplette Szene in 3D mitzuliefern und die Schattenberechnung im 3D-Raum zu machen.
Wenn es Fragen und Anregungen gibt, meldet euch gerne bei mir.
Viele Grüße
Daniel