große Raumschlachten berechnen (5000 Schiffe)

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Ofenrohr

Betreff: große Raumschlachten berechnen (5000 Schiffe)

BeitragFr, Jun 25, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo

ich möchte große 3d Raumschlachten berechnen.

allerdings weis ich nicht wie ich das mit der ki hinkriegen soll. Question
eine lösund ist vielleicht die eventbasierte berechnung,
weil das bei der größe nicht mit schleifen zu lösen ist.
aber wie?????

hope 4 help

Gossi

BeitragFr, Jun 25, 2004 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Events kann man ohne Schleifen nicht herbeizwingen. Man ist heute noch nichtmal soweit, eine einzige Zahl aus einer Liste zu suchen, ohne die gesamte Liste durchzuscrollen. Sind 5000 Schiffe für 3D nicht ein bisschen viel, selbst wenn nur die gezeigt werden, die man sehen kann? Ich würde jeweils 10 Schiffe zu einem Objekt zusammenfügen. Diese Schiffe tun immer ungefähr das gleiche, oder zumindest als Gruppe. Ich glaube, dass du damit ziemlich Ressourcen sparen kannst. Aber 5000 ist trotzdem vorn und hinten zuviel. Also ich meine nicht, dass du pro Objekt 10 Schiffe speichern sollst, sondern das ein Objekt 10 Schiffe SIND! Schwierig. Mit so vielen Objekten hab ich selbst aber auch noch nicht zu tun gehabt.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

MVB

BeitragFr, Jun 25, 2004 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked 5000 Schiffe!! Laughing . Ich glaub du bist dir selst nicht bewusst wie viele das eigentlich sind.
die einzige Möglichkeit die mir einfällt, ist immer nur 100 Raumschiffe zu bewegen, und den Rest einfach stehen lassen. Allerdings solltest du dir nochmal gut überlegen ob 5000 Schiffe nicht eins zu viel sind. Laughing
aquamonit.de|BlitzMax|MaxGUI

Gossi

BeitragFr, Jun 25, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau! Alle Schiffe, die in AKtion sind kopierst du ín eine neue viel kürzere Liste. Mit dieser Liste kannst du viel besser arbeiten. Wenn irgendein Raumschiff aus der Liste zerstört wird, nimmst du das erstbeste aus der langen Liste rüber. genial @ Monster Drowner
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

Kekskiller

BeitragFr, Jun 25, 2004 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Das erinnert mich an das Diablo-Monstersystem.
Dort werden nur Objekte im unmittelbaren Umkreis bewegt, oder
überhaupt von der Berechnung beachtet. Zwar zählt die Liste dann
immer noch ganz durch, aber jedenfalls sind die Rechnungen
weggespart. So würde ich es auch machen. Nur die im Umkreis
berechnen, die sichtbaren einzeichnen und dann entsprechend die
nächsten Gegner bei Annäherung einbeziehen.

Aber ehrlich mal, bei 5000 Schiffen... das schafft selbst ein doppelt
gemoppelter 5 Gigaherzrechner nicht 8) ...

ChrisAttack

BeitragFr, Jun 25, 2004 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
so oder so...
es geht nicht hin mit den ressourcen...
verringer die zahl max. 100.
B3D
MSVC++
DX9SDK

Gossi

BeitragFr, Jun 25, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Ram 512 MB beträgt (rund 500 MB), darf ein Raumschiff nur 0,5 MB haben. sin ~ 500 KB. Sollte aus Ram-Sicht zu schaffen sein.

Edit: Verrechnet! Es dürfen nur 100 KB sein. Ui, das wird schon eng.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

furbolg

BeitragSa, Jun 26, 2004 2:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Gossi hat Folgendes geschrieben:
Wenn der Ram 512 MB beträgt (rund 500 MB), darf ein Raumschiff nur 0,5 MB haben. sin ~ 500 KB. Sollte aus Ram-Sicht zu schaffen sein.

Edit: Verrechnet! Es dürfen nur 100 KB sein. Ui, das wird schon eng.


5000 Objekte, sind doch kein Problem, ok bei Blitz gehts nich so gut. 100kb für ein Raumschiff im Ram was hast du für Vorstellungen ? Die meisten Struktur auch bei großen Spielen kommen nich über ein paar KB.
Bei 256 Floats / Integer hat man gerade 1 KB. Wenn du mit 100 KB auch Models und Sounds meinst, ich denke bei den 5000 Schiffen sind sehr viele doppelt und dreifach.

Mr.Keks

BeitragSa, Jun 26, 2004 9:05
Antworten mit Zitat
Benutzer-Profile anzeigen
.. naja, der ram wird ja nicht nur von bb benutzt ^^.

