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

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

31

01.03.2012, 13:24

Ok jetzt versteh ich auch deine Aussage und es wird wohl stark an mir hängen bleiben wieviele Personen ich letzendlich über einen längeren Zeitraum motivieren kann.

Nun gut mal schauen =D Auf jeden fall danke ich euch für eure tipps.

32

01.03.2012, 22:20

Moin,

ich hab mich noch nie mit Zonen beschäftigt, aber mit dynamischen Zonen lassen sich bestimmt coole Dinge machen :)
Ich hab grad so'nen Modell vor Augen, wie man das "physikalisch" modellieren könnte:
Man hat x Instanzen. Diese Instanzen werden von den Nutzern angezogen. Andererseits stoßen sie sich gegenseitig ab.
Der Radius einer Instanzen geht immer nur maximal bis 1/4 des Abstandes zur nächsten Instanz heran.
Das Verhältnis der abstoßendene und anziehenden Kräfte muss dann empirisch ermittelt werden und wird von Version zu Version schwanken. ^^

Ein physischer Server könnte natürlich mehrere Instanzen verwalten.
Exakt ist das sicherlich höllisch schwer zu berechnen, aber mit einer Annäherung kommt man da doch sicher gut hin. Und _so_ schnell ändern sich Zonen nun auch wieder nicht.
Gibts aber vermutlich schon. Ich wollte die Idee nur mal los werden :)


MfG
dispy

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

33

02.03.2012, 06:35

Äh... dispy?
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]

34

02.03.2012, 11:26

@dispy Dein Ansatz erinnert mich ein bisschen an den Ansatz von Much Different. Dort werden Nutzer als "Mobiltelefonnutzer" die Instanzen als wandernde "Mobilfunkmasten" verstanden. Die Masten wandern entsprechend der Benutzerverteilung. Bei deinem Ansatz stelle ich es mir schwierig vor wenn es zur Hotspot Bildung kommt. Wenn man Pech hat kann sich dann eine ungünstige Verteilung ergeben, z.b. bei mehr als drei Instanzen mehrere Instanzen die eine einzelne über dem Hotspot fixieren. Vielleicht kann man den jew. Radius einer Instanz abhängig von der Anzahl der zu verwaltenden im Einflussbereich liegenden Nutzer machen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chromanoid« (02.03.2012, 11:39)


Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

35

02.03.2012, 14:18

Hm ich habe mir heute mal Spaßeshalber überlegt wie das Zoning für mein Spiel aussehen könnte.

ich habe mir dabei gedacht dass die Spielwelt im ursprungszustand quasi ein Würfel ist. Dieser würdel ist unterteilt in einzelne Zonen (Server) die wiederrum Würfel sind (am besten stellt ihr euch nen Rubiks Cube vor). Wichtig dabei wäre dass alle Server Relativ beieinander bleiben d.h. Alle Zonen bewegen sich nicht und befinden sich in einer Matrix

Nun wird das System mit Objekten befüllt (Objekte sind in dem falle alles was es gibt also sowohl User als auch Fahrzeuge usw.). Jede Zone hat ne Maximalkapazität von x Objekten und wenn diese erreicht ist dann "verkleinert" sich diese Zone und alle Objekte die "abgeschnitten" wurden, werden auf den jeweils benachbarten Server übertragen der die geringste Last hat. Natürlich müssen noch diverse Übergangszonen enthalten sein damit der User beim übertritt der Zonen nicht merkt das da was passiert.

Ich könnte mir vorstellen das das ein passendes Konzept sein könnte um Schlagartige zusammenballungen von Nutzern am besten und am dynamischsten ausgeglichen werden kann.

Nachteil der sache wäre eben dass der Traffic unter den Servern recht hoch sein wird wenn sowas häufig vorkommt da alle Objekte ständig den Server wechseln müssten(aber normalerweise passiert das ja nicht wirklich oft).

Vorteil ist einfach dass die Last Relativ gut auf alle im Verbund arbeitenden Server verteilt und dass man einfach neue Server in die Matrix einbinden kann da die Server ja immer wissen (sollten) wer ihre jeweiligen Nachbarn sind und wie belastet der Server ist.

