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

1

05.03.2016, 12:20

GameEngine für Sandbox Games

Hi,
ich brauche mal professionellen Rat.

Ich habe vor ein Sandboxspiel (in C++) zu programmieren in dem man seine kleine Welt komplett nach seinen Vorstellungen gestalten kann.

Habe bereits mit SDL und der Library Oxygine angefangen. Screenshot davon findet ihr im Anhang.
Ich habe testweise eine Map von der Größe 10 x 10 x 100. Jedes Feld ist ein Polygon mit der passenden Textur. Bei den 10.000 Blöcken frisst die Berechnung der Polygons bis zu 100% CPU an meinem Mac. Viel zu viel, für eine viel zu kleine Map. Hinzu würden später auch noch Pathfinding Algorithmen kommen und sonstige Algorithmen wie zum Beispiel Wachstum von Pflanzen, etc.

Könnt ihr mir vllt. eine Engine empfehlen die besser für sowas geeignet ist?
Oder sollte ich lieber anfangen das mit OpenGL zu programmieren? Da würde sich ja VBO für sowas anbieten.

Aber auch für andere Ratschläge um die Map darzustellen, wäre ich dankbar :)
»BieJay« hat folgendes Bild angehängt:
  • Screenshot.png

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

06.03.2016, 02:54

Was machst du denn bisher? Mit "Berechnung" kann vieles gemeint sein.
Wahrscheinlich ist deine Implementierung noch relativ einfach gehalten und du versucht, jeden einzelnen Block auch darzustellen, oder? Andere, vergleichbare Spiele (Minecraft) würden eher so vorgehen, dynamisch Meshs für die sichtbare Oberfläche zu generieren, sodass nicht alles Seiten beim Rendern betrachtet werden müssen.
Vielleicht führst du derzeitig auch noch andere Berechnungen mehrfach aus, wo ein Zwischenspeichern der Ergebnisse ebenfalls zu einer Verbesserung der Performance führen würde.

Viel wichtiger: gibt es ein Frame Limit? Wie viele Frames werden jede Sekunde berechnet? Vielleicht kommt die 100% Auslastung nur dadurch zu Stande, dass dein Spiel mit bspw. 120 FPS, 300 FPS oder mehr läuft, obwohl 60 FPS reichen würden. Ist das der Fall, würde ein Idlen zwischen den Frames (bspw. über VSync gesteuert) schon für eine massive Reduktion der Prozessorauslastung führen. (Und in einem solchen Fall würden sich Optimierungen nicht in der Auslastung bemerkbar machen.)

Zu den Frameworks und Bibliotheken kann ich nicht viel sagen. Ich würde vermuten, dass die bisher verwendeten Bibliotheken bisher ausreichen sollten, wenn denn
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

3

06.03.2016, 13:00

Framelimit liegt bei 60FPS realisiert durch den VSync.

Also ich lese einmal meine Savegamedatei mit den Mapdaten in einen Vector[z][xy].
Wobei z die Ebene ist und xy ein Block auf der Ebene.
Danach berechne ich einmal meine Vertices mit den Texturen und speicher sie in einem Array.
Und anschließend wird mit einer for-Schleife ein Polygon generiert und die entsprechenden Vertices hinzugefügt. Und das Polygon wird dem "viewport" hinzugefügt.

Und das ganze wird exakt nur einmal durchgeführt.
Nur beim Rendern scheint Oxygine immer wieder die Vertices neu zuberechnen. Anstatt sie in einen Zwischenspeicher zu packen.
Da gibt es leider auch keine andere Möglichkeit.

Über nur das zu Rendern was sichtbar ist, habe ich auch schon nachgedacht. So würden ja bei der 10x10x100 Map nur ca. 500 Blöcke gerendert werden. Aber schon bei 500 Blöcken habe ich eine Auslastung von 50%.

Eigentlich ist Oxygine eine schöne Library aber für meine Zwecke ungeeignet.
Im Forum von Oxygine wird empfohlen für sowas OpenGL zu verwenden. Aber ich möchte ungern den Softwarerenderer mit OpenGL mixen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

