Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • Private Nachricht senden

11

18.05.2012, 09:53

Ich muss sagen, dass ich nicht so viel von dem Link halte. Ich schreibe ja mittlerweile alleine auch eine Engine. Allerdings so: Ich Teste alles in einem Sample Projekt ohne Engine. Verbessere alle Fehler und dann erst schreibe ich die neue Funktion in die Engine. So habe ich das bisher immer gemacht und es funktioniert gut. Also lass dich nicht an dem Humor hier stören. Ich musste aber auch mal grinsen, als DeKugelschieber das geschrieben hat :)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

12

18.05.2012, 10:56

Tut mir leid ich wollte hier nichts lostreten oder dir zu nahe kommen :)
Aber da du Projekterfahrung hast traue ich dir das durchaus zu (hast du zu Anfang aber nicht geschrieben).

Was dein World-Mesh Problem angeht hab ich meine Idee schon geschrieben. Da es eigentlich unmöglich ist eine hochdetailierte Welt (und die willst du sicher haben) in einem gigantischem Mesh zu rendern zerschneidest du das Mesh. Da du deine 3D Map aus einer Tilemap aufbauen willst hast du die Möglichkeit für jedes Tile ein 3D Model zu erstellen. Die hältst du dann jeweils in einem Buffer. Damit kannst du dann cullen. Auch das geht irgendwann auf die (CPU) Performance so das du gewisse Areale nochmal in größere culling-Boxen zusammenfassen kannst.

Ein Indie Team das sich damit beschäftigt und das offensichtlich gut hin bekommt: http://www.youtube.com/user/WolfireGames
Dabei sieht man in manchen Videos wie die Welt aufgebaut ist (musst du aber selber finden :D).

Nichts für ungut.

13

18.05.2012, 17:45

Ich werd die nächsten Wochen mal ein paar Verfahren ausprobieren und die Performance messen.

14

19.05.2012, 15:24

Zu erst einmal solltest du, Beren, es ignorieren, wenn jemand sagt, du würdest das alleine nicht hinbekommen. Es ist sehr anspruchsvoll, es ist zeitraubend, aber vor allem: es ist machbar! Nur weil vielleicht tausende mit einem solchen Projekt begonnen haben und es nicht geschafft haben, heißt das nicht, dass du es nicht schaffst. Ich selbst habe es mehrfach versucht und anfangs den Fehler gemacht meine Ziele zu hoch zu stecken und verlor dann den Willen. Bei meinem letzten Versuch ein Spiel samt Engine zu entwickeln habe ich es so gemacht und erst mal nur das entwickelt, was ich unbedingt benötige, ohne Schnickschnack, und habe das als Basisversion veröffentlicht. Nun veröffentliche ich im Abstand einiger Wochen Updates für das Spiel und mit jedem Update reift das Spiel und die Engine! Auf diese Weise kommt man schnell an sein Ziel und verliert die Motivation nicht auf lange Sicht! Der aktuelle Stand meines Spiel ist auch noch recht "crappy", aber die nächste Version bringt schon viel Neues und Gutes. Soviel zum Vorgeplänkel! :)

Zu einem eigentlichen "Problem": Wenn du ein Dungeon Crawler machst, würde ich ein Modell verwenden, wie es bei Half-Life angewandt wurde. Die Welt setzt sich zusammen aus einer nicht-leeren Menge von Teil-Levels, die über Zugänge miteinander verbunden sind. Z.B. zwei Häuseretagen, die über den Fahrstuhl verbunden sind, zwei Lagerhallen, die mit einem Lüftungssystem verknüpft sind, zwei Outdoor-Gebiete, die über einen Tunnel verknotet sind, usw. Auf diese Weise kannst du die Welt schon einmal unterteilen. Bei diesen Knotenpunkten ist es hilfreich, wenn an einer Stelle der Benutzer nicht beide Gebiete voll einsehen kann. Diese Stellen kannst du nutzen, um den nächsten Teil der Welt zu laden. So wurde es in Half-Life gemacht und so würde ich es auch persönlich an deiner Stelle machen.

Du kannst das Ganze natürlich noch optimieren, indem beginnst den nächsten Teil-Level zu laden, wenn sich der Spieler ihm nähert. Hast du z.B. einen großen Dungeon mit vielen Gängen, kannst du, wenn der Spieler einen Gang entlang geht, den Teil hinter ihm langsam aus dem Speicher löschen und den Teil vor ihm stückweise laden. Auf diese Weise kannst du ohne Ladezeiten große Levels realisieren.

Generell zu empfehlen sind Raumunterteilungsmechanismen, wie Quad-Tree, Octree, BSP und wie sie alle heißen. Damit kannst du effizient deinen Raum unterteilen, was Pfadsuche für NPCs, Kollisionserkennung, Speichermanagement, etc. sehr effizient gestaltet. Die Verfahren an dieser Stelle zu erklären wäre zu aufwändig, aber du findest davon sehr viel Material. Ich persönlich empfehle allgemein gerne Quad-Trees für 2D-basierte Karten. Ist sehr leicht umzusetzen und kann große Gewinne liefern.

15

19.05.2012, 18:12

Hallo Endgegner85

Danke für Deine Antwort! (Die erste, die wirklich auf meine Fragen eingeht und gute Denkanstösse liefert).

Über Quadtrees habe ich auch schon gelesen, werd mich da, wenn es soweit ist, ein wenig einarbeiten.

Der Crawler soll später mehrere Levels haben, die über Treppen miteinander verbunden sind. Ich plane immer nur das aktuelle Level zu instanziieren.
Ich werde zunächst, wie im vorigen Posting angekündigt, mit meiner entstehenden Engine Performancemessungen durchführen, da ich überhaupt kein Gefühl dafür habe, welche Mengen an Polygonen etc. wie viel Performance fressen.

Mir ging es eigentlich auch nur um grundsätzliche Konzepte, was hat sich bewährt etc. Ich möchte nicht das Rad von neuem erfinden.

Werbeanzeige