Der einzige gedanke der mir momentan probleme bereitet ist der Fall wenn plötzlich einer oder mehrere Server in der Matrix ausfallen... wie müsste man da die logik schreiben dass sie Objekte in diesen Servern nicht verloren gehen.

=D es kann gut möglich sein dass ich das nie machen/brauchen werde aber ich finde es einfach entspannend sich über sowas gedanken zu machen ^^

36

02.03.2012, 16:35

Moin,

1) siehe PN
2) Wenn du einen Würfel verwendest, so sind alle Zonen an sich auch wieder Würfel bzw. Quader.
Wie genau funktioniert die Zuordnung eines Objektes zu einer Zone? Normalerweise würde man eine Funktion bauen, die abhängig vom Ort eine Zone zurückgibt.
Wenn eine Zone überlastet ist, so verkleinert sie sich. => Wird aus einem Würfel dann ein Quader? Dann muss eine andere Zone bei Verwendung obiger Zuordnung den Raum wieder auffüllen. Was ist, wenn die Zone wesentlich größer ist, und die verkleinerte Zone sozusagen nur einen Knubbel der größeren Zone darstellst? Wie willst du die große Zone dann darstellen? Aus vielen kleinen Zonen/Geometriekörpern zusammengesetzt?
Das wird im Laufe der Zeit, da sich die Zonen ständig verformen werden, sicherlich unglaublich kompliziert, sodass sogar die Zonenabfragen ziemlich viel Zeit verschlingen könnten.

In deinem Modell bewegen sich die Zonen nicht. Was ist, wenn du an einem Fleck eine Unmenge von Spielern hast? Im zweidimensionalen Raum hast du für einen Punkt maximal 3^2 = 9 Instanzen, auf die du die Spieler aufteilen kannst (dreidimensional: 3^3 = 27). Wenn da jetzt grad 1000 Spieler sind, sind das pro Instanz immer noch über 100 Spieler.

MfG
dispy

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

37

02.03.2012, 19:30

hi dispy,

1) danke ich habe nun verstanden was du meinst =) ich denke du musst kein programm machen das mir das visualisiert ^^ aber wenn du magst kannst du es trotzdem gern schreiben =D

2) Das mit den unterschiedlich Großen Zonen ist ja prinzipiell egal da es sich nur nach der Menge der Objekte innerhalb einer Zone richtet d.h. nehmen wir an jede zone kann maximal 100 objekte aufnehmen dann könnte es sein dass Zone a durch die menge an objekte auf eine größe von 1mx1mx1m zusammenschrumpft währen Zone b (die auch ganz voll bei 100 objekten ist) ne ausdehnung von 1000mx1000mx1000m hat. Das Mit dem Würfel und den quadern ist ein wenig unglücklich formuliert weil ich das ein wenig abstrakter sehe. Eine zone beinhaltet ja nur die objekte und braucht die ja auch nur "am leben" erhalten, der Leere Raum zwischen den objekten ist einfach .. nichts. Klarer ausgedrückt heitß es dass die Zonen nur die objekte in einer Tabelle verwaltet. Um dies dann zu begrenzen und damit jeder weiß was er wo verwalten muss jeder Zone für den anfang ja ein startwert gegeben werden von wo bis wo er verwalten soll (deswegen Würfel).

Letztenendlich kann es also sein dass eine Zone ein abstraktes gebilde wird. Die Form Spielt dabei ja keine große rolle da alles über Positionsdaten idendifiziert werden kann. Theoretisch wäre es dann in gewissem maße möglich dass die Server absolut zur ursprünglichen position "wandern". Ach ja die Positionierung: Ich dachte dabei an eine vordefinierte Welt mit jeweils einer koordinate für jede seite und dass sich die jeweiligen Zonen dann die Welt unter sich aufteilen.

Ich kann mir momentan nicht vorstellen warum die Zonenabfragen viel zeit verschlingen sollten da jede Zone an sich eigentlich immer weiß welche objekte in ihnen sind.

