Apakah semua game dibuat dengan menggambar setiap frame?


60

Saya seorang pemula yang belajar tentang animasi komputer (untuk game). Sejauh ini, satu-satunya metode yang saya temui adalah menggambar setiap frame, setiap pembaruan frame. Jadi pada awal setiap frame, seluruh frame dihapus, dan kemudian hal-hal untuk itu diperlukan agar frame digambar ulang.

Pertanyaan saya adalah apakah atau tidak metode ini adalah satu-satunya yang digunakan untuk membuat animasi dan game. Sepertinya agak tidak efisien. Saya juga tidak begitu mengerti bagaimana metode ini akan bekerja untuk game 3d . Bisakah seseorang tolong jelaskan ini lebih terinci?


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Josh

John Carmack hampir menemukan pendekatan pada PC untuk melakukan pengguliran sisi layar penuh dengan menggambar hanya potongan vertikal tipis dari layar yang telah berubah. PC sama sekali tidak dapat memperbarui tampilan layar penuh dengan cukup cepat tanpa teknik ini. Dia menggunakan ini pada banyak game 2d di awal 90-an seperti Commander Keen. Baca "Masters of Doom" untuk info lebih lanjut.
Ash

Jawaban:


68

Game yang sangat lama menggunakan teknik di mana hanya bagian-bagian bingkai yang digambar ulang yang berubah pada bingkai itu. Yang bisa saya ingat, game "Little Big Adventure" menggunakan teknik ini (1994). Tetapi Anda dapat melihat bahwa sebagian besar permainan memiliki kamera statis. hanya ketika Anda keluar dari area yang terlihat adegan tersebut digambar ulang. Jika Anda memainkan game, Anda juga akan melihat kelambatan kecil pada frame itu. Pada GPU modern dengan mesin game modern, banyak hal telah berubah. Semuanya digambar ulang di setiap frame. Bergantung pada teknik rendering, hal-hal bahkan mungkin diberikan beberapa kali. Kekuatan komputasi GPU hanya sangat tinggi bila Anda menggunakannya dengan benar. Tetapi penggunaan kembali sedang terjadi. Misalnya mesin dapat memutuskan untuk memperbarui peta bayangan hanya setiap frame ke-5. Atau pencahayaan tidak diperbarui selama tidak ada perubahan dalam sumber cahaya.


23
Bukan hanya game lama. Di EA, ada dorongan untuk mengurangi penggunaan baterai laptop untuk game-game "kasual" tertentu, dan salah satu tekniknya adalah dengan hanya menggambar ulang bagian layar. Anda kadang-kadang bisa melihat ini di The Sims 3 jika Anda meninggalkan stasioner kamera dan sebuah sim berjalan melintasi layar, kadang-kadang ada bug di mana gambarnya tidak cukup besar dan Anda akan melihat piksel tertinggal dalam garis melintasi layar. Anda hanya perlu menggerakkan kamera sedikit untuk memaksa redraw penuh dan garis akan hilang.
Kevin Fee

12
Sangat tua .. 1994 ... Saya merasa tua sekarang ...
alseether

4
@ Salah, apakah lama dalam hal bermain game. Ingat kami beralih dari gumpalan piksel 8-bit ke foto-realisme (dalam cutscene yang dirender sebelumnya jika tidak ditayangkan langsung) hanya dalam 20 ~ 30 tahun.
Jared Smith

16

Tidak.

Setidaknya jika Anda memasukkan game-game lama dari tahun 70-an yang menggunakan tampilan vektor.

Misalnya, gim Asteroids yang dikenal luas, yang pada awalnya dikembangkan untuk tampilan vektor yang merupakan cara rendering grafis yang berbeda secara mendasar ke layar.

Monitor vektor juga digunakan oleh beberapa game arcade akhir 1970-an hingga pertengahan 1980-an seperti Asteroid, Tempest, dan Star Wars. Atariused istilah Quadrascan untuk menggambarkan teknologi ketika digunakan dalam permainan video mereka.

https://en.wikipedia.org/wiki/Vector_monitor

Grafik modern cukup banyak 100% dibuat untuk rasterizaton, yang menurut definisi menulis isi buffer grafis ke tampilan setiap frame.


7
Tampilan vektor bahkan tidak jelas memiliki "bingkai".
hobbs

