[Projekt] Weltenmaschine II

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

[Projekt] Weltenmaschine II

Beitrag 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...
Benutzeravatar
xq
Establishment
Beiträge: 1582
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] Weltenmaschine II

Beitrag 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
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: [Projekt] Weltenmaschine II

Beitrag 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.
Antworten