Beispiel: Die Länder sind jetzt mal die Zonen (sind ja auch abstrakt xD) Ich befinde mich irgendwo auf der Erde (zum verständnis wir wissen dass wir uns in München bewegen.)

Ich (Spieler) frage also den Spieler-Server wer alles im umkreis von 500 km (nachtrag: ups bissl groß 500 km .. egaal :D ) um mich herum ist. -> der Spielerserver ermittelt erst mal welche zonen überhaupt in frage kommen würden indem er von den zonen deren maximale ausdehnung kennt/erfragt (also nördlichster,westlichster,östlichster und südlichster punkt jeder Zone). Dadurch entsteht ja quasi ein rechteck jeder zone die sich in der nähe befindet (Deutschland,Schweiz,Belgien,Frankreich,Polen,Tschechien,Ungarn,österreich,Italien,slowenien und Kroatien). -> Die Zonen haben dann ja meine positionsdaten und errechnen dich dadurch jeweils den bereich der entfernung zu mir und gibt dann auch nur diese Daten wieder. Worin sollte dann es dann kompliziert sein?

Wenn ich an einem fleck viele Objekte (spieler) habe und jede Zone sagen wir 50 objekte aufnehmen kann dann würden sich die zonen auch sowei zusammenziehen bis jede zone ihr maximum unterschreiten und würden den rest an die benachbarten zonen geben usw. das hieße dass 20 Zonen komplett voll werden und 7 zonen leer.

Grüße
Pecadis.

38

02.03.2012, 22:40

Zitat

Die Form Spielt dabei ja keine große rolle da alles über Positionsdaten idendifiziert werden kann.

Genau da liegt das Missverständnis: Wenn du prüfst, zu welcher Zone eine Position gehört, so prüfst du, ob der Punkt in der Fläche der Zone liegt. Hast du extrem komplizierte Formen bei deinen Flächen, so wirst du auch extrem kompliziert prüfen dürfen.

Wenn eine Zone kleiner wird, muss eine andere automatisch größer werden. Indem sie sich vergrößert, verformt sie sich automatisch.
Im Laufe der Zeit werden sich alle Zonen, gerade, wenn sie auch noch wandern, in extrem großen Maße und vor allem unsymmetrisch verformen. Die sollen ja nicht 2 Stunden ohne Neustart laufen, sondern 2 Monate (oder mehr) Dauerbelastung ausgesetzt sein.

Vllt. hast du da auch einen total genialen Ansatz, wie du das Problem sehr elegant löst - dann aber nur raus damit :)


Zitat

Ich kann mir momentan nicht vorstellen warum die Zonenabfragen viel zeit verschlingen sollten da jede Zone an sich eigentlich immer weiß welche objekte in ihnen sind.

Wenn du mit einem ultrafixen Supergleiter mit 5facher Lichtgeschwindigkeit durch die Gegend saust, wirst du, sofern du an belegten Orten vorbeikommst, Unmengen an Zonen durchfliegen. Wenn die sehr komplizierte Formen haben, die sich im Übrigen auch fortlaufend ändern, musst der Server andauernd neu prüfen, wo du genau hingehörst.
Zugegeben: die Zeit ist hier bei heutigen Ressourcen wohl kein Thema mehr. Ich benüge mich mit unnötiger Komplexität :)



MfG
dispy

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

39

02.03.2012, 23:51

Zitat

Genau da liegt das Missverständnis: Wenn du prüfst, zu welcher Zone eine
Position gehört, so prüfst du, ob der Punkt in der Fläche der Zone
liegt. Hast du extrem komplizierte Formen bei deinen Flächen, so wirst
du auch extrem kompliziert prüfen dürfen.
hm ich glaube da verstehen wir beide uns zum teil falsch. die Zonenzugehörigkeit müsste ja nur einmal am Anfang oder beim Einloggen gemacht werden da sich ja seit dem letzten einloggen etwas getan haben könnte. Da die Zonen ja ohnehin wissen welche bereiche sie abdecken müsste man also nur folgendes machen:

