Diskussionsrunde: Spannende Diskussionen rund um Star Citizen.

Jeden Freitag ab 20 Uhr.

Roedas Dienstagsrunde: Star Citizen im Detail.

Jeden Dienstag ab 20:15 Uhr.

Home || Star Citizen Blog Posts

Das Zonensystem in Star Citizen

Ich hatte letzte Woche angekündigt, dass es einen Artikel zum Thema Instanzierung geben wird. Dieser wird auch kommen. Da das Thema Zonensystem mit der Instanzierung eng verbunden ist, wollte ich im versprochenen Artikel eigentlich nur eine Abgrenzung der beiden Themen machen. Dabei habe ich jetzt aber schon so viel zusammengetragen, dass es besser in einen eigenen Artikel passt. Ihr findet hier also zunächst die Informationen über das Zonensystem und in einem späteren Blogpost komme ich dann auf die Instanzierung zu sprechen.


Zonensystem?


In Star Citizen bezeichnen Zonen Teile der 3D-Spielewelt. Zum Beispiel die gesamte ArcCorp-Map oder auch eine Map im Arena Commander sind Zonen. Das besondere an den Zonen sind, dass sie sich in Subzonen aufteilen können. Bei ArcCorp wäre das zum Beispiel das Innere von Gebäuden oder verschiedene Stadtteile. Im Weltraum wären verschiedene Subzonen zum Beispiel an Bord der verschiedenen Raumschiffe.

Was ist daran jetzt besonders? So gut wie alle Grafikengines für FPS-Spiele arbeiten nach dem Prinzip, dass es hierarchische Objektbäume gibt, die beim Rendern komplett abgearbeitet werden. Wenn man also eine 3D-Welt betritt, dann lädt der Client immer alle Objekte dieser 3D-Welt und bekommt alle Information über andere Spieler in dieser Welt. Viele Spiele haben zusätzlich noch Mechniken, um zu verhindern, dass zwischen weit entfernten Spieler, alle Informationen ausgetauscht werden bzw Objekte geladen werden. Bei Star Citizen reicht dieses Prinzip aber nicht aus. Die folgende Grafik zeigt, wie bisherige Engines arbeiten würden.


Eine 3D-Welt mit herkömmlichen hierarchischen Objektbäumen


In der 3D-Umgebung im Weltraum würde der Spiele-Client des Spielers an Bord von Raumschiff 3 immer alle Subobjekte der anderen Raumschiffe laden und auch übers Netzwerk alle Aktionen der anderen Spieler gesendet bekommen. Das ist so, weil auch die Spieler Subobjekte im Objektbaum der Raumschiffe wären. CIG braucht also eine Möglichkeit, die 3D-Objekte so einzuteilen, dass eben nicht immer das gesamte Schiff mit allen Innereien angefasst werden muss.

Das Zonensystem ist die Lösung für dieses Problem. Es teilt die Welt in Zonen ein, die alle für sich selbst eigene 3D-Umgebungen sind. Sie können Teil eines Objektes (wie zum Beispiel eines Raumschiffes) sein. Wenn jetzt also ein Raumschiff gerendert werden soll, dann kann die Engine direkt berechnen, ob die Zone im Inneren des Raumschiffes überhaupt gesehen werden kann. Falls nicht, werden die entsprechenden Texturen und auch die Spieler gar nicht erst geladen.

Über das Zonensystem können auch andere Module der CryEngine (wie Physik, Netzwerk, etc.) Informationen darüber bekommen, ob Physikeffekte berechnet, oder ob Spieleaktionen übertragen werden müssen. Wenn man die Bewegungen eines anderen Spielers nicht sehen kann (im Innenraum eines Raumschiffes), dann muss der Client diese Informationen auch nicht übers Netzwerk bekommen.


Seperate Zonen für verschiedene Subzonen einer 3D-Welt


Wie Ihr in oberer Grafik seht, gibt es jetzt getrennte 3D-Umgebungen, sprich Zonen, die das Spiel direkt für die Optimierung von Rendering, Physikberechnungen, Netzwerkübertragungen und vielem mehr nutzen kann. Im Beispiel mit dem Innenraum eines Raumschiffes ist das sehr einfach darzustellen: Für unseren Spieler an Bord von Raumschiff 3 wird nur das Äußere der Raumschiffe gerendert. Es werden keine Bewegungen von Spielern im Inneren des Raumschiffes übertragen, außer wenn er über ein Fenster ins Innere des anderen Raumschiffes schauen kann.