06.03.2016, 14:04

Software-Rendering ist heutzutage keine vernünftige Lösung mehr. Für Spiele schon gar nicht. Schnapp Dir entweder OpenGL oder eine Bibliothek, die darauf aufsetzt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

06.03.2016, 14:23

Sowas wollte ich hören, danke :)

6

08.03.2016, 06:11

Warum hast dus dann nicht gleich gemacht?
Statt reinem opengl (oder vulkan 8)) kannst es dircauch leichter machen, indem du dir eine grafikengine wie ogre3d besorgt, welche bereits performant und voll mit nützlichen dingen ist.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

7

08.03.2016, 15:50

Auch wenn du eine Grafikengine nutzt, wirst du für so ein Spiel relativ viel selbst auf Grafikebene anpassen müssen. Die meisten Engines sind auf unveränderliche, endliche Meshes festgelegt. Bei einem Sandbox ist die Welt ja oft unendlich groß und veränderlich und man muss sich was überlegen.

Vielleicht hast du aber auch Glück und für die verwendete Engine hat bereits jemand mal was in diese Richtung gemacht, wovon man sich etwas abschauen könnte.

Hier noch ein Link, der vielleicht ein paar hilfreiche Informationen enthält, wie die generelle Herangehensweise aussehen könnte:
https://sites.google.com/site/letsmakeavoxelengine/home

8

11.03.2016, 01:37

Warum hast dus dann nicht gleich gemacht?
Statt reinem opengl (oder vulkan 8)) kannst es dircauch leichter machen, indem du dir eine grafikengine wie ogre3d besorgt, welche bereits performant und voll mit nützlichen dingen ist.


Weil ich nicht wusste wie ich anfangen sollte. Deswegen habe ich mir erstmal ein paar Engines angeguckt und etwas herumgespielt.
Ogre3D bekomm ich beim besten Willen nicht auf meinem Mac zum laufen.

Auch wenn du eine Grafikengine nutzt, wirst du für so ein Spiel relativ viel selbst auf Grafikebene anpassen müssen. Die meisten Engines sind auf unveränderliche, endliche Meshes festgelegt. Bei einem Sandbox ist die Welt ja oft unendlich groß und veränderlich und man muss sich was überlegen.

Vielleicht hast du aber auch Glück und für die verwendete Engine hat bereits jemand mal was in diese Richtung gemacht, wovon man sich etwas abschauen könnte.

Hier noch ein Link, der vielleicht ein paar hilfreiche Informationen enthält, wie die generelle Herangehensweise aussehen könnte:
https://sites.google.com/site/letsmakeavoxelengine/home

Danke für den Link, das werde ich mir mal genauer angucken.

Das ganze Anpassen stört mich nicht mal. Ich freunde mich so langsam mit OpenGL an. Im Vordergrund steht bei mir eigentlich auch nicht die Entwicklung meines eigenen Spiels, sondern eher meine C++ Kenntnisse zu festigen und mich in die Materie Spieleprogrammierung/Rendering usw. einzuarbeiten.
Andere haben Fußball als Hobby und ich programmiere mir lieber Dinge nach meinen Wünschen :D

Wollte mir auch nochmal die OpenGL Superbible bestellen.
Wobei ich da auch noch eine Frage habe:
Gibt es große Unterschiede zwischen OpenGL 3.3 und 4.x ? Mal abgesehen von der Kompatibilität.
Wollte mir nämlich die 5te Auflage holen, die sich mit 3.3 beschäftigt.

9

11.03.2016, 19:10

Auch wenn du eine Grafikengine nutzt, wirst du für so ein Spiel relativ viel selbst auf Grafikebene anpassen müssen. Die meisten Engines sind auf unveränderliche, endliche Meshes festgelegt. Bei einem Sandbox ist die Welt ja oft unendlich groß und veränderlich und man muss sich was überlegen.


Du kannst doch alte Entities einfach aus dem SceneGraph löschen und neue hinzufügen, oder nicht?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Werbeanzeige