Speed Speed Speed



  • Servus!

    Hoffentlich kann mir einer helfen!!! Die Grenze meines Computers ist ein großes Problem! So würde ich gerne mehrere tausende Bestien gleichzeitig auf den Computerspieler loslassen. Aber meine Framerate wird schon bei 100 Gegnern auf 5 Frames gebremst. Meinem Prozessor kann ich keine Vorwürfe er arbeitet schon ziemlich schnell. Was für Tricks könnte ich nun anwenden um meinem Computer die arbeit leichter zu machen dass er dann mit den tausenden Gegnern spielend fertig wird? Ich hab schon so manchen Trick angewandt also dass zum Beispiel weiter entfernte Gegner nicht mehr gerendert werden. Was könnte ich noch tun 😕

    Danke im Voraus 🙂



  • Weniger detaillierte Figuren
    Optimiertere KI
    Culling verbessern



  • @Stephan Sellien
    Figuren bestehen praktisch nur aus einem Cube 🙂
    Optimierte KI: das wird wahrscheinlich mein Ansatzpunkt sein müssen
    was ist culling?



  • Wie und womit renderst du die Grafik? Welcher Art sind die Daten deiner Objekte und wie verwaltest du sie?



  • Mit DirectX.
    Wie meinst du welcher Art sind die Daten deiner Objekte 😕 Jeder Gegner ist ein Objekt Struct das ich in der Hauptschleife durch eine Reihe Verarbeitungsalgorithmen schicke. Werde dann wahrscheinlich weiter entfernt liegenden Gegnern eine extra Verarbeitungsschleife spendieren muessen die nicht so umfassend ist!



  • Jetzt mal gaaaaaaaaaaaaaaaaaaaaaaaaaanz langsam! 😃

    Profiler benutzen, Zeitmessungen einbauen. Die Wahrscheinlichkeit, dass du durch blindes Optimieren genau das Richtige erwischt ist gering. Mach erstmal genau ausfindig, wo der Flaschenhals ist. Vielleicht ist es nichtmal die Grafik, sondern die KI?



  • Ja es ist die KI die meinen PC aufhaltet! Ich hab jetzt mal alle Gegner weggeschalten die nicht in einem bestimmten Radius um den Spieler liegen! Framerate hat sich zwar ein bischen verbessert aber doch nicht wesentlich! Haette mich ja auch gewundert wenn die ganze sache fluessig abgelaufen waere denn ich kann von meinem Computer nicht verlangen dass er 1000 gegner gleichzeitig bewegen, sie kaempfen und sterben 😃 lassen kann. Muss jetzt schauen wie ich die ganzen Algos vereinfachen kann. Vorallem sollte die ki ja auch ohne Fehler von statten gehen und das fuer 1000 gegner ist schon ne herausforderung! ideen wie die fussbewegungen einzelner gegner synchron schalten damit weniger daten berechnet werden muessen sind mir eingefallen, aber das verkomplitziert alles enorm! aber genau hier liegt ja auch der Spass. Hier kann man seiner kreativitaet freien Raum lassen 🙂



  • SpaceMonkey: Optimizer hat Recht, Du solltest auf alle Fälle mal den Profiler Deines Vertrauens anwerfen, so einfach ins Blaue hineinzuoptimieren macht keinen Sinn!



  • Ich weiß ja, dass der Schwachpunkt bei der KI liegt. Hier liegt die große Herausforderung. Wenn ich es nur mit einzelnen Gegnern sprich nicht gleich um die 1000 zu tun hätte könnte ich viel genauer auf den einzelnen Gegner eingehen. Ich habe es aber mit 1000 zu tun und das heißt dass ich nicht auf jeden Gegner einzeln eingehen kann - was ich bis jetzt gemacht habe - und dass es klar ist das hier die ganze Geschwindigkeit flöten geht! Muss irgendeinen Weg finden wie ich es bewerkstelligen kann dass jeder Gegner zum Beispiel erkennt wenn er vor einem Hindernis steht oder dass zum Beispiel jeder Gegner erkennt wann er getroffen worden ist. Jetzt habe ich es so gemacht dass einfach jeder Gegner in einer Schleife durchgegangen wird und auf die Umstände in denen sich jeder Gegner befindet eingegangen wird. Solch eine Methode ist zwar die einfachste und wäre wahrscheinlich auch die sicherste mit den wenigsten Bugs aber sie ist schlicht nicht machbar. Hier müssen halt Tricks angewandt werden. Stehe aber (noch) im Dunkeln und muss überlegen wie dieses Problem am besten bewältigt werden kann. Hat einer von euch vielleicht eine Idee wie das gehen könnte 😕 Wäre sehr dankbar



  • SpaceMonkey schrieb:

    Ich weiß ja, dass der Schwachpunkt bei der KI liegt.

    Das sagt nicht viel aus. Lass einen Profiler drüberlaufen und schau wo genau die Hotspots Deines Programms liegen! (D.h. versuche wirklich herauszufinden in welcher _Methode_/ Funktion oä die meiste Zeit verbracht wird, nicht nur in welchem Teil des Programms.)



  • Und wenn deine kritische Methode mehr als 15 Zeilen hat, dann teile sie in kleinere Methoden auf und lass den Profiler nochmal darüber laufen.
    Wenn du nen wirklich krassen Hotspot gut optimieren kannst, macht das verdammt viel aus.
    Wenn er sich dann nicht mehr weiter optimieren lässt, dann überlege, wie du ihn weniger oft aufrufen kannst (Bps. Wegfindung: nur Hindernisse im Umkreis erfassen, ö.ä.).



  • Danke für die viele Hilfe! Ich versuch mal was ich kann! Wenn es irgendwo Probleme gibt melde ich mich wieder! 😃



  • Welchen Profiler benutzt du?



  • keine ahnung was culling ist aber meinen das die KI methoden das hauptproblem sind...soso

    bye

    tt



  • Ich weiss nicht genau wie es bei Battlefield 1942 gemacht wird, aber dort werden weiter entfernte Objekte weniger detailiert dargestellt.
    Ich weiss aber nicht, ob die für jede Detailstufe ein eigenes Modell haben, oder ob die das per Algorithmus zur Laufzeit lösen.



  • Bei Battlefield gibt's ehh nicht 1000 Gegner (mmhh, warum wohl?). Was bringen Dir eigentlich 1000 Gegner (gleichzeitig), das wäre doch höchstens bei einem RTS sinnvoll.

    Bye, TGGC



  • Ein Battefield mit 1000 Gegnern wär bestimmt lustig 😃
    Ok, sagen wir 100 und dann bei 3 facher Kartengrösse.
    Ausserdem, sehr geehrter Herr TGGC, wollte ich damit nur ein Beispiel für Detail-Stufen nennen 😉



  • Cpp_Junky schrieb:

    Ich weiss nicht genau wie es bei Battlefield 1942 gemacht wird, aber dort werden weiter entfernte Objekte weniger detailiert dargestellt.
    Ich weiss aber nicht, ob die für jede Detailstufe ein eigenes Modell haben, oder ob die das per Algorithmus zur Laufzeit lösen.

    Ist fraglich ob eine Realtimeberechnung der Objektdetailstufe ein sinnvoller Weg ist die Framerate zu erhöhen.



  • So hab mich jetzt ein bischen informiert. Was bringt mir Culling wenn ich sowieso weiß dass meine Engstelle nicht die Grafik ist? Wie schon gesagt bestehen meine Gegner zur Zeit ja praktisch nur aus Quadern. Folglich habe ich jetzt zum Beispiel alle Gegner außerhalb eines bestimmten Umfelds einfach aus der Renderpipeline gestrichen und keine wunderbaren Verbesserungen bezüglich Framerate erhalten.

    Auch bin ich der Ansicht, dass ein Profiler mir keine wirklichen neuen Engstellen zeigen könnte die ich nicht schon wüßte! Denn mein Spiel besteht zur Zeit außer Grafik und Ki aus keinen weiteren Komponenten. Wo sollte die Geschwindigkeit also versieben wenn ich weiß dass es die Grafik nicht ist?

    Warum sollte man nicht 1000 Gegner in ein Spiel packen? Ist doch langweilig wenn man nur gegen einen Alien kämpft oder? Serious Sam zum Beispiel hat die ganze Sache mächtig gut hinbekommen. Die haben sicher auch Tricks anwenden müßen um auf solche Gegnermaßen zu kommen! Wenn jemand Ideen hätte wie ich die Ki so klein aber auch so effizient wie möglich halten könnte wäre ich echt Dankbar!



  • kommt drauf an was deine KI leistet/leisten soll und wie du es umgesetzt hast. Müsstest du schon herzeigen


Anmelden zum Antworten