Performance-Verbesserung für mein/e Szenario/Mission

  • Multiplayer

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Performance-Verbesserung für mein/e Szenario/Mission

    Hi Miteinander!
    In 200+ Stunden Arbeit habe ich ein sehr umfangreiches Missionsszenario für die Altis-Karte erstellt mit über 300 spielbaren Charakteren, über 50 individuellen, teils gescripteten Missionen und jede Menge Details überall auf der Karte. Ich bin mir sicher, dass das Ergebnis extrem Spaß machen könnte, sofern es denn spielbar wäre...
    Mit Freunden (unter Anderem mit High-end PC als Host) habe ich versucht die finale Version des Szenarios zu testen, doch schmiert das Spiel für den Host stets beim Start ab. Die FPS sind auch unterirdisch (bei einem Mittelklasse PC sind es durchschnittlich 2), ich vermute mal ich habe es da vielleicht einfach ein bisschen übertrieben.
    Als blutiger Anfänger habe ich leider auch nicht wirklich Ahnung vom modden und erstellen solch umfangreicher Inhalte, dies ist mein erster richtiger
    Versuch. Ich selbst hab bereits versucht die optionalen, unbesetzten Fahrzeuge, Minen und einige weitere Objekte wieder zu entfernen sowie sämtliche Gebäude + dazugehörige Objekte als "einfache Kartenobjekte" zu deklarieren, allerdings brachte das auch nur minimalen Erfolg. Wenn ihr Fragen habt oder etwas braucht/wissen wollt, dann lasst es mich wissen, ich meld mich dann so schnell ich kann.

    Hier der Link zum Szenario im Steam-Workshop:
    steamcommunity.com/sharedfiles/filedetails/?id=864824070
    (falls ihr die Originaldateien von meiner Festplatte benötigt, lasst es mich bitte wissen)

    Meine Specs:
    Windows 10 Home 64 bit
    Intel(R) Core(TM) i7-3930K CPU@3.20GHz (6 Kerne)
    NVIDIA GeForce GTX 690
    16Gb RAM
    1TB SSD Festplatte mit >120GB freiem Speicherplatz
    Die aktuellsten Treiber
    (der Freund, der ebenfalls versuchte einen Server zu hosten, hat nochmal weit bessere Hardware)


    Danke jedenfalls an Jeden, der sich die Mühe macht sich meinem Szenario anzunehmen :)
    Cheers!

    Tim
  • Also wenn ich die Mission Starte renne ich in eine out of Memory Exception.

    Wenn ich mir dann die Mission im Editor anschauen ist das auch kein Wunder.

    Versuch mal die Anzahl der Objekte drastisch runter zu schrauen.
    Außerdem hast du Trigger die das gleiche Gebiet und die Gleiche Bedingungen abprüfen. Somit sind diese eigentlich überflüssig.
  • Damit andere hier das nicht noch abbonieren müssen hab ich die mission.sqm mal angehängt (die ist zwar binarisiert, aber das stört den Eden wenig).




    Kleiner Tipp: Fang erst einmal klein an. Du hast definitiv nicht die Erfahrung dafür so eine große Mission zu bauen. Das da wirst du niemals zum laufen bekommen.
    Dateien
    • mission.sqm

      (2,84 MB, 54 mal heruntergeladen, zuletzt: )
  • Hui, da hast du dir aber ganz schön Arbeit gemacht. Muss mich erst mal meinen Vorrednern anschließen und dir empfehlen kleiner anzufangen insbesondere wenn du noch keine oder wenig Erfahrung hast.

    Wie nomsium schon sagt ist die Objektanzahl ist nicht unbedingt ein KO Kriterium, habe selbst eine Mission am laufen mit deutlich mehr als 10000 Objekten, vorausgesetzt sie sind Simply Object und Simulation Off. Dann verhalten sie sich wie Map Objekte und rauben nicht all zu viel Performance.

    Wie Blaubaer schon aufgezeigt hat ist die KI Anzahl von über 1000 ein absolutes KO Kriterium. Weis jetzt nicht genau wo das Maximum liegt, hab mal gelesen das 400 die Grenze zur Zeit ist (denke in der 1.68 dev), bitte korrigieren falls das nicht stimmt. Aber auch hier ist es nicht empfehlenswert alle KI Einheiten sofort zu setzten. Wenn du mit Scripten Arbeitest (Caching/Spawn) kannst du hier den Wert so hoch treiben wie du willst. Wichtig hier ist wie viel Einheiten gleichzeitig auf der Map agieren und was diese machen. KI im Kampf ist deutlich Performance lastiger als eine KI Einheit die gerade nur Wache schiebt. Hier hab ich auf unserem Server einen Richtwert von 50 bis max. 100 KI gleichzeitig, damit alles schön flüssig läuft
    .
    Eine weitere Möglichkeit ist ein HC einzusetzen der die KI Berechnung übernimmt. Auch hier sind mehrere möglich. Hab auch schon von 1000 KI gehört die auf mehreren HCs laufen, aber selber habe ich da keine Erfahrung gemacht. Vielleicht kann hier einer mehr dazu sagen, würde mich auch interessieren.

    Eine Kombination aus HCs und Scripten (Spawn/Caching) ist da sicherlich auch eine Möglichkeit. Um große Szenarien zu entwickeln.

    Trotzdem bleibt deine Trigger Anzahl bedenklich. da diese in einen gewissen Zyklus immer wieder abgefragt werden. Hier ist deutlich weniger mehr. (Trigger können ein ziemlicher Leistungskiller sein)

    Das du dann diese Mission auf einen Host laufen lassen willst ist schon Selbstmord. Ich bin mir sicher, das sogar ein dedicated Server das Ding nicht wirklich schluckt.

    Vielleicht Licht am Horizont:
    BIS arbeitet zur Zeit an Dynamic Simulation Link zur Wiki, dieses Option gibt dir die Möglichkeit Bereiche in der Simulation an und auszuschalten. Leider ist das noch Zukunftsmusik. Wie weit davon Trigger betroffen sind kann ich auch nicht sagen. Aber dies wird/kann/sollte/hoffentlich eine Möglichkeit sein neuen Missionsbauern ein Tool in die Hand zu geben, damit größere Scenario einfacher zu erstellen sind.

    Fazit:
    Egal wie man es dreht und wendet. Du wirst erst mal klein anfangen und Erfahrung sammeln müssen, bis du dich an so was großen versuchen kannst. Dazu gehört erst mal viel lesen und ausprobieren. Die Hardware vorausgesetzt, da eine solche Mission ohne dedicated Server sicherlich keine gute Idee ist.
    Auch wenn es hart ist nimm die Mission als Lehrgeld was du gezahlt hast und hau sie auf den Müll und versuch deutlich kleiner anzufangen und dich dann über besagte Scripte und Hardware an dein Ziel ran zu arbeiten. Vielleicht ist auch ein Clan-Beitritt eine Option für dich, dort findest du sicherlich helfende Hände die dich gerne unterstützen. Auch wäre dort die Hardware vorhanden.

    grüße und viel Erfolg von mir.... Nicht den Kopf hängen lassen... ArmA ist eine Bitc..... (manchmal jedenfalls :)
  • Die größte Mission die meine Gruppe hat ist um die 3MB. Aber mit custom Bildern sounds und scripts mit drin. Du schaffst das ganze schon allein mit der mission.sqm. Das ist vllt ein bisschen too much ^^

    Übrigens "Picture c:\users\tim\documents\arma 3\mpmissions\work2.altis\flagge al-junan.paa not found" Wenn du custom Texturen haben willst musst du diese auch in deiner PBO mitliefern und dann auch den lokalen Pfad also "flagge al-junan.paa" (nicht sicher ob das so richtig ist) nehmen anstatt den Globalen Pfad auf deinem Computer

    Ich sehe dort einige Ambient Animal Module. Ambient Animals sind schlecht für die Performance da sie KI sind die auch berechnet werden muss.
    In unseren Missionen schalten wir ambientAnimals über den enableEnvironment scriptbefehl aus sobald er in 1.68 verfügbar ist.
    Denn mich stört es schon wenn in einer Multiplayer Mission ohne Lokale KI 5% meiner frametime dafür verwendet wird Hasen KI zu berechnen.

    Als ich die Mission testen wollte bekam ich solche Meldungen in die RPT gespammed:
    Spoiler anzeigen

    Quellcode

    1. 13:24:14 Performance warning: Very large search for 758620 (>300 m)
    2. 13:24:16 Performance warning: Search for 758620: b_ficusc2d_f.p3d was very large (12300 m)
    3. 13:24:16 Performance warning: Very large search for 758619 (>300 m)
    4. 13:24:16 Performance warning: Search for 758619: b_ficusc2d_f.p3d was very large (12300 m)
    5. 13:24:16 Performance warning: Very large search for 758865 (>300 m)
    6. 13:24:16 Performance warning: Search for 758865: b_ficusc2d_f.p3d was very large (12300 m)
    7. 13:24:16 Performance warning: Very large search for 758864 (>300 m)
    8. 13:24:16 Performance warning: Search for 758864: b_ficusc2d_f.p3d was very large (12300 m)
    9. 13:24:16 Performance warning: Very large search for 758451 (>300 m)
    10. 13:24:16 Performance warning: Search for 758451: b_neriumo2d_f.p3d was very large (12300 m)
    11. 13:24:16 Performance warning: Very large search for 758554 (>300 m)
    12. 13:24:16 Performance warning: Search for 758554: b_neriumo2d_f.p3d was very large (12240 m)
    13. 13:24:16 Performance warning: Very large search for 758556 (>300 m)
    14. 13:24:16 Performance warning: Search for 758556: b_neriumo2d_f.p3d was very large (12240 m)
    15. 13:24:16 Performance warning: Very large search for 758559 (>300 m)
    Alles anzeigen


    und dann ist Arma Out of Memory abgestürzt.
    Das kommt wohl von den 332 aufrufen von "hideObject ([0,0,0] nearestObject 758620)"

    Wenn du die Logiken zum entfernen der Objekte schon in die Nähe der Objekte platzierst wieso suchst du dann von [0,0,0] aus und nicht von der Position der Logic die ja schon viel näher dran ist?

    Warum hat das Team das aus der CSAT Base in der Mitte kommt solche unmengen an wegpunkten nur um einer Straße zu folgen? Die KI bevorzugt sowieso auf der Staße zu fahren/laufen da braucht man keinen Wegpunkt alle 20 Meter.


    Das nächste was mich wundert ist warum du die Ganzen Texte für Aufgaben auf Englisch hast aber die Slotnamen dann wieder auf Deutsch? Wieso nicht einheitlich?

    Und warum ist Jedes kleine Dorf auf ganz Altis mit leeren Fahrzeugen vollgeklatscht? Ich verstehe nicht den Sinn dahinter das an Orten wo zu 99% niemals ein Spieler hingehen wird 3 dutzend Autos rumstehen.
    Die Wracks im südosten der Karte. Wenn Spieler da langlaufen wird ihnen garnicht auffallen ob da Wracks sind oder nicht. Es sieht vllt ganz gut aus ist aber vollkommen unnötig.

    Warum hast du im Süden gefühlt ein dutzend Trigger die alle genau das selbe tun anstatt nur einen Trigger?

    -- Ich habe gerade ausversehen Enter gedrückt und die Mission gestartet und mein Spiel ist wieder abgestürzt.

    Ich habe jetzt mal das dutzend Trigger im Süden, Ein haufen der sinnlosen Fahrzeuge und die Logiken die die Map objekte entfernen sollen entfernt.

    Spiel stürzt immernoch ab.

    Außerdem noch unmengen an

    Quellcode

    1. 13:56:11 Error in expression <With {false};
    2. private _destType = call compile (_logic getVariable "Destination>
    3. 13:56:11 Error position: <compile (_logic getVariable "Destination>
    4. 13:56:11 Error compile: Type Number, expected String
    5. 13:56:11 File A3\modules_f\Intel\functions\fn_moduleTaskSetDestination.sqf, line 28


    Allein aus den ganzen nutzlosen Fahrzeugen die dort rumstehen Simple Objects zu machen sollte einiges bringen. Wenn du die Fahrzeuge unbedingt behalten willst.

    So habe jetzt noch alle Grass Cutter, Schilder und alle Game Logics die objekte verstecken sollen (Habe vorher einige übersehen) entfernt.

    Jetzt konnte ich schon bis in Basis durchjoinen. Aber nach 30 sekunden rumgelagge mit 2fps ist Arma wieder abgestürzt.

    Lampen Wände und allerhand misc objekte entfernt. Die mission.sqm ist jetzt nurnoch 1.7MB

    KI berechnung benötigt 100ms pro frame. Die BIS Animal scripts ziehen 3ms pro Frame an scripts die ausgeführt werden (Also alle Ambient Animals entfernen und deaktivieren würde schon was bringen)

    30ms für irgentwelche physx Objekte. Vllt Dosen oder ängliches die keine simpleObject's sind obwohl sie es sein sollten.

    Berechnung der ganzen trigger auch nochmal 30ms pro Frame ungefähr.


    Also zum Optimieren:

    • alles was nicht nötig ist einfach glatt entfernen.
    • Simple Objects alles was möglich ist. Leerstehende fahrzeuge die eh nicht benutzt werden. Möbel. Mauern.
    • Dynamic Simulation für KI aktivieren auch wenn es momentan noch nicht funktioniert
    • Trigger anzahl verringern
    • Wegpunkt anzahl verringern (Nicht wirklich wichtig aber reduziert die größe der missionsdatei)
    Holy crap das sehe ich ja jetzt erst. Das sind ja gut 3 Dutzen trigger die über die gesamte Map gehen

    bei Schranke11 sind 3 Trigger aufeinander die alle die Schranke öffnen. Independant Opfor und Zivil. Wieso nicht einfach ein Trigger der bei jedem triggert?!

    Was sollen die Ganzen Mienen um die Spawn base? Die explodieren doch eh nicht. Und sind auch keine Simple Objects. Und schonwieder gefühlt ein dutzend Trigger über der Spawn base die alle das selbe zu machen scheinen. Und auch diese ganzen Design objekte in der base. Die Karten und Regale alle keine Simple Objects. Manche hast du ja zu simple Objects gemacht aber wiederrum andere nicht? Warum manche nicht?
    Und für die ganze kleinen objekte die da rumliegen wie die Reifen kann es auch wichtig sein das "Enable Simulation" aus ist. Denn kleine objekte haben oft Physx und wenn die Simuliert werden geht das sehr start auf die FPS.

    Deine Mission macht es übrigens anscheinend sehr einfach den 3FPS bug zu reproduzieren. Ich habe den Workshop Link mal an BI weitergeleitet.
  • dedmen schrieb:

    Deine Mission macht es übrigens anscheinend sehr einfach den 3FPS bug zu reproduzieren. Ich habe den Workshop Link mal an BI weitergeleitet.

    @dedmen, wenn das wirklich zur Lösung des 3FPS Bugs führt (Mission ist ja Vanilla) bekommst du und Shmindy je einen Kasten Bier geschickt. Ich drück euch die Daumen :thumbsup:

    Ansonsten Danke für das Aufschlüsseln der ganzen konkreten Punkte, denke das hilft vielen angehenden Missionsbauern die das hier lesen...
  • Erstmal ein dickes DANKE an die Community und für's Zeitnehmen, ich weiß das zu schätzen und das ist auf jeden Fall schonmal sehr hilfreiches Feedback!
    Mir war ja selbst schon bewusst, dass ich mir da als Einsteiger ein bisschen viel vorgenommen habe, zunächst sah es aber noch ganz machbar aus (bis zu etwa 7/10 der Inhalte ließ sich das Szenario für mich noch hosten bei niedrigen, aber spielbaren FPS).

    Ich kann eure Anmerkungen und Kritikpunkte gut nachvollziehen, Vieles davon hab ich mir auch schon gedacht. Aber bei mir ist das eben nur gefährliches Halbwissen, bei euch Erfahrung.
    Was die unzähligen Fahrzeuge überall auf der Karte, die doppelten Trigger, überflüssige Abfragen und die Wegpunkte (die stammen noch aus den ersten Tagen des Szenarios, als ich noch nichts über die Wegfindung der KI wusste) angeht, da kann ich euch nur zustimmen. Allerdings war anderes auch eine bewusste Entscheidung meinerseits (z.B. die doppelten Trigger an der Schranke, da CSAT eben nicht durch die Schranke fahren können sollte. Ich weiß auch nicht welche Trigger sonst noch überflüssig wären (davon habt ihr ja gesprochen), da es eigentlich wenige bis keine Dopplungen geben sollte, die Bedingungen und synchronisierten Objekte sind eigentlich immer verschieden denke ich.
    Die Minen sind vielleicht ein unnötiges Gimmick, aber da muss ich dedmen (ansonsten tausend Dank für dein Feedback und all deine Mühe) widersprechen, die explodieren :D
    Macht sie allerdings auch nicht weniger verzichtbar...
    Ehrlich gesagt fehlt mir das Wissen, um KI Einheiten nachträglich spawnen zu lassen und damit Performance freizumachen :-/ Da muss ich mich wohl noch reinarbeiten, genauso wie in's Scripten.
    Dass die Sprache uneinheitlich mal Englisch und mal Deutsch ist sollte noch überarbeitet und einheitlich in's Englische angepasst werden.
    Über einen desicated Server habe ich übrigens auch schon nachgedacht, allerdings sollte dazu natürlich erstmal die realistische Chance bestehen, dass das Szenario dort dann läuft, sonst würd ich mir das sparen wollen.
    Dass ich mithilfe der Spiel-Logiken Kartenobjekte entfernt habe ist leider für das Szenario nötig, da ich damit den Raum für jene neu erstellte Basis im Süden freimachen musste. Ansonsten gibt es da ja nirgends genügend Freifläche.
    Das Deklarieren jedes Objektes wie z.B. Ausrüstungsgegenstände, Karten, Waffen, Möbel, etc. als "simple Object" war leider nicht immer möglich, da die Objekte dann teilweise im Test durch das Gebäude, in dem sie positioniert wurden, geglitcht sind. Ich hab da viel rumexperimentiert, aber keine einheitliche Vorgehensweise ermitteln können, die auf alle Objekte anwendbar gewesen wäre. Deshalb gibt es da von Fall zu Fall Unterschiede, aber die haben in dem Fall tatsächlich einen Hintergrund.
    Tjoa und sonst... ich hab natürlich im Rahmen meiner Kenntnisse schon versucht zu optimieren wie ich konnte. Sowas wie die fehlende Bildtextur, deren Pfad auf meinen Rechner verweist, wären dann noch Kleinigkeiten, an die ich mich noch setzen wollte.
    Für mich war erstmal die Frage, ob das Szenario in diesem Umfang überhaupt eine realistische Chance hat spielbar zu werden, das habt ihr ja verneint. Dann muss ich wohl wirklich kleiner weitermachen :)

    In jedem Fall vielen Dank nochmal! Ich freue mich auch weiterhin über Feedback, wenn noch Jemand Lust hat sich mit dem Szenario zu beschäftigen. Ich denke ich werd anhand eurer Tipps mal versuchen das Szenario etwas zu zerpflücken und auf einzelne Missionsstränge zu reduzieren, zudem die Tipps bzgl. der Performance zu berücksichtigen.

    Schon sehr schade, ich glaub das hätte euch auch gefallen, wenn es in diesem Umfang hätte realisiert werden können :)

    Cheers!
    Tim/Shmindy
  • Sharp schrieb:

    Vielleicht Licht am Horizont:

    BIS arbeitet zur Zeit an Dynamic Simulation Link zur Wiki, dieses Option gibt dir die Möglichkeit Bereiche in der Simulation an und auszuschalten. Leider ist das noch Zukunftsmusik. Wie weit davon Trigger betroffen sind kann ich auch nicht sagen. Aber dies wird/kann/sollte/hoffentlich eine Möglichkeit sein neuen Missionsbauern ein Tool in die Hand zu geben, damit größere Scenario einfacher zu erstellen sind.
    Ich glaube der Hinweis war etwas untergegangen. Das in Kombination mit Simple Objekts sowie dem Löschen von Triggern könnte das Szenario spielbar machen.
    Jedoch müsstest du dazu mind. auf die nächste Arma3 Version (1.68) warten. Ich würde dir definitiv einmal empfehlen es damit zu testen.

    Alternativ könntest du das Szenario splitten und in Art einer Kampagne laufen lassen. Du meintest ja, dass du viele verschiedene Missionen erstellt hattest. Mit Copy/Paste sollte sich das ja "relativ" einfach übertragen lassen.
  • Shmindy schrieb:

    Dass ich mithilfe der Spiel-Logiken Kartenobjekte entfernt habe ist leider für das Szenario nötig, da ich damit den Raum für jene neu erstellte Basis im Süden freimachen musste. Ansonsten gibt es da ja nirgends genügend Freifläche.
    Das ist ja auch garnicht das Problem. Das Problem ist das dieser script befehl vom Ausgangspunkt nach außen in Kreisform weggehend in alle Richtungen nach diesem Objekt sucht.
    Deine Game Logic ist (beispiel) auf [1000,1000] und das objekt das du entfernen willst ist auf [1001,1000] also nur einen meter entfernt.
    Aber der scriptbefehl den du da hast sucht von [0,0] an. Das ist ein Kreis mit einem Radius von (1000²)/2 der da abgesucht wird bis das Objekt gefunden wurde.

    Wenn du anstatt [0,0] die Position der Game logic nimmst müssen nur ein Paar Meter abgesucht werden.

    Das script sieht einfach so aus als würdest du das einfach Copy-pasten und garkeine Ahnung haben was es eigentlich tut. Und wenn du garkeine Ahnung hast was du da gerade in deine Mission Kopierst machst du direkt schon was falsch. Du musst schon wissen was du da tust anstatt einfach rum zu kleistern.


    Außerdem haben Game Logics einen Nachteil.
    Nachdem deren Init script ausgeführt wurde liegen sie immernoch rum. Sie verschwinden ja nicht nachdem ihr script ausgeführt wurde.
    Also die 10 scripte von 10 game logic's die alle nah aneinander sind in eine einzige logic zu packen würde auch was bringen.