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?
Jawaban:
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.
sumber
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.
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.
sumber
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.
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.
sumber
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.
sumber
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.
sumber
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.
sumber