Speed Speed Speed
-
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 AufbauJa 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?
-
DAS würde ich allerdings auch gerne mal wissen.
@Topic: Damit mir (von einem bekannten Herren) nicht gleich weiter vorgeworfen wird OT zu werden, hier noch was on-topic. Der Threadersteller könnte mal nach Flocking und Boids bei Google suchen, das bezieht sich auf das Thema Herden bei der AI.
cya
liquid
-
Die Psychoanalyse von TGGC hatten wir hier schon mal. Resultat: nicht registrierte dürfen hier nicht mehr posten. Also bitte sein lassen, sonst darf hier bald gar keiner mehr posten.
-
Danke erst mal! Hätte nicht gedacht, dass es soviel Information über Rudelverhalten im Netz gibt!
Hier werde ich jetzt erstmal eine Weile daran knappern müssen
Danke für die viele Hilfe
Dank auch an TGGC