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
Post a Comment