also bei meinem weltraumspiel bekomme ich (128 ram, winme) schon bei 12 schiffen ab und an einen stackoverflow. vor allen dingen muss man bedenken, dass auf ein schiff so an die 10 schüsse gleichzeitig kommen. dazu müssen die teile ja am ende auch noch explodieren (wieder einige objekte). dann vielleicht noch antriebsspuren. ne, eigentlich wirst du, wenn du halbwegs hochwertige raumschiffe haben willst, nicht über 40 stück kommen! mit einem kilod vielleicht über 60, aber das wars dann. btw. kann man auch 60 als seeeh viel erscheinen lassen. bei mkeinen 12 stück bekomme ich schon massenschlachtfeeling Smile

kilod: http://www.spieleentwickler.or.../frame.htm
MrKeks.net

Sebastian

BeitragSa, Jun 26, 2004 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
5000 Question Question

Ne !

50 sin Okay...

aber 5000 das is grazzy !

Ofenrohr

BeitragSa, Jun 26, 2004 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ok

ich sehe ein das das wohl eindeutig zuviel ist. Embarassed
(ich mache eine 3d version von o-game - für den der es kennt)

vieleicht währe das eine lösung:
ich mache die objekte einfach größer, damit alles gigantisch wirkt.

und die idee mit der liste ist auch gut bloß ein bisschen umgebaut:
man stellt die schiffe immer hintereinander hin und lässt einfach nur die vorderen bewegen, wenn die dann weg sind rücken alle anderen gruppen einen platz vor.
(sowieso gut, da es im ogame kampf system nach runden geht)

was meint ihr dazu?

mfg ofenrohr

ps: in ogame fliegen auch mal >50000< Schiffe gegeneinander

Ofenrohr

BeitragSa, Jun 26, 2004 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
achja,

weis jemand wie das in kampf um mittelerde gelöst wurde?(die mega massenschlachten)

mfg ofenrohr

tft

BeitragSa, Jun 26, 2004 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.....

der umgang mit sofielen objecten ist schwierig. Hir einige ansatzt Ideen die aus meinem 3D Space Game TUT stammen.

Alle Objecte in einer Liste in x/y/z sortiert eintragen und nur die Objecte in einer (Schiffe in Sichtweite Liste) eintragen die sich im Abstand x zur Cammera befinden.

Diese Liste darf nicht bei jeden Durchlauf sortiert werden. Sondern du must mit Indices arbeiten. Damit du nicht die Object Daten Verschieben must. Und natürlich nur Dann verschieben wenn sich die Position verändert.

Dann eine Liste der grösse nach. Damit die Kleinen Schiffe öffter berechnet werden als die Grossen. Denn die Grossen bewegen sich erfahrungs gemähs Träger.

Dann eine Liste der Objecte die sich Garnicht bewegen. (Stationen etc)

Dann eine Liste der Objecte die sich nicht nur bewegen sondern auch die KI benötigen um auf ereignisse von aussen zu reagieren.

Das solte deine Liste von Schiffen auf 100 Reduzieren die Pro FPS berechnet werden. Die Efficience der KI hängt von deinem können ab die sachen die nicht berechnet werden müssen zu erkennen und wegzulassen.
Weitere Listen können da hilfreich sein.

Dann must du natürlich alle objecte mit HideEntity ausschalten die du erstens nicht sehen kannst (Max Entfernung) und sich nicht gerade in deiner Blickrichtung befinden. Dazu must du einen Sichtkegel erzeigen und daraus aus der xyz Liste der Schiffe diejenigen herausfiltert die du nicht darstellen brauchst. Alle Objecte die KI brauchen solten immer berechnet werden , da ja noch die Kollisions erkennung funktionieren muss. Das ist zwar auch anders lösbar. Aber doch noch einen Zacken Komplexer.

Fiel spass beim Knobeln. Ich habe für meine Engine die inder lage ist bis zu eine Million Objecte zu verwalten und permanent 700 zu berechen und dabei maximal 100 Objecte mit 60 FPS anzuzeigen. bei einem P4 2.8GHz etwa 2 Jahre gebastelt. Das ergebniss kann sich sehen lassen.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

stfighter01

BeitragSa, Jun 26, 2004 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ich kenne o-game nur vom ansatz her.
ich schätze mal es ist per definition von der engine her unmöglich 5000 3D objekte auf einmal zu erstellen.
also würde ich die schiffe nur im speicher als koordinaten belassen und sie erst als 3D objekt erstellen sobald sie in reichweite der kamera kommen.

wo können sich schiffe eigentlich überall begegnen?
wenn das nur in einem sonnensystem möglich ist und nicht IRGENDWO im weltall dann könnte man die berechnungen auf dem pc vornehmen in dessen sonnensystem die interaktion stattfindet.

