FPS besar vs FPS konsisten

8

Ketika mengoptimalkan frame rate sebuah game, kapan saya harus fokus pada FPS besar dan kapan saya harus fokus pada frame rate yang konsisten.

Ini adalah masalah yang sering diperdebatkan, jadi harap dicatat saya tidak menanyakan mana yang lebih baik.

Apa pro dan kontra dari masing-masing?
Dalam situasi apa yang lebih disukai daripada yang lain?

Perhatikan juga: jajak pendapat / pemrosesan input saya, fisika, dan tingkat pembaruan game tidak tergantung pada frame rate saya. Satu-satunya hal yang mempengaruhi FPS adalah seberapa sering layar ditampilkan.

deft_code
sumber

Jawaban:

10

Ini subjektif, tentu saja, tetapi saya pikir konsistensi jauh lebih penting untuk bermain game daripada kecepatan.

Pada dasarnya, pemain akan memasang frame-rate yang lebih lambat jika permainannya konsisten, menyenangkan untuk dimainkan dan tidak menggelegar. Namun, bahkan jika permainan benar-benar mengguncang, jika itu membuat orang sakit kepala untuk melihatnya karena meledak, dan / atau mereka tidak bisa mengendalikan sesuatu, mereka akan menjadi jengkel & berhenti bermain.

Begitu...

Fokus pada FPS yang konsisten di seluruh desain & pengembangan.

Fokus pada FPS yang lebih cepat (namun tetap konsisten) ketika permainan hampir selesai, dan Anda punya waktu untuk meningkatkan kinerja tanpa khawatir tentang perbaikan bug, dll.

Salah satu cara untuk mendapatkan kinerja yang lebih baik adalah menggunakan panggilan balik / delegasi / interupsi (tergantung pada bahasa / platform Anda) daripada polling.

Olie
sumber
9
Satu catatan cepat lainnya: kecepatan objek objek dalam "... per detik", bukan "... per frame." Bahkan jika Anda mendapatkan FPS yang hampir seragam, akan ada beberapa varian, dan memindahkan objek "10 'per detik" akan bekerja lebih baik daripada "0,1' per frame" (dengan asumsi 100FPS), karena 10 '/ detik akan benar bahkan jika frame-time agak mati.
Olie
13

Apa yang harus Anda lakukan:

  • Kunci logika game ke framerate tetap
  • Jadikan grafik secepat mungkin

Dengan begitu, jika framerate menjatuhkan Anda tidak mendapatkan input lag (saya sedang melihat Anda, Just Cause 2), dan jika framerate menjadi terlalu tinggi (pikirkan game dari 90-an) permainan tidak menjadi tidak dapat dimainkan.

Begini cara saya melakukannya:

s_PhysicsCurrent = GetTickCount();
float delta = (float)(s_PhysicsCurrent - s_PhysicsStart);
s_PhysicsStart = s_PhysicsCurrent;

s_PhysicsTime += delta;

while (s_PhysicsTime > ONEFRAME)
{
    // Update
    Game::Tick(ONEFRAME);

    // Clear input
    Keyboard::Clear();
    Mouse::Clear();

    s_PhysicsTime -= ONEFRAME;
}

s_Window->Clear();

Game::Render();

s_Window->Swap();

Anda pada dasarnya mengumpulkan "tumpukan" bingkai untuk melakukan logika dan Anda dapat menyisipkan di antara mereka dengan sempurna.

knight666
sumber
2

Sepertinya Anda memiliki setidaknya dua utas eksekusi, dengan rendering Anda pada utasnya sendiri. Jika itu masalahnya, maka Anda sebenarnya memiliki dua frame rate yang perlu dikhawatirkan. Anda ingin keduanya secepat mungkin. Namun, itu juga tergantung pada jenis gim yang Anda bangun.

Apakah Anda membangun penembak orang pertama, di mana penurunan kecil dalam frame rate bisa memberi keuntungan pada lawan? Jika demikian, maka Anda ingin memastikan fps rata-rata Anda cukup tinggi, tetapi juga khawatir tentang kerangka waktu terburuk Anda. Apakah Anda membangun permainan papan? Jika demikian, lonjakan waktu bingkai sesekali tidak akan membunuh pengalaman pengguna.

