Vampire Survivors Clone - 1000 Characters

  • Guten Tag zusammen,


    ich Spiele derzeit Deep Rock Galactic Survivor. Tolles Spiel. Erstellt wurde der Titel mit der Unreal Engine.

    Nun zu meiner Frage: Wie macht man so ein Spiel?


    Wenn ich versuche ein Spiel wie dieses zu machen(in 3D), brauche ich ziemlich viele Gegner auf einmal. Ich danke so ca. 1000. Wenn ich das ganz normal mittels Character- Klasse machen bricht meine Framerate bereits bei weniger als 100 Charakteren stark ein. (Ryzen 5 3600 und Geforce 3080)


    Wie gehe ich dieses Problem am besten an? Ist der Character die richtige Klasse hierfür? Theoretisch reicht auch ein Pawn mit 3 simplen animationen. (Idle, Walk, Attack). Aber von 1000 Einheiten bin ich trotzdem weit entfernt.

    Bin ich dazu verdammt C++ zu lernen und würde dies das Problem lösen?

    Unity hat für solche fälle Dots und ECS. Leider finde ich hierzu keine guten Informationen was die UE angeht.


    Ich danke schon einmal im Voraus für eure Ideen.

    • Offizieller Beitrag

    Days Gone wurde mit der Unreal Engine 4 entwickelt. Die größte Horde in diesem Spiel besteht aus 500 Gegnern. Es sollte jedoch möglich sein, zwischenzeitlich 1000 Gegner ohne Probleme darzustellen. Das Spiel ist bereits fünf Jahre alt, und die Technologie dahinter ist wahrscheinlich sechs bis acht Jahre alt.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Dies wird jedoch nur durch eine Reihe von Optimierungen ermöglicht:

    1. LOD-Stufen: Je weiter die Gegner entfernt sind, desto niedriger ist die Polycount. Der LOD-Wechsel sollte so erfolgen, dass er beim Annähern der Gegner nicht bemerkt wird, um die Leistung zu optimieren.
    2. LODs können auch vereinfachte Animationen enthalten. Gegner, die weiter entfernt sind, werden weniger aufwendig animiert, mit weniger Schlüsselbildern und Knochen.
    3. Das Ausblenden (Culling): Die Leistung wird nur für das verbraucht, was der Spieler sieht. Beispielsweise könnten Gegner, die weit entfernt sind, nur einfache Modelle ohne detaillierte Texturen haben, um Leistung zu sparen.
    4. Auch die Komplexität der Gegnermodelle und ihrer Materialien ist wichtig. 1000 Charaktere mit einem Polycount von 1000 und jeweils 2k-Texturen sind weniger ressourcenintensiv als 1000 Charaktere mit einem Polycount von 10000.

    Letztendlich kommt es darauf an, wie viel Polycount und Draw Calls gleichzeitig angezeigt werden können. Eine halbe Million Tris sollten zwischenzeitlich ohne Probleme dargestellt werden können.

    Es ist wichtig zu bedenken, wie hoch der Polycount deines Levels allein ist. Wenn wir von einer Million ausgehen, hättest du rein rechnerisch 4000 Tris pro Gegner. Es ist jedoch wichtig, zu testen, wie flüssig das Spiel dann noch läuft.

    Außerdem solltest du die Schattenberechnung für 1000 Gegner berücksichtigen. Möglicherweise sollten Sie zunächst ohne Schatten testen, da dynamische Schatten ebenfalls leistungshungrig sein können.

  • Nun, ich denke mal, mit der Suche solltest du bei Wavespawns anfangen. Meistens sind dann die Gegner in Arrays zusammengefasst.

    Es gibt da noch mehrere Tutorials, aber ich habe dir erstmal eins rausgesucht, welches am Anfang nicht so lang ist.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Und um deine Frage nach C++ zu beantworten, nein brauchst du nicht. Am Anfang dachte ich auch, dass ich zumindest Parts in C++ einfügen muss, man kann ja auch einige Nodes selber programmieren usw., aber spätestens seit der Version 5 habe ich das bisher nicht mehr benötigt.