2
@ hobbs Benar, yang membuat jawaban saya masih benar karena jawaban untuk "Apakah semua game dibuat dengan menggambar setiap bingkai?" adalah "Tidak, bahkan tidak semua game menggambar berdasarkan bingkai."
Sandy Chapman

1
Namun, dalam arti yang lebih dalam, pertanyaannya adalah tentang berulang kali menggambar semua item yang terlihat, bukan hanya item yang bergerak, dan untuk sebagian besar tampilan vektor jawabannya masih "ya" (tabung penyimpanan gambar akan menjadi pengecualian)
szulat

@szulat dengan cara yang benar, tetapi untuk bersikap adil, itu masih tidak menarik celah di mana tampilan berwarna hitam. Itu hanya menyegarkan item yang terlihat di layar. Yaitu di Asteroid, itu hanya menggambar ulang kapal dan asteroid yang tersisa di layar.
Sandy Chapman

@SandyChapman dan di level lain, ada sedikit perbedaan. sebuah game memperbarui memori layar atau sprite ketika sesuatu berubah. jika tidak, bagian yang sesuai dari tampilan tetap statis. ini berlaku untuk sistem raster dan vektor - “asteroid” menangani penyegaran layar dari memori layar (vektor!) tanpa mengganggu cpu, sama halnya dengan perangkat keras spektrum zx yang menghasilkan sinyal video rasternya. apakah balok crt nyata atau imajiner menggambar poligon atau memindai layar dalam pola tetap, adalah sekunder.
szulat

11

Pada level terendah, prosesor grafis pada mesin Anda memang akan menghitung setiap frame dari bawah ke atas dan mengirimkannya ke layar Anda. Namun, Anda hanya akan terpapar pada hal ini, jika Anda mengelola sendiri barang-barang tingkat rendah ini [1] Mesin grafis apa pun (dan dengan itu, permainan) akan menangani hal-hal ini untuk Anda, dan Anda bebas untuk mengekspresikan adegan tersebut. dalam hal banyak entitas yang dapat Anda modifikasi antara frame, tetapi akan tetap ada.

... bagaimana metode ini bekerja untuk gim 3d ...

Elemen-elemen dalam ruang 3D tahan, mesin grafis akan, sekali lagi, menghitung ulang gambar pada layar Anda untuk setiap perubahan yang terjadi (pergerakan kamera dll.)

[1] ... misalnya jika Anda menulis mesin sendiri [2] dengan sesuatu seperti OpenGL. Bahkan dalam kasus itu Anda kemungkinan akan menyimpan hal-hal yang gigih di antara frame.

[2] Yang bukan merupakan opsi di level keahlian Anda saat ini.


Apakah Anda memiliki referensi untuk mendukung "prosesor grafis pada mesin Anda memang akan menghitung setiap frame dari bawah ke atas"?
Kromster mengatakan mendukung Monica

@Romster: Ini sebagian besar merupakan hal efisiensi. Karena setiap frame mungkin memerlukan perhitungan penuh, dan tidak pasti bagian mana yang tidak, Anda akan membutuhkan perhitungan mahal untuk menentukan dengan tepat bit apa yang bisa disimpan. Bahkan jika itu akan menjadi peningkatan kinerja bersih, itu akan menyebabkan frame rate yang tidak konsisten.
MSalters

@Mengubah cara pengungkapannya, bertentangan dengan banyak poin di banyak jawaban tetangga.
Kromster mengatakan mendukung Monica

Saya akan mengatakan pernyataan "prosesor grafis pada mesin Anda memang akan menghitung setiap frame dari bawah ke atas" secara teknis tidak benar. GPU menghitung dengan tepat apa yang Anda katakan. Jika Anda ingin menggunakan kembali bingkai sebelumnya, maka itu akan (memang, itu defaultnya). Banyak mesin game modern (dan bahkan GUI sistem operasi) memilih untuk memulai dari awal (di mana frame sebelumnya hanya ditampilkan jika frame baru tidak selesai merender dalam waktu), tetapi mereka tidak harus melakukannya.
Ove

Saya bahkan tidak yakin apa yang akan menjadi referensi untuk "layar harus dihapus", tetapi memiliki referensi untuk bagaimana sebuah bingkai ditampilkan di Doom: adriancourreges.com/blog/2016/09/09/doom-2016- studi grafis ; jangan lupa bahwa kartu grafis kelas menengah ke atas harus mampu mengelola satu triliun kalkulasi per detik, beberapa ribu per piksel.
pjc50

2

Jawaban singkat: Tidak.