Dalam gim saya sendiri, proses saya biasanya kira-kira seperti ini:

  • Jalankan profiler pada kode
  • Lihatlah frame rate rata-rata. Jika rata-rata terlalu rendah, naikkan rata-rata fps dengan mengoptimalkan barang yang lambat.
  • Setelah fps rata-rata cukup tinggi, cari waktu bingkai terburuk (frame di mana Anda melihat lonjakan besar dalam waktu komputasi atau rendering). Cobalah untuk mengoptimalkan skenario terburuk untuk meningkatkan kerangka waktu terburuk.

Jika Anda pada 30 fps sebagian besar waktu, tetapi Anda lonjakan hingga 200 ms setiap 10 detik, itu akan menyebabkan masalah. Tetapi jika Anda rata-rata 15 fps, naikkan fps rata-rata Anda terlebih dahulu.

Jadi, jawaban singkatnya mungkin: mengoptimalkan apa pun yang membuat peningkatan terbesar pada pengalaman pengguna terlebih dahulu.

OTrain13
sumber
2

Mengunci FPS Anda ke nomor yang konsisten memungkinkan Anda untuk:

  • Pertahankan tampilan visual yang halus
  • Biarkan animasi tetap berjalan dalam waktu linier, objek fisika jatuh pada kecepatan yang konsisten di antara frame, dll.
  • Namun, bagian yang paling berguna dari mengunci FPS Anda adalah pada frame di mana Anda memiliki waktu istirahat Anda dapat melakukan pekerjaan lain - mengumpulkan sampah, bekerja pada streaming di area peta berikutnya, dll dan Anda akan memiliki beberapa ruang kepala saat merender sesuatu yang besar dan berkilau atau saat merobohkan tumpukan kotak.
Sean James
sumber
+1: meskipun saya tidak setuju dengan peluru kedua Anda. Blok jatuh hanya perlu 1 detik untuk melintasi layar apakah itu digambar 6 kali atau 60.
deft_code
2
Benar, maksud saya karena di dalam kotak tampaknya tidak melompat dari satu posisi ke posisi lain karena perbedaan waktu antara pengundian. Gerakan yang halus lebih disukai daripada gerakan sporadis yang disebabkan oleh langkah waktu variabel.
Sean James
1

Kedua. Menurut saya idealnya, secara konsisten lebih dari 60 frame per detik. Secara realistis, secara konsisten lebih dari 30 frame per detik. Di bawah 30 frame per detik dan itu mulai mempengaruhi seberapa baik pemain dapat melakukan (saya sedang memikirkan FPS / permainan berbasis kedutan omong-omong, game strategi mungkin bisa bertahan dengan lebih rendah).

Jika Anda benar-benar harus mengatakan yang satu atau yang lain, saya akan pergi dengan konsisten. Jika Anda dapat menjamin frame rate, maka Anda dapat fokus pada perpindahan yang dijamin framerate lebih tinggi.

Zwergner
sumber
1

Lebih besar selalu lebih baik, tetapi:

Framerate yang tidak konsisten dapat menyebabkan mabuk kendaraan.

(Kami memiliki tester internal muntah ketika framerate-nya melompat antara 20 dan 60 selama 10 detik.)

Andreas
sumber
3
Apakah Anda yakin tester tidak digantung?
Sam Harwell
0

Saya pikir Anda ingin FPS yang konsisten dan lebih besar. Semakin halus grafik (karena kecepatan refresh), semakin baik. Jika mulai turun di bawah 30FPS, pengguna Anda akan mulai melihat kegelisahan dan akan menjadi frustrasi dengan kurangnya waktu respons untuk bertindak.

Bryan Denny
sumber
0

Jika Anda ingin mencegah robeknya , Anda harus menggunakan V-sync yang akan mengunci FPS ke refresh rate monitor, atau lebih rendah (jika Anda naik lebih tinggi itu tidak akan terlihat, jadi itu akan sia-sia).

Bart van Heukelom
sumber
-4

Hanya ada satu jawaban, dan itu adalah .. selalu menjadi tinggi selama pengembangan dan ketika turun Anda membawanya ke lonjakan terendah, ini akan membawa permainan ke aliran mantap sakit. Saya duduk di kode, dan itu akan tetap di sana karena itu adalah cara rahasia saya dari pengkodean naga. / Eyhe

Eyeh
sumber
Mengapa? Apa itu "lonjakan terendah"?
Anko
3
-1 Ini bukan jawaban. Ini semacam puisi vogon.
MichaelHouse