Speed Speed Speed



  • 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



  • Ich bezweifle dass der Code etwas bringen würde da den keiner mehr wirklich verstehen würde ausser ich 🙂 aber so ungefähr: ich gehe halt auf jeden Gegner in einer Schleife explizit ein, laße ihn in dieser Schleife auf den Gegner zulaufen, testen ob er vor einem Hindernis steht testen ob er schon in Kontakt mit dem Spieler ist wenn ja schlägt er zu. Alles halt ziemlich Zeitaufwendig da auf jeden Gegner eingegangen werden muß. meine idee ist jetzt dass ich bei weiter entfernt liegenden Gegnern jetzt die Funktionen ob er den Gegner berührt und wie er auf den Spieler einschlägt weg lasse da er sowieso noch nicht im Kontakt mit dem Spieler steht. Ich schau jetzt mal ob das irgendwelche Einflüße auf die Framerate hat!



  • Wenn du so viele Gegner haben willst, kannst du halt nur die wirklich berechnen, die im direkten Kontakt (Sichtfeld) mit dem Spieler stehen und bei den anderen nur dafür sorgen, das sie nicht in eine Wand rennen oder ähnliches.

    Culling ist das Entfernen von Objekten vor dem Rendern, um Berechnungen der Grafikkarte (Transformation, Beleuchtung) zu ersparen. Ist aber sinnlos zu optimieren, wenn die KI die Schwachstelle ist.



  • Bei einer Gegneranzahl von 2000 komme ich jetzt nun wenn ich nur noch die Gegner in die KI miteinbeziehe die um den spieler stehen schon auf 18 Frames. Das ist aber bei weitem noch zu wenig! Muß mir noch was anderes einfallen lassen!



  • @cpp_Junky: Und ich nur ein Beispiel, das 1000 Gegner unsinnig sind.

    @Spacemonkey: Weil ein Mensch sich nicht auf mehr als durchschnittlich 7 Dinge gleichzeitig konzentrieren kann. Und schau dir doch Serious Sam mal genau an, da sind auch nicht alle 1000 Gegner _gleichzeitig_ da, sondern die werden immer wieder in neuen Wellen gespawned.
    Aber da du ja sowieso keinen Rat annehmen willst... Warum fragst du hier überhaupt?



  • Bis jetzt wurde folgendes vorgeschlagen:

    weniger detaillierte Figuren -> meine Objekte bestehen nur aus Cubes
    weiter entfernte Figuren weniger detailliert darstellen -> "
    Culling verbessern -> "
    Optimierte KI -> ja hier liegt ja das Problem!
    Profiler benutzen -> ich weiß ja wo Problem liegt und zwar nicht nur in
    einer Funktion sondern in dem ganzen Aufbau

    Ja es liegt ja nicht an dir zu entscheiden ob mein Spiel gut wird oder nicht bzw. ob es Sinn macht oder nicht. Serious Sam hat ja auch ne Menge Spaß gemacht, und da traf man schon mehr als 7 Gegner an.
    Was meinst du mit in Wellen gespawned? Ist das vielleicht ein Rat von dir 😕



  • Jetzt hör mal zu:

    Wenn du keinen Profiler nutzt und keine Zeitmessungen einbaust (oder beides nicht machst), dann weisst du NICHT, wo der Flaschenhals ist. Natürlich kann man was vermuten, aber überleg mal, wie gering die Wahrscheinlichkeit ist, dass du genau die allerkritischste Stelle in 10.000 Zeilen Source errätst.
    Benutz nen Profiler und zerlege dann die kritische Funktion immer weiter, bis du genau die Schleife (oder was auch immer) hast.
    Man sagt (und es stimmt): 90% der Laufzeit werden in 10% des Codes verbracht. Nehmen wir mal an, du kannst dein Programm an bestimmten Stellen wirklich doppelt so schnell machen. Dann hast du in den 10% Laufzeit halt 5% und hast immer noch 95% Laufzeit. Die Wahrscheinlichkeit, dass du die 10% Source, die kritisch sind, optimierst, geht gegen 0.

    Und das schönste: In den restlichen 90% Code kann man nach Herzenslust Exceptions, asserts und andere Prüfungen einbauen, ohne dass es die Performance belastet. Es lohnt sich also, bescheid zu wissen.

    (btw, 1000 Gegner erscheint mir auch ein wenig übertrieben.)

    Jetzt lass dir das mal durch den Kopf gehen und zieh dir z.B. CodeAnalyst von AMD. Wie TGGC schon sagt, du kannst unseren Rat annehmen, oder es lassen.



  • Optimizer schrieb:

    Die Wahrscheinlichkeit, dass du die 10% Source, die kritisch sind, optimierst, geht gegen 0.

    Naja, eigentlich beträgt sie sogar um die 10% allerdings ist das immernoch ein bisschen wenig... 😉

    Zu den 2000 Gegnern: Bei SeriousSam waren garantiert nicht derartige Gegnermassen gleichzeitig zu bekämpfen, in heftigen Sequenzen mögen vielleicht bis zu 100 gleichzeitig sichtbar gewesen sein, sowas kann ich nicht gut abschätzen, aber >=1000 wäre einfach viel zu viel gewesen...



  • Ja, ich schau mal was mir der Profiler bringen mag! Bin zwar skeptisch aber mal schauen



  • Hey, du bist ja doch nicht unbelehrbar. Der Tipp der in der Liste noch fehlt: "Mache keine 1000 Gegner gleichzeitig."



  • Angenommen die AI ist wirklich der Knackpunkt dan wäre es ja eine Überlegung 1000 Gegner durch 100 Gruppierungen a 10 Gegner zu generieren.
    Eine Gruppe wird intern von einer AI betreut, die 10 Mitglieder der Gruppe verhalten sich in etwa gleich. Halt sowas ähnliches wie eine Herde.

    cya
    liquid



  • @LiquidAcid: Deine Idee ist sehr interessant! So würde man sich sicher einige Rechenzeit sparen. Aufwand es umzusetzen dürfte natürlich ein größerer werden aber ein Versuch kann nicht schaden!

    @TGGC: Neinnein, ich bin immer für etwas neues offen 😉



  • TGGC schrieb:

    Aber da du ja sowieso keinen Rat annehmen willst... Warum fragst du hier überhaupt?

    Dir geht es doch auch nicht darum zu helfen... Warum antwortest du hier überhaupt?


Anmelden zum Antworten