Cerita panjang:

Ketika saya belajar beberapa pemrograman game di sekolah, kami diajarkan untuk melakukan hal berikut:

Putuskan berapa nilai fps yang kami inginkan dalam game (misalnya 30).

Tulis beberapa kode yang menambahkan 1 ke penghitung untuk setiap interval (33 msec untuk 30 fps). Kode ini berjalan bersamaan dengan loop game.

Kemudian loop game yang melakukan perhitungan untuk game (pembaruan status game) akan mengurangi penghitung yang sama dengan 1 untuk setiap frame. Tetapi perhitungan grafik dan menggambar ke layar hanya akan dilakukan jika penghitungnya nol.

Hasilnya adalah bahwa frame rate grafis akan menyesuaikan tergantung pada seberapa baik CPU menangani perhitungan dalam game. Ketika tidak terlalu banyak terjadi dalam gim, perhitungannya mudah dan frame rate grafis akan lebih tinggi daripada pembaruan keadaan gim yang sebenarnya (pada dasarnya membuang-buang siklus karena kami menggambar keadaan gim yang sama lebih dari satu kali di layar).

Tapi kemudian banyak yang terjadi dalam game, cpu akan memiliki lebih banyak pekerjaan yang harus dilakukan dan pembaruan status game akan diprioritaskan daripada menggambar ke layar.

Sebagian besar waktu, gim akan terus memperbarui pada tingkat yang dimaksudkan, tetapi akan muncul "lamban" karena Anda tidak akan melihat setiap pembaruan di layar. Ini mungkin lebih disukai untuk seluruh permainan melambat karena Anda memaksanya menggambar setiap pembaruan di layar.

Ini semua dilakukan dengan C ++ dan tidak ada mesin game, atau kartu grafis. Semuanya berjalan pada cpu inti tunggal. Kami menggunakan beberapa perpustakaan untuk grafik 2d.


1
Saya ingat permainan "Kapak Emas". Ketika dimainkan pada 8086 gameplay lebih lambat dan jauh lebih mudah ditangani daripada dimainkan pada 286 misalnya di mana segalanya bergerak lebih cepat. Hanya FYI.
akostadinov

0

Sebelum orang dapat mengatakan apakah video game "menggambar" tampilan setiap frame, pertama-tama perlu untuk menentukan apa yang dimaksud dengan "menggambar". Pasti ada banyak video game yang tentunya tidak semuanya menggambar setiap frame dengan menyusun bitmap dari awal; memang, banyak platform game tidak pernah merakit bitmap penuh sama sekali .

Ada beberapa pendekatan yang bisa dilakukan permainan video untuk menghasilkan tampilan. Sejumlah kecil memiliki CPU menghidupkan dan mematikan berkas elektron atau untuk setiap piksel atau, untuk permainan pemindaian vektor, atur koordinat XY dari setiap titik yang akan diplot. Sebagian besar gim yang melakukan hal ini sebagian besar bertujuan untuk menunjukkan bahwa CPUnya cukup cepat. Gim yang lebih umum akan memiliki perangkat keras yang, jika tidak ada keterlibatan CPU, akan menampilkan beberapa pola piksel atau vektor ke tampilan berulang kali. Pola ini dapat dihasilkan dengan membaca data secara berurutan dari suatu wilayah memori dan menafsirkan setiap bit atau kelompok bit sebagai warna piksel (ini disebut tampilan bit-peta). Dalam beberapa kasus, perangkat keras dapat membaca byte memori untuk masing-masing 8x8, 16x16, atau wilayah ukuran lain dari tampilan dan kemudian menggunakan byte itu untuk memilih rentang memori untuk dibaca untuk data piksel (ini sering disebut tampilan peta karakter). Beberapa platform perangkat keras dapat menampilkan beberapa tampilan bitmap dengan posisi yang dapat dikonfigurasi. Ini disebut sebagai sprite.

Beberapa platform tidak mengizinkan pola tampilan untuk diubah ketika sedang dikirim ke layar, tetapi sebaliknya mengharuskan semua pembaruan terjadi setelah balok selesai menggambar satu bingkai tetapi sebelum mulai menggambar berikutnya. Pada platform seperti itu, segala sesuatu yang akan muncul pada suatu bingkai harus dimuat ke dalam perangkat keras layar sebelum dimulainya bingkai itu, dan tampilan akan dibatasi untuk menunjukkan pola yang dapat diatur sekaligus. Jika CPU berhenti berjalan saat frame sedang ditampilkan, frame yang sama akan terus ditampilkan tanpa batas. Platform lain memungkinkan pola untuk diubah atau dikonfigurasi ulang saat sedang ditarik ke layar. Ini memungkinkan untuk menampilkan layar yang jauh lebih rumit daripada yang bisa ditangani oleh sirkuit video dengan sendirinya.