Das Zonensystem ist also primär dazu da, die Spielwelt sinnvoll zu unterteilen, um daraus die Notwendigen Daten zu gewinnen, die für die Optimierung der Ressourcen (Server- und Clientseitig) benötigt werden. Auf die CryEngine bezogen, sagt Chris Roberts, dass es die Zusammenführung von mehreren seperaten Systemen in der Engine ist, die alle für Optimierungszwecke geschrieben wurden sind, aber bisher unabhängig voneinander gearbeitet haben.


Zukünftige Verwendung des Systems



In der SC Alpha 2.0 soll das System zunächst vor allem die Optimierung der Ressourcenverwendung unterstützen. Also weniger unnötiges Rendern, Rechnen und Kommunizieren übers Netzwerk. In der Zukunft soll das Zonensystem aber auch genutzt werden, um eine Instanz in der Spielwelt von mehreren Game Servern verwalten zu lassen.

Wie soll das funktionieren? Die erste Lösung, die implementiert werden soll, ist die, dass die Subzonen einer Zone auf eigenen Game Servern laufen können. Das würde in unserem obigen Beispiel wie folgt aussehen.


Jede Zone kann von einem eigenen Game Server verwaltet werden.


Der Innenraum der verschiedenen Schiffe wird von verschiedenen Game Servern verwaltet. Wir haben dann also einen Game Server, der die Zone im Weltraum koordiniert und die Game Server, die die 3D-Umgebungen innerhalb der Schiffe verwalten. Vielleicht wird aber auch der Innenraum mehrerer Schiffe auf einem Game Server verwaltet. Der Einfachheit halber, bin ich hier von einem Game Server pro Zone ausgegangen.

Für unseren Spieler an Bord von Raumschiff 3 bleibt prinzipiell alles wie gehabt, nur dass der Client automatisch mit zwei anderen Game Servern spricht, wenn das Innere der beiden anderen Raumschiffe angezeigt werden soll.





Ein solches dynamisches System sollte es möglich machen, dass am Ende mehr Spieler an einer Schlacht teilnehmen können, als es die Grenze an Schiffen in einer Instanz erlauben würde. In unserem kleinen Beispiel haben wir nur 3 Schiffe, aber insgesamt 6 beteiligte Spieler.

Was passiert jetzt, wenn Spieler ihr Schiff verlassen und ein anderes Schiff betreten (durch EVA)? In diesem Fall würden er, ohne es zu merken, von einem Game Server auf einen anderen Game Server wechseln. Steigt also ein Spieler aus Raumschiff 1 aus, dann wird er auf den Game Server 1 wechseln (dieser verwaltet den Weltraum um die Schiffe). Beim Betreten von Raumschiff 2 wird er dem Game Server 3 zugeteilt. Alle anderen Spieler würden den Spieler dabei beobachten können, solange sie im Sichtbereich sind.


Langfristige Pläne für das System



Chris Roberts hat an einigen Stellen davon gesprochen, dass sie eine Zone (also zum Beispiel die Zone im Weltraum) von mehreren Game Servern gleichzeitig bearbeiten lassen könnten. Schafft ein Game Server vielleicht 100 Schiffe, dann könnten 10 davon 1000 Schiffe pro Instanz möglich machen (und damit wie oben beschrieben noch weitaus mehr Spieler).

Er sagt aber auch, dass eine solche Technologie derzeit von CIG erst untersucht wird. Ob dies am Ende wirklich möglich sein wird, kann noch nicht gesagt werden. Chris Roberts weist auch darauf hin, dass ab einer gewissen Anzahl an Schiffen der Client überfordert sein wird. Am Ende muss also die Raumschiffgrenze immer im Verbund von Server und Client gesehen werden.

Weitere Details, wie sich die Game Server die Verwaltung einer Zone teilen könnten, sind meines Wissens bisher nicht bekannt. Insofern kann ich hier nur Spekulieren, wie sie es vielleicht bauen könnten. Die einfachste Möglichkeit wäre es, dass einfach starr x Schiffe auf einen Game Server kommen. Ist er voll, dann kommen die nächsten x Schiffe auf den zweiten Game Server.

Wenn jetzt aber zwei Schiffe auf von verschiedenen Servern mit einander interagieren, dann müssten sie entweder auf einen Server zusammengebracht werden, oder es muss Kommunikationskanäle zwischen den Servern geben, die schnell genug sind, um die Interaktion bearbeiten zu können.

Meiner Meinung nach wird das Wechseln der Server kaum funktionieren, da in einem Kampfgetümmel jeder mit jedem interagiert (Lasersalven, die Schiffe treffen, die man gar nicht beschießen wollte, etc.). Es ist dann viel zu schwierig und zeitaufwendig herauszufinden, wer mit wem auf welchen Game Server sein sollte.

