@jane: Ignoriere die FPS für eine Zeit lang einfach mal total, betrachte stattdessen nur die ms-Werte, sprich wie viel Zeit für Rendering, Skript, usw. benötigt wird, da die Differenz in Frameraten trügerische Schlüsse zur Folge haben kann.
Läuft dein Spiel bspw. bei 500fps, so wird 2ms für das Ausführen deines Skriptes und das Rendern benötigt. Fügst du nun bspw. ein Modell hinzu und das Rendering steigt um 1ms, so sind es nur noch insgesamt 1000/3(ms) = 333fps.
Läuft dein Spiel bei 50fps, so ist das äquivalent mit einer Zeit von 20ms für alle Teilrubriken. Nun hat ein Modell, welches angenommen immer noch eine ms kostet, nur noch einen scheinbaren negativen Effekt von 50-1000/21 ~= 2,4fps, im Gegensatz zu den 167fps zuvor. Dementsprechend ist der Aufwand, den man betreiben muss, um die Framerate von 50 auf 60 zu heben, ein vielfaches größer als der für die Beschleunigung von 150 auf 160 Frames pro Sekunde.


Die Animation eines Modells scheint so trivial, ist aber ein rechnerisch sehr aufwändiger Prozess, wie das folgende Beispiel verdeutlicht:
Animiert man ein Modell mit 2000 Vertices, bspw. mittels ent_animate (die Anzahl an Frames müsste ziemlich egal sein, aber sagen wir hier mal, die walk-Sequenz bestehe aus 10 Frames), wie folgt:
ent_animate(me,"walk",my.skill20,ANM_CYCLE); //my.skill20 = 25 bspw.
so resultiert das in folgendem Aufwand:
my.frame wird zu 2, my.next_frame wird zu 3, und der Anteil der Überblendung zwischen beiden Frames beträgt 50%. Möchte man eine Framerate von 60 Bildern pro Sekunde erreichen, so müssen je Sekunde 60*2000 Interpolationen durchgeführt, sprich je Vertex aus Frame 2 zu Frame 3.
Die Interpolation eines Vertex bedeutet eine
x*(1-t) + y*t bzw. x + t*(y-x)
Konvexkombination mit t aus [0,1], also mind. 3 Operationen je Koordinate, also 9 pro Vertex. Das macht insgesamt 60*2000*9 = 1.080.000 Operationen, die allein für die Vertex-Animation eines einzigen Modells mit relativ wenigen Vertices durchgeführt werden müssen.
Daher ist die Animation so kostenintensiv und es lohnt sich meist, diese auf die Grafikkarte auszulagern, weil besagte Berechnungen dort von den Shadereinheiten übernommen werden können.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends