Seite 1 von 1

[Projekt] Weltenmaschine II

Verfasst: 10.01.2014, 12:11
von dronus
Hallo!

Ich hab die 'Weihnachtsferien' genutzt, und weil's so gut kommt, den "Weltenmotor" von Vorne begonnen. Das war http://zfx.info/viewtopic.php?f=10&t=54 ... eltenmotor, eine prozedurale Rendererengine, bei dem der komplette Content parametrisiert im Code steckt.

Die Funktionsfülle vom alten Teil hab ich natürlich nicht so schnell wieder eingeholt, dafür ist die Technik jetzt deutlich solider. Ich habe jetzt C++ statt Java verwendet, und arbeite aggressiv auf dem Stack. In der alten Version hatte ich große Probleme mit der Verwaltung großer Zahlen vernetzter Objekte, der Garbage Collector läuft da schnell heiss.. Nun berechne ich einzelne Werte lieber mehrmals, anstatt sie für spätere Verwendung aufzubewahren. Dadurch ist die Vernetzung der Objekte größtenteils beseitigt, und sie können hierarchisch durch Rekursion auf dem Stack verwaltet werden.

Erst bei einer endgültigen Auswertung von Objekten, zum Beispiel Geometrie-Rendering, werden Daten in den Heap gefüllt. Dort liegen sie dann in großen schlichten Containern, z.B. große float-Buffer mit Vertex-Daten. Diese Container werden im Moment durch normale STL-Container realisiert, der Allozierungs-Overhead ist im Moment so klein dass das erstmal so bleiben kann.

Im Idealfall halten diese Buffer einige Sekunden, z.B. wenn sie Geometrie enthalten die sich nicht groß beweget und ausreichend detailiert ist. Dafür werden ein paar Metadaten gespeichert, zum Beispiel die verwendete Kamera-Transformation, so kann man die Differenz zur aktuellen Kamera-Transformation berechnen und die Daten auch bei Kamerabewegung wiederverwenden, bis sie dann z.B. durch unpassenden Detailgrad oder Verlassen der Sicht unbrauchbar werden.

Im Moment kann ich damit bei langsamen Kamerabewegungen spieletaugliche Framerates erreichen bei einem akzeptablen Detailgrad. Bei schnellen Bewegungen, bzw. wenn ein beliebiger Ausschnitt zum ersten Mal gerendert wird, fällt es im Moment auf wenige FPS. Bei reduzierten Detailgrad a la Minecraft ist das auch in Echtzeit möglich.
Weltenmaschine II: Ein paar Häuser mit Bäumen und Vieh
Weltenmaschine II: Ein paar Häuser mit Bäumen und Vieh
Ich dachte, ich poste das jetzt mal um mich motivieren zu lassen auch nach den Ferien daran zu Arbeiten...

Re: [Projekt] Weltenmaschine II

Verfasst: 10.01.2014, 13:40
von xq
Wow ziemlich cool! Das Terrain sieht mir irgendwie nach Fraktalen aus, liege ich da richtig?
Wie viele Parameter hat denn dein Welt-Generator so? Würde mich interessieren, wie unterschiedlich man die Welt erzeugen lassen kann.

Grüße
Felix

Re: [Projekt] Weltenmaschine II

Verfasst: 10.01.2014, 14:30
von dronus
Das Terrain wird im Moment mit ziemlich simpler zufälliger Unterteilung erzeugt, also ein Pseudo-Zufalls-Fraktal. Allerdings kann man da relativ einfach Einflussfaktoren hinzufügen, so dass realistische geologische Sachen passieren. In der alten Version gab es schon mehr oder weniger Ebenen, Täler und Berge.

Was die Parameter angeht, da ist viel Spielraum, der allerdings in Zukunft automatisch genutzt werden soll. Also die Viecher z.B. werden dann in sehr verschiedenen Formen auftauchen, mit z.B. zwischen keinem und 100 Beinen in realistischer Verteilung. Genauso Häuser, Wetter, Gesteinsarten usw. Letztlich ist dann sehr vieles möglich, es passiert nur unterschiedlich wahrscheinlich. Da das Weltall aber groß ist, kann man alles mögliche seltene auch irgendwo finden. Wenn man also eine bestimmte Szene gestalten möchte, hat man mehrere Möglichkeiten: Man kann alle Parameter im Code tunen bis es lokal den Wünschen einigermaßen enstpricht. Oder man kann eine Stelle im Universum suchen, an der es einem gefällt. Später wird es noch eine Parameter-Überlagerungsschicht geben, mit der man Parameter lokal von den errechneten abweichen lassen kann. Damit kann die Welt dann interaktiv modifizierbar werden, was für Spiele eine tolle Sache ist denke ich. Im Moment ist alles ziemlich statisch, bald ist dann alles auto-dynamisch, also die Welt ändert sich mit der Zeit. Mit der Überlagerung wird es dann aber interaktiv, was sich bisher ausschliesslich auf die Kameraposition und Eingabe der Startzeit beschränkt.