Dazu kommt noch, dass auch das Wechseln des Spielers von einem Game Server auf einen anderen nicht kostenfrei sein kann. Es wird schlicht Zeit brauchen, um einen Spieler von einem Server zum nächsten zu schieben. Stellt Euch nur vor, Ihr seid in einem Dogfight und Ihr werdet auf einen anderen Game Server verschoben. Selbst wenn dies unter einer Sekunde möglich wäre, glaube ich nicht, dass es ohne weiteres möglich ist, dass man trotz des Verschiebens ungestört weiterspielen kann. In dieser Situation würde es unweigerlich zu Problemen bei der Spielbarkeit kommen.

Die beste Möglichkeit, die ich im Moment sehe, wie man mehr Schiffe in eine Instanz bekommen kann, ist die, dass sie die Parallelisierung eine Ebene weiter unten ansetzen. Das heißt, es gibt nicht mehrere Game Server, sondern nur einen Game Server, der aber auf einem Cluster von physischen Servern läuft. Dieser hat dann wesentlich mehr Prozessorthreads und Speicher, als eine einzelne Maschine je haben würde, und könnte so die größere Last von mehr Raumschiffen schultern. Ich bin jedenfalls sehr gespannt, welche Lösungen sie in dieser Sache präsentieren werden.


Abgrenzung Zonensystem und Instanzierung


Wenn Ihr bis hierher gelesen habt, dann habt Ihr sicher auch festgestellt, dass das Zonensystem und die Instanzierung eng zusammen liegen, aber eben nicht das gleiche sind. Eine Instanz stellt in Multiplayerspielen seit jeher eine Kopie einer 3D-Umgebung dar. Falls sich in dieser 3D-Umgebung mehr Spieler aufhalten, als die Hardware, das Netzwerk, oder auch das Spieldesign hergibt, dann werden weitere parallele Versionen dieser 3D-Umgebung eröffnet. Jede parallel laufende Kopie ist eine Instanz.

Im Gegensatz dazu sind die Zonen in Star Citizen - wie oben beschrieben - eine Möglichkeit, die 3D-Umgebung zu unterteilen. Diese Unterteilung wird von der Engine verwendet, um eine Optimierung der Ressourcennutzung (Redering, Physik, Netzwerk, etc.) zu erreichen. Es geht also darum in eine Instanz mehr Spieler unter zu bringen.

Eine Instanz beinhaltet immer eine Zone (Hauptzone - zum Beispiel ein Stückchen Weltraum oder eine Planetenoberfläche). Das Wechseln von Spielern zwischen den Subzonen der Hauptzone findet immer in der selben Instanz statt. Das heißt, wenn ich mein Raumschiff verlasse (durch EVA), dann wechsele ich zwar die Zone (und später vielleicht damit auch den Game Server), aber ich bleibe in der gleichen Instanz und sehe weiterhin die gleichen anderen Spieler, mit denen mich das Matchmaking zusammengebracht hat.

Eine andere wichtige Aussage der Entwickler in diesem Zusammenhang ist, dass es auch an Bord von großen Raumschiffen zwar verschiedene Zonen geben kann, aber dennoch werden alle diese Zonen in einer Instanz liegen. Es gibt also beispielsweise keine Verdopplung der Brücke der Bengal oder ähnliches. Man muss sich also nicht Fragen, ob ein Team 1 in Instanz 1 die Brücke erreicht hat, während Team 2  in Instanz 2 es nicht geschafft hat.

Jetzt sind wir schon sehr nah am Thema Instanzierung. Deshalb mache ich mal hier den Schnitt und verweise Euch auf den kommenden Artikel zu diesem Thema, den Ihr hier in den nächsten Tagen lesen können werdet.

Hier der Link den anderen Teilen:

  1. Instanzierung in Star Citizen - Teil 1
  2. Instanzierung in Star Citizen - Teil 2


Quelle: GamersNexus 1, GamersNexus 2

4 Kommentare:

  1. Schön und Verständlich Zusammengefasst ^^ super Arbeit ^^

    AntwortenLöschen
  2. Für alle Zonis und Wessis und Ösis und für alle Star Citizens:

    https://www.youtube.com/watch?v=70KOTd0AwG0

    Die Fähre "Argo" aus der Morrow-Tour im Hangar-Video.

    LG,
    Raomir

    AntwortenLöschen
  3. Sehr guter Artikel zum ZonenSystem!
    100% auch so verstanden :)
    lg roedas

    AntwortenLöschen
  4. JessieBlue ist zurück, very nice. Danke für die Info.

    AntwortenLöschen