allerdings wird dann natürlich die gefahr des hackens grösser, aber ich würds trotzdem so machen.

zudem kann man das sonnensystem noch in ein raumgitter einteilen.
d.h. jedes raumschiff wird nur mit den raumschiffen im eigenen gitterplatz bzw.: mit den raumschiffen in den nachbargitternplätzen (für überschneidungen) überprüft.

mfg stfighter
Denken hilft!

Ofenrohr

BeitragSa, Jun 26, 2004 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
die idee mit der kamera ist gut
allerdings weis ich nicht wie die formel ist die die raumschiffe im sichtbarem bereich ermittelt.
hat wer ne ahnung???

ich hatte ogame3d nicht als broswergame geplant sondern als einfaches multiplayergame(mit max. 10 spielern)

außerdem wollte ich noch eine erweiterung einbauen so das sich flotten abfangen können und planteten belagern sollte auch möglich sein(anzahl der bel. schiffe hängt von der größe des planeten ab)

tkx 4 help

Mr.Keks

BeitragSa, Jun 26, 2004 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
bei einem strategiespiel wäre es aber ziemlich komisch, wenn du schiffe außerhalb der kamerareichweite einfach stehenlassen würdest...
MrKeks.net
 

Dreamora

BeitragSa, Jun 26, 2004 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd den Raum sektionieren.
Wie, das hängt davon ab ob deine Schiffe in alle 3 Dimensionen vollständig rumschwirren oder mehrheitlich eigentlich in +- der gleichen Höhe womits mehr 2D ist.

Bei ersterem nutzen man OctTree zur Sektionierung und bei letzterem QuadTree.

Nu kannst du bis zu einer bestimmten Tiefe in diesem Baum gehen und den entsprechenden Sektor berechnen danach geheste eine Stufe rauf und kannst dort wenn nötig anpassungen an "globalere" Situationen machen etc.

Noch ne optimierung is das mit den "Raumschiffgruppen" / Squads ... allerdings würd ich da net einfach ein einzelnes Mesh nehmen für das Squad sondern die Schiffe einem Pivot anhängen oder einem Anführerschiff. Denn so viel Speicher brauchen die net, mehr als 200-300 Polygone wirste Schiff net haben. Dann dürfteste mit 3000-5000 Schiffen im möglichen Bereich liegen, sofern net immer alle gleichzeitig sichtbar sind.


@Gossi: Das mit der Liste stimmt nur wenn sie nicht sortiert ist, was ehrlich gesagt kein auch nur halbwegs denkende Programmierer nutzen würde. Irgend ne Art von Struktur liegt immer drin, selbst wenn man sie durch Insertion Sort erreicht Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Ofenrohr

BeitragSo, Jun 27, 2004 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ok

ich wollte den schiffen immer erfahrungspunkte zuteilen und danach kann sich das anführerschiff ergeben.

@ Dreamora: ich danke dir für deine hilfe. aber:
ich weis leider nicht was Octtree oder Quadtree ist Sad (kannst du mal bitte genauer erklären? Question - danke)

@ Inarie: die schiffe lasse ich natürlich bewegen Very Happy - ist blos ein unterschied ob sie angezeigt werden

mfg ofenrohr
 

Dreamora

BeitragSo, Jun 27, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
OctTree - QuadTree sind Datenorganisierungsstrukturen
Für eine sinnvolle Umsetzung deines Problems sind sie unumgänglich.

Eine genaue Erklärung übersteigt den Thread hier bei weitem, doch Google hilft dir da in vielfacher hinsicht weiter
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

furbolg

BeitragSo, Jun 27, 2004 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
stfighter01 hat Folgendes geschrieben:
hmm ich kenne o-game nur vom ansatz her.
ich schätze mal es ist per definition von der engine her unmöglich 5000 3D objekte auf einmal zu erstellen.
also würde ich die schiffe nur im speicher als koordinaten belassen und sie erst als 3D objekt erstellen sobald sie in reichweite der kamera kommen.

wo können sich schiffe eigentlich überall begegnen?
wenn das nur in einem sonnensystem möglich ist und nicht IRGENDWO im weltall dann könnte man die berechnungen auf dem pc vornehmen in dessen sonnensystem die interaktion stattfindet.

allerdings wird dann natürlich die gefahr des hackens grösser, aber ich würds trotzdem so machen.

zudem kann man das sonnensystem noch in ein raumgitter einteilen.
d.h. jedes raumschiff wird nur mit den raumschiffen im eigenen gitterplatz bzw.: mit den raumschiffen in den nachbargitternplätzen (für überschneidungen) überprüft.

mfg stfighter


Shice, hab ja vergessen das BB keine VB oder so unterstützt ^^ Das macht die Sache schwieriger

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group