1. Spieler loggt sich ins Spiel ein.
2. Spielserver kennt die letzte Position des Spielers und fragt welche zone einen punkt beinhaltet der die Koordinaten x, y und z hat.

Und da die Zonen immer Rechtwinklig sind wird das ganze noch deutlich vereinfacht.

Zitat

Wenn eine Zone kleiner wird, muss eine andere automatisch größer werden.
Indem sie sich vergrößert, verformt sie sich automatisch.

Im Laufe der Zeit werden sich alle Zonen, gerade, wenn sie auch noch
wandern, in extrem großen Maße und vor allem unsymmetrisch verformen.
Die sollen ja nicht 2 Stunden ohne Neustart laufen, sondern 2 Monate
(oder mehr) Dauerbelastung ausgesetzt sein.
Was aber ein größeres problem darstellen könnte ist das wandern der Zonen. Da muss es die möglichkeit geben dass die Zonen sich untereinander abfragen "wer ist denn hier in der nähe und sagt mir auch gleich wie stark ihr ausgelastet seit". das mit der Auslastung muss ja so oder so abgefragt werden und das mit der position kann durch den oben genannten näherungswert auch festgestellt werden "also wie groß ist das Rechteck und kommt es in die nähe meines bereiches". Wieviel Rechenzeit das allerdings braucht weiß ich nicht aber sicher muss die aktualisierung je nach Systemauslastung geschehen.

Zitat

Wenn du mit einem ultrafixen Supergleiter mit 5facher
Lichtgeschwindigkeit durch die Gegend saust, wirst du, sofern du an
belegten Orten vorbeikommst, Unmengen an Zonen durchfliegen. Wenn die
sehr komplizierte Formen haben, die sich im Übrigen auch fortlaufend
ändern, musst der Server andauernd neu prüfen, wo du genau hingehörst.
Das problem habe ich auch schon bedacht und dazu 3 Lösungsvorschläge:

1. Man baut eine eigene reservierte Zone ein die sich nur um das Reisen kümmert, also eine quasi over all Zone.
2. Man "Warnt" die zonen die auf dem Weg liegen vor und überführt den Spieler in eine "Zonentransfer-Tabelle" (ich hatte vor dass lange, weite und schnelle Reisen nur durch vorherige eingabe des etwaigen Ziels geschehen kann. Das heißt dass bei manueller Reise die Geschwindigkeit so langsam ist dass es lange genug braucht damit eine Zone den Spieler eintragen, und wieder austragen kann. Warum trotzdem noch durch die Zonen?.. Ganz einfach.. es schaut besser aus wenn man (auch wenn unrealistisch) bei einer solchen Geschwingigkeit Große Objekte an einem vorbei rasen.)
3. Eigentlich ist das schon Zonenspezifisch wie wir das schon vorher hatten .. Die Zonen geben das objekt einfach normal an die nächste Zone weiter.


mfg
Pecadis

40

03.03.2012, 13:53

Hört sich ein bisschen nach dem hier an: http://update.multiverse.net/wiki/index.…formance_Tuning
Es gibt auch einige Versuche mit so Mikrozonen. Dabei verwaltet dann ein Server mehrere Mikrozonen. Die Mikrozonen müssen dann geschickt verteilt werden.
Zonenwechsel kann bei kleinen Zonen ziemlich unangenehm werden. Vor allem früher gab es dafür ja extra Geometrie und eine Art Zwischenzonen

(Link)

Normalerweise wird eine tatsächliche Übergabe eines Objektes an eine andere Zone erst vorgenommen, wenn ein bestimmter neutraler Bereich überschritten wurde. Bei vielen Systemen wird außerdem noch ein Proxy Server benutzt, der die eigentlichen Anfragen der Spieler vernünftig weiterleitet und mit den Zonenservern kommuniziert. Auf diese Weise hat der Client auch immer nur mit einer IP zu tun und das ganze ist wesentlich sicherer.

Werbeanzeige