Ich entwickele seit einiger Zeit an einem Open Source Spiel. Zunächst
war die Engine auf 10 Frames pro Sekunde festgelegt. Dann haben sich
einige User über die nidrige FPS Rate beschwert, und wir haben den Tipp
bekommen, dass die Grafik-Engine einfach so viele Frames, wie
CPU-Kapazität übrig ist, zeichnen soll. Haben wir dann im nächsten
Release gemacht. Dann kamen die Beschwerden, dass das Spiel die CPU
komplett auslastet und auch nicht mehr so flüssig reagiert.
Was ist die allgemein übliche Vorgehensweise für Spiele?
Vernünftig ist, die Framerate auf die Wiederholrate des Bildschirms
anzupassen.
Flachbildschirme machen meist 60Hz, mehr Frames zu berechnen ist
sinnlos.
Bei guten Spielen gibts meist einen Schalter für "enable VSync" oder so.
Ansonsten kann man auch ein Option einbauen, mit der der Spieler seine
gewünschte Framerate eingibt.
Wenn ein altes Spiel auf meiner Höllenmaschine 300 Frames/sec berechnet,
steigt nur der Stromverbrauch und die Lüfter werden laut.
Leider sieht man selten ein Spiel, bei dem die CPU schläft - fast alle
brauchen 100% CPU.
Ohforf Sake schrieb:> Leider sieht man selten ein Spiel, bei dem die CPU schläft - fast alle> brauchen 100% CPU.
Naja bei einem Grafikbomber wird man da auch nicht drumrum kommen.
Wenn du nen Querschnitt machen willst, klingt 30fps ganz gut.
Flo schrieb:> Für n ruckelfreies Game brauchste mindestens 20-25 Fps.>> Ich würd das Game auf ca. 30 Fps festnageln, dann merkt man vom Ruckeln> nichts.
Oh doch, das merkt man, da bei Spielen im Allgemeinen die
Bewegunsunschärfe fehlt, die ein Video hat. Ich sehe jedenfalls einen
sehr deutlichen Unterschied zwischen 30 fps und 60 fps.
Anton schrieb:> Was ist die allgemein übliche Vorgehensweise für Spiele?
Die üblichen Varianten, die ich kenne, sind entweder unbegrenzte
Framerate oder VSync, in der Regel umschaltbar im Programm. Wobei man
bei eingeschaltetem VSync das Problem hat, daß die Frameraten sich sehr
plötzlich in großen Schritten ändern, wenn der Rechner nicht schnell
genug ist, um die vollen 60 Hz zu schaffen. Wenn er z.B. gerade 59 Hz
schaffen würde, wird schon gleich mal auf die Hälfte, also 30 Hz,
runtergeschaltet. Das nächste ist dann ein Drittel, also 20 Hz. Da die
Komplexität des Bildes sich ja dauernd ändert, wechselt das dann öfters
mal, und diese plötzlichen Wechsel fallen recht unangenehm auf. Deshalb
tendiere ich dazu, VSync auszuschalten, wenn mein Rechner nicht in
wirklich jeder Situation die 60 Hz voll schafft.
Ich würde es konfigurierbar machen, dann kann sich's jeder aussuchen,
wie er es haben will.
da hat wohl noch einer keine action games gezoggt, oder schnelle
renngames.
kla braucht man bei einem aufbau spiel wie siedler und anno keine high
fps, aber spiele wir dirt2 und undreal tournament macht es durchaus sinn
die 60fps zu halten.
Du merkst es nicht, wolltest du sagen. Kinofilm flimmert gnadenlos, für
Leute mit schnelleren Augen.
Normalerweise ist die Framerate fest (und möglichst synchron mit der
weiteren Verarbeitungskette sonst gibt es vor allem bei geringen
UNterschieden Aliasingeffekte, Ruckeln) und die Spielesoftware berechnet
das Bild für genau den Zeitpunkt an dem der nächste Frame angezeigt
werden soll. Ist sie damit früher fertig, beginnt sie schon das nächste
Bild (double buffering). Erst wenn auch das schon fertig gerechnet ist,
und das erste Bild noch immer nicht weggeschickt wurde, dann hält sie an
und übergibt die Rechentzeit dem Betriebssystem, schliesslich nützt es
nichts, sekundenlang vorauszurechnen, und auf keine Benutzerreaktion
mehr einzugehen.
Schaffte sie das nicht, das Bild zu berechnen, wird das Detail zum
nächsten Bild hin verringert oder sonstwie darauf reagiert "Hilfe, mehr
GPUs nachrüsten".
MaWin schrieb:> Du merkst es nicht, wolltest du sagen. Kinofilm flimmert gnadenlos, für>> Leute mit schnelleren Augen.
Hehe, das musst du mir jetzt nochmal genauer erklären ;)
http://webvision.med.utah.edu/GCPHYS1.HTM
Ich befürchte nur, das ist nicht so einfach erklärt :D
Also ich Spiele schon seit einiger Zeit Quake und dort habe die Frames
auf 125 FPS beschränkt. Desweiteren ist es immer schön wenn man so viel
wie mögliche Frames berechnet, damit man das Spiel auch zu Benchmarks
heranziehen kann.
Wie wärs ihr macht da eine Variable die man einstellen kann in eure
Engine. Dann kann das jeder für sich entscheiden.
Im übrigen passt auf dass eure Physik komplett unabhängig von der
Framerate ist, das führt zu verrückten Bugs.
http://www.funender.com/quake/articles/strafing_theory.html
Kannst du eigentlich mal ein Link zu eurem Spiel posten? Würde mich
schon interessieren was das ist.
Anton schrieb:> Zunächst> war die Engine auf 10 Frames pro Sekunde festgelegt.
Wer hatte denn die Schapsidee?
Anton schrieb:> wir haben den Tipp> bekommen, dass die Grafik-Engine einfach so viele Frames, wie> CPU-Kapazität übrig ist, zeichnen soll.
Das ist die übliche vorgehensweise, wobei es natürlich sinnvoll sein
kann, die Framerate auf die Frequenz des Monitors zu begrenzen, d.h. in
der Regel auf 60 FPS.
Anton schrieb:> Dann kamen die Beschwerden, dass das Spiel die CPU> komplett auslastet
Das ist doch normal. Wer will den parallel zum Spiel noch ein anderes
Programm am laufen haben? Wenn ich ein Spiel starte, dann hat es den PC
für sich alleine und kann natürlich 100% CPU-Zeit belegen.
Anton schrieb:> und auch nicht mehr so flüssig reagiert.
Das ist dann aber eher auf schlechte Programmierung zurückzuführen.