Sebagian besar permainan komputer pribadi menggunakan perangkat keras yang dikonfigurasikan untuk menggambar layar bitmap tunggal, dan kemudian menarik ke layar itu apa saja yang perlu berbeda dari apa yang sudah ada. Kadang-kadang mungkin lebih mudah untuk menggambar hal-hal tanpa memperhatikan apakah itu benar-benar diperlukan dalam kasus tertentu, tetapi jika kode dapat dengan mudah mengatakan bahwa tidak ada alasan untuk bagian layar berubah, kinerja dapat ditingkatkan dengan melewatkan bagian itu. Platform saat ini seringkali cukup cepat sehingga mereka dapat menggambar seluruh layar berkali-kali selama bingkai, tetapi secara historis itu tidak terjadi. Kode tercepat untuk menulis semua piksel pada layar resolusi tinggi komputer Apple II, misalnya, akan membutuhkan lebih dari dua bingkai, dan kode tercepat yang mungkin untuk menyalin semua piksel pada komputer Apple II ' Layar resolusi tinggi dari buffer lain akan memakan waktu dua kali lipat. Untuk mendapatkan kinerja yang baik, game hanya perlu memperbarui hal-hal yang benar-benar berubah, dan itulah yang biasanya dilakukan oleh game yang bagus.


1
Saya mencapai setengah jalan melalui jawaban ini dan saya tidak yakin bagaimana sebenarnya menjawab pertanyaan. Paragraf pertama Anda berbicara tentang CPU, koordinat XY, berkas elektron, byte memori, dan sprite - tetapi tidak satu pun yang terlihat jelas tentang menggambar setiap frame. Paragraf kedua berbicara tentang pola tampilan panjang lebar, dan kemudian kehilangan saya. Saya pikir Anda perlu mengambil bagian apa pun dari ini tentang benar-benar menggambar ulang layar, meletakkannya di bagian atas dalam pernyataan yang jelas, dan kemudian menghubungkan apa pun yang Anda perlu bicarakan kembali untuk menjelaskan apa yang terjadi.
doppelgreener

1
@doppelgreener: Gagasan "menggambar" setiap frame agak kabur. Sesuatu harus melakukan segala yang diperlukan untuk menghasilkan setiap frame, tetapi ada banyak cara yang dapat dibagi oleh CPU dan perangkat keras. Beberapa cara mengharuskan CPU terlibat di setiap frame bahkan dengan bagian-bagian layar yang tampak sama antara satu frame dan berikutnya, sementara yang lain tidak. Sementara game LCD atau CRT mana pun pada akhirnya akan mengharuskan sesuatu menghasilkan setiap frame yang tidak kosong [game yang menggunakan tampilan E-paper atau flip-dot mungkin tidak], tindakan yang diperlukan mungkin atau mungkin tidak dianggap "menggambar".
supercat

Saya sarankan Anda mulai dari bahasa yang langsung (apakah kita "menggambar bingkai" terus-menerus) dan bekerja kembali dari sana menjelaskan lebih banyak detail teknis tentang mengapa itu mungkin bukan cara yang akurat untuk menjelaskannya - alih-alih menyelam langsung ke dalam detail . Posting Anda membutuhkan Ringkasan Eksekutif, pada dasarnya, dan Pendahuluan, sebelum Anda mulai memeriksa hal-hal sejauh yang Anda lakukan.
doppelgreener

-11

Singkatnya, saya akan mengatakan tidak semua frame digambar tetapi hanya yang dibutuhkan untuk menyajikan cerita atau tema game atau game-play Anda. Ditambah waktu hal-hal yang Anda inginkan terjadi pada saat-saat tertentu akan menjadi masalah.


9
Ini bahkan tidak masuk akal terhadap pertanyaan yang diajukan .. Saya pikir Anda telah bingung "bingkai" untuk hal lain ... apakah Anda mungkin bingung dengan unsur-unsur papan cerita? OP secara khusus berbicara tentang bingkai dalam konteks rendering
Trotski94
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.