Mapping Matrices (Pemetaan Matriks)

Posted by tiqa cemcem - -



Banyak game 2D mampu mempresentasikan besar, dunia permainan bervariasi pada mesin yang sangat terbatas. Kuncinya adalah untuk menggunakan teknik kompresi untuk membuat data muat pada chip memori sangat kecil. Sebagai contoh, mari kita menganalisis berapa banyak memori permainan top-down seperti The Legend of Zelda diperlukan. Untuk mendukung argumen, aku akan mengasumsikan tingkat permainan menempati layar televisi di seluruh 5x5, dan layar 256x200 piksel setiap, palletized sampai 16 warna. Jika Anda melakukan matematika, Anda akan menemukan bahwa bitmap dengan dimensi-dimensi akan mengambil sampai 1.25MB ruang, jelas lebih dari satu konsol Nintendo miliki saat itu. Harus ada trik suatu tempat, dan trik yang disebut pemetaan.
Pemetaan adalah teknik kompresi yang akan memungkinkan kita untuk membuat tampan dunia game di sebagian kecil dari jejak memori. Kami akan kehilangan beberapa variasi visual dalam proses, tapi permainan mimpi kita akan muat di kami platform target. Pemetaan adalah teknik yang sangat populer. Itu digunakan dalam ribuan game untuk klasik konsol dan arcade, dan masih digunakan hari ini, bahkan di beberapa game 3D. Ide utama adalah untuk membagi permainan kami dunia menjadi satu set ubin atau primitif dasar. Setiap ubin akan mewakili pola persegi panjang, yang kita akan menggabungkan dengan ubin lain untuk mewakili tingkat. Jadi, jika dunia permainan kami harus mewakili rumput, batu, salju, dan pasir, kita akan menggunakan empat ubin, dan kemudian peta mereka seolah-olah kami menempatkan ubin di lantai.
Kompresi berasal dari fakta bahwa, jika kita mengulangi pola yang sama sering, kita hanya akan memilikinya sekali dalam memori. Untuk membuktikan ini, mari kita asumsikan kami mewakili permainan awal kami dengan satu set ubin. Kami akan menggunakan 256 berbeda ubin (lebih dari cukup untuk memberikan kekayaan bagi dunia game). Setiap ubin akan piksel 8x8.
Jadi, setiap ubin menempati
8x8 = 64 = 32 byte (kita menggunakan 16 warna saja)
Set ubin seluruh akan memerlukan
32x256 = 8KB
Kami akan menyebutnya struktur tabel ubin (lebih pada tabel genteng di bagian berikutnya). Kami kemudian akan memerlukan keduastruktur data, yang disebut matriks pemetaan. Struktur ini menyimpan informasi tata letak: bagaimana ubin harus diatur dalam tingkat permainan. Dari ukuran sprite, kita tahu ukuran matriks pemetaan kita akan
256x5 / 8 = 160
200x5 / 8 = 125
Karena setiap entri akan menjadi nilai byte berukuran sehingga kami dapat mengindeks 256 ubin mungkin, seluruh tabel akan membutuhkan
160x125 = 20000 byte
Jadi, kami peta kompresi akan mengambil sekitar 19.5KB, dengan 8 kilobyte tambahan didedikasikan untuk daftar ubin. Di keseluruhan, yaitu 27.5KB, turun dari 1.25MB. Itu berarti membagi dengan faktor 50 sekitar. Jelas, ada keuntungan besar untuk pemetaan, dan itulah alasan pemetaan sangat populer di era 80-an. Pertandingan seperti Mario Bros, Zelda, 1942, dan banyak lainnya menggunakan varian dari skema dipetakan.
Tile Tabel
Kita telah melihat bagaimana untuk mengkodekan karakter grafis. Kami juga telah dieksplorasi bagaimana untuk menyimpan peta permainan berdasarkan pada matriks pemetaan. Sudah saatnya untuk berbicara tentang latar belakang grafis atau ubin. Dengan demikian, struktur data yang kita sekarang akan menutupi adalah tabel ubin (TT). Sederhananya, ini adalah daftar gambar latar belakang yang dapat keramik dan digabungkan dengan menggunakan matriks pemetaan untuk membuat peta permainan lengkap. Beberapa platform, seperti SPN, memiliki struktur ini didefinisikan dalam spesifikasi perangkat keras tersebut. Lainnya, seperti PC, memungkinkan pengembang untuk menentukan nya sendiri. Apapun masalahnya, TT digunakan untuk menyimpan tegel unik yang kemudian akan dipetakan ke layar. Sana sejumlah keputusan yang terlibat dalam menciptakan sebuah TT efisien.
Format Ubin
Pertama dan terpenting, kita perlu mengetahui format dari ubin kita akan menyimpan. Ini adalah benar-benar penting pilihan, karena format yang berbeda secara dramatis mempengaruhi ukuran tabel. Secara tradisional, ukuran ubin dulu kekuatan dari 2, karena hal ini memungkinkan beberapa optimasi dalam rutinitas blitting digunakan untuk mentransfer mereka ke layar. Alih-alih mentransfer byte, kita bisa menggunakan kata-kata atau bahkan 32-bit nilai untuk peningkatan efisiensi.
Kami juga perlu memutuskan apakah semua ubin akan menjadi ukuran yang sama atau jika mereka akan berbeda. Game klasik digunakan equalsized ubin untuk rendering layar lebih mudah. Tapi jika kita menganggap permainan strategi real-time yang menggunakan isometric melihat di mana bangunan semua ukuran yang berbeda, apakah tidak akan lebih bijaksana untuk memungkinkan ukuran ubin yang berbeda?
Selain itu, kami harus memutuskan format warna ubin. Di masa lalu, ubin yang palletized, sehingga setiap pixel yang dikodekan dalam satu byte yang diindeks palet warna. Namun, permainan yang lebih baru telah menggunakan tinggi warna mode (16 bit encoding RGB dalam 6-5-5) atau warna bahkan benar (24 bit RGB encoding sebagai 8-8-8). Jelas, lebih warna yang lebih baik. Namun perlu diingat bahwa warna yang lebih berarti lebih banyak memori, penggunaan bus yang lain, sehingga kinerja kurang.
Namun, ada persamaan yang akan memberi kita ukuran memori dari genteng tunggal, sebagai fungsi dari beberapa parameter. Ingatlah hal ini ketika merancang permainan Anda sehingga grafis Anda cocok di memori:


