Forum: PC-Programmierung Spieleprogrammierung: Maximale Framerate oder geringere CPU-Last?


von Anton (Gast)


Lesenswert?

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?

von Flo (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

Die einzelnen Threads vernünftig gegeneinander priorisieren.

von Ohforf S. (ohforf)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

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.

von joa (Gast)


Lesenswert?

Wenn du die Framerate limitierst und das Spiel immer gleich schnell 
läuft, würde das auch anderen Teilen des Spiels zu Gute kommen:

http://gafferongames.com/game-physics/fix-your-timestep/

von Fer T. (fer_t)


Lesenswert?

Kleine Anmerkung:

Es ist blödsinn 60 FPS, selbst Kinofilme haben nur 24 und man merk es 
nicht.

von hennes (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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".

von hennes (Gast)


Lesenswert?

wie nennt sich eigentlich das spiel welches hier entwickelt wird? ;)

von Benni L. (sutter_cain)


Lesenswert?

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.

von Arnold Zimmermann (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.