Hallo. Ich werde diesen Thread benutzen, um den Fortschritt mit Stranded III zu beschreiben. Alles, was ich tue, wird hier gepostet. Es wird hier später vielleicht auch Videos und Live-Streams geben.
Kommentare? Bitte Stranded III Dev. Blog - Kommentare dafür benutzen.
Engine-Auswahl: Landschaft und Graben
Ich hab ein bisschen mit Ogre3D gespielt und das folgende Manual gefunden: http://dave.uesp.net/wiki/Block_Land (Englisch)
Es erklärt, wie eine Minecraft-ähnliche Landschaft mit Ogre gemacht wird. Das sah ganz cool aus, da solch ein System freies graben erlaubt. Also habe ich die ersten Teile des Manuals versucht:
Sphärische Landschaft ohne Textur:
Landschaft mit zufälligen Texturen:
Das ist ganz cool, doch stellt einige Probleme dar:
Großer Speicherverbrauch
Sieht sehr blockisch aus, und das ist nicht der Stil, den ich in Stranded III haben möchte.
Ich dachte daran, die Landschaft mittels automatischer Platzierung verschiedener glatten Formen an den Ecken, doch das wäre auch keine komplette Lösung. Es würde dennoch unnatürlich und blockisch aussehen. Man würde merken, dass die ganze Welt aus Blöcken besteht.
Eine Alternative wäre eine Voxel-Landschaft. Es gibt auch Versuche davon in Ogre:
http://www.youtube.com/watch?v=-hJkrr5Slv8
Das sieht toll aus, braucht aber auch viel Speicher, falls die Inseln groß sind. Die Spiel-Logik in solch einer Welt zu implementieren, wäre auch ziemlich kompliziert.
Also musste ich die Idee von einer vollmodifizierbarer Landschaft mit riesigen Höhlen und Klippen verwerfen, um größere Inseln machen zu können. Ich werde bei der primitiven, aber schnellen und natürlichen Heightmap-Landschaft bleiben.
Es wird dennoch in solch einer Landschaft möglich sein zu graben, doch wird es unmöglich sein, Sachen wie Höhlen damit zu erschaffen. Man kann nur noch die Höhe der Landschaft ändern. Höhlen könnten dennoch mithilfe auf der Landschaft platzierter Modelle realisiert werden. Es wurde so schon in Stranded II gemacht, und andere Spiele benutzen diese Methode auch (z.B. Skyrim oder Fallout 3).
Hier ist ein anderer Screenshot von der normalen Ogre-Landschaft. Ich habe auch ein paar Palmen aus Stranded II eingefügt.
(Ich habe mich entschieden, Modelle aus Stranded II während der Entwicklung zu benutzen, bis ich neue mache. Ich habe ein Programm gefunden, das von Milkshape 3D nach Ogre exportiert: http://www.ogre3d.org/download/tools, http://downloads.sourceforge.net/ogre/OgreMilkshapeExporter_v1.4.1.msi?download)
Die Ogre-Landschaft ist schon viel besser als die von Stranded II. Sie wirft Schatten (obwohl diese auf dem oberen Screenshot nicht gerade gut sind) und sie erlaubt den Gebrauch verrückter Shader, Bumpmaps und Specular-Maps, welche die Welt wesentlich detailreicher machen.
===============================================================================
Lua hinzugefügt
Glücklicherweise war die Implementierung der Lua-Bibliothek in einem C++ Projekt ganz einfach, da Lua selbst in C geschrieben ist! Also habe ich das alles in wenigen Minuten gemacht und bin in der Lage, Lua-Scripts in Stranded III zu benutzen.
Probleme mit Schatten
Schatten bereiten mir noch Kopfschmerzen. Ich habe damit ein bisschen herumgespielt, aber es gibt einige Probleme:
Erstens: Der Teil der Palmen, der UNTER dem Grund ist (ich habe die Wireframes sichtbar gemacht, um zu zeigen, dass der Stamm nicht am Boden endet) ist auch als Schatten gerendert (rote Kreise). Das sieht wohl merkwürdig und blöd aus. Die einfachste Lösung wäre es, einfach keine Teile von Modellen unter dem Terrain zu platzieren. Doch das führt zu anderen Problemen. Zum Beispiel werden einige Modelle teilweise in der Luft schweben, wenn sie auf steiler Landschaft platziert sind.
Die Blätter von Palmen werden nicht mit Shadowmap gerendert, sondern nur der Stamm. Standardmäßig werfen Ogre3D-Materialien keine Schatten, wenn sie Transparent sind. Das kann im Material-Script ausgeschaltet werden, aber es sieht so aus als ob ich auch "depth_write" einschalten muss, sodass es klappt - allerdings würden dann transparente Formen seltsam aussehen.
Auf diesem Bild könnt ihr sehen, dass die Blätter Schatten werfen, aber wenn ihr auf die Blätter selbst achtet, könnt ihr sehen, dass sie den Grund und die Stämme merkwürdig decken. Das passiert, weil ich depth_write in ihrem Material-Script einschalten musste, sodass sie Schatten werfen.
Hoffentlich gibt es Lösungen für diese Probleme, aber erst einmal schenke ich dem wenig Aufmerksamkeit.
Ich mache weiter bei der Implementierung von der Spiellogik und einen Weg, Objekte, Einheiten und Gegenstände zu definieren und zu skripten. Außerdem muss ich das Richtige im Ogre3D-Szene-Manager wählen/einstellen, sodass alles reibungslos auf großen Inseln läuft.
Übrigens habe ich herausgefunden, dass der Milkshape-Exporter von Ogre3D automatisch von euren Modellen LOD (level of detail)-Versionen mit einer niedrigeren Polygon-Anzahl erstellen kann. Ogre3D benutzt diese Versionen automatisch für Objekte, die weit von der Kamera entfernt sind, um die Anzahl von zu rendernden Polygonen zu reduzieren.
===============================================================================
58 Tage ohne Neuigkeiten - aber keine Sorge, ich arbeite noch an Stranded III. Es gab so lange keine Neuigkeiten, weil ich Unity3D ausprobiert habe und mich entschieden habe zu wechseln. Es wird die Entwicklung von Stranded III beschleunigen, sowie auch cross-platform Kompatibilität und massive Skalierung garantieren. Dadurch wird Stranded III wahrscheinlich auf Low-End- und High-End-Systeme laufen können.
Ich benutze gerade nur die Basic-Version, aber ich werde zu Pro wechseln.
Im Moment arbeite ich am Map-Editor. Hier sind ein paar Bilder:
Heightmap-Import
Man kann Heightmaps wie in Stranded II aus schwarzweißen Bildern importieren. Das Bild zeigt auch das tolle Dateiauswahl-System, das ich gestern und heute implementiert habe. Der Import von Heightmaps funktioniert bereits.
Höhebearbeitung
Natürlich kann man auch die Heightmap im Editor mit einem Pinsel bearbeiten, um die Höhe entsprechend zu vergrößern oder zu verringern. Dies funktioniert zwar bereits, aber es muss dennoch noch etwas optimiert werden.
Landschaftsmalerei
Die Landschaft von Unity3D benutzt sogenannte Splatmaps. Das bedeutet, dass man verschiedene Texturen auf einem Gelände benutzen kann, und nicht eine einfache Colormap wie in Stranded II. Landschaftsmalerei ist noch nicht implementiert.
Mehrere Gelände
Man kann mehr als ein Gelände auf einer Stranded III-Map haben (theoretisch sogar eine unbegrenzte Anzahl davon). Man kann sie frei platzieren und verschiedene Größe dafür wählen. Die maximale Geländegröße ist viel höher als die von Stranded II! Das bedeutet, dass man verdammt große Maps schaffen können wird.
Anmerkung zum Interface
Der Editor benutzt das Standard GUI-System von Unity3D. So sieht der Editor neutral aus, und ich glaube, dass es so gut ist, da man ihn benutzen wird um Maps für Mods zu machen (es ist anzumerken, dass die GUI von Unity3D ohnehin auch modifizierbar ist).
Das InGame-Interface wird aber nicht die GUI von Unity3D benutzen. Es wird meine eigene GUI benutzen (welche aber noch geschrieben werden muss), sodass es wie Stranded aussieht (oder nach etwas anderem, da man es ebenfalls ändern kann).
Nächste Schritte
Landschaftsmalerei implementieren
Definitionsladung implementieren und Platzierung von Objekten/Einheiten/Gegenständen ermöglichen
In-Editor Höhebearbeitung optimieren und erweitern
===============================================================================
Landschaftsmalerei und Bearbeitung von Heightmaps funktionieren nun. Man kann die Größe und Weichheit des Pinsels (und Alpha beim Malen) einstellen. Man kann jetzt auch Texturen hinzufügen, entfernen und bearbeiten. Das Speichern und Laden von Maps funktioniert ebenfalls.
Bearbeitung von Geländetexturen
Ich habe ein hässliches Wesen mit dem Map-Editor gemalt und habe ein paar Bilder gemacht um die Bearbeitung von Geländetexturen zu demonstrieren:
Das habe ich in einer Minute oder so gemalt. Ich habe auch die Heightmap ein bisschen bearbeitet, damit es nach 3D aussieht. Es ist ein Gelände und keine Leinwand. Der weiße Kreis ist der Pinsel, den man für die Bearbeitung der Heightmaps und für das Malen verwendet.
Jetzt bearbeite ich die Tiling-Größe von der ersten Textur (die dunkelgrüne, die als Hintergrund verwendet wird)
Man kann eindeutig den Unterschied in der dunkelgrünen Textur sehen. Sie ist jetzt viel größer:
Das Tauschen von Texturen durch andere funktionert auch. Ich werde die helle Sand-Textur durch eine Textur ersetzen, die eigentlich eine Heightmap ist:
Siehe:
Nächster Schritt:
Definitionsladung implementieren und die Platzierung von Objekten/Einheiten/Gegenständen ermöglichen
edited 9×, last 04.11.12 06:33:04 pm