Jumlah Ubin
Jumlah ubin diadakan di TT akan menjadi sama pentingnya dengan formatnya. Di satu sisi, ubin lebih berarti lebih bagus grafis. Di sisi lain, penggunaan memori akan meningkat secara dramatis dengan cara yang lebih dari yang Anda pikirkan.
Bayangkan bahwa permainan kami harus menahan 256 ubin yang berbeda. TT akan mengkodekan mereka dalam posisi 0 sampai 255. Dengan demikian, setiap posisi dalam matriks pemetaan perlu indeks yang menggunakan tabel, unsigned 8-bit nomor. Namun, bayangkan bahwa seniman kita menaikkan standar menjadi 300 ubin. TT akan tumbuh sesuai, tetapi pemetaan matriks juga akan mengalami beberapa perubahan. Kami tidak dapat mengkodekan nilai-nilai 300 dalam byte. Kami memiliki dua pilihan:
·         Gunakan 9 bit, yang memungkinkan 512 nilai, namun memerlukan beberapa kode agak dikaburkan untuk mengakses.
·         Gunakan nilai 16-bit, yang akan mengambil ganda memori tetapi memberi kita akses sederhana.
Sebuah alternatif untuk memungkinkan ini dalam platform yang memiliki beberapa jenis sistem berkas adalah untuk memastikan bahwa hanya 256 ubin digunakan per tingkat, sehingga tingkat masing-masing memiliki TT berbeda. Dengan cara ini kita dapat melestarikan berbagai tanpa memori memukul. Tapi beberapa platform memerlukan program penuh (termasuk data) berada di memori utama di
http://www.tar.hu/gamealgorithms/ch11lev1sec3.html (2 dari 3) 2009/02/09 05:57:54