Mipmapping (dijelaskan secara rinci dalam Bab 18,
"Tekstur Pemetaan") adalah teknik pemetaan tekstur bertujuan
meningkatkan kualitas visual yang jauh, primitif
bertekstur. Dalam
segitiga jauh, area layar dari segitiga (dalam piksel) akan lebih kecil dari
ukuran tekstur. Ini berarti setiap pixel
akan menjadi bertekstur dengan
beberapa texels, dan sebagai segitiga bergerak bahkan sedikit, flicker muncul. Tekstur mipmapping karya precomputing serangkaian peta tekstur skala-down (½, ¼, dan sebagainya) yang disebut mipmaps. Mipmaps adalah prefiltered sehingga mereka rata-rata nilai Texel benar. Kemudian, ketika texturing, segitiga bertekstur menggunakan mipmap yang paling menyerupai ukuran layar. Dengan cara ini flicker berkurang, dan bahkan segitiga jauh mendapatkan texturing yang tepat.
beberapa texels, dan sebagai segitiga bergerak bahkan sedikit, flicker muncul. Tekstur mipmapping karya precomputing serangkaian peta tekstur skala-down (½, ¼, dan sebagainya) yang disebut mipmaps. Mipmaps adalah prefiltered sehingga mereka rata-rata nilai Texel benar. Kemudian, ketika texturing, segitiga bertekstur menggunakan mipmap yang paling menyerupai ukuran layar. Dengan cara ini flicker berkurang, dan bahkan segitiga jauh mendapatkan texturing yang tepat.
Berdasarkan konsep yang sama, Willem de Boer merancang
algoritma geomipmapping (www.flipcode.com/tutorial / geomipmaps.pdf), yang
menerapkan sistem medan gumpalan dengan menggunakan mipmaps dihitung bukan pada
tekstur, tapi pada geometri medan (maka nama). Semua yang perlu kita lakukan adalah memilih hak geometris
representasi tergantung pada jarak ke penonton, dan pastikan jahitan di mana dua berbeda
representasi memenuhi menggabungkan lancar tanpa artefak terlihat.
Konsep di balik geomipmapping dapat disesuaikan dengan struktur data medan. Namun, karena itu adalah
tekstur seperti pendekatan, cara termudah untuk menggunakannya adalah mulai dari representasi heightfield. Kebetulan,
heightfields dapat direpresentasikan dengan menggunakan gambar grayscale, jadi adanya kemiripan dengan peta tekstur masih
hadir. Kami kemudian harus menghitung mipmaps geometri. Untuk melakukannya, kita dapat menurunkan heightfield yang
bitmap menggunakan software pengolah gambar atau hanya menghitung mereka di runtime. Hanya ingat bahwa
mipmaps dihitung secara berurutan dengan membagi ukuran terakhir tekstur peta dengan faktor dua, menggabungkan
masing-masing empat texels dari peta awal menjadi satu, nilai rata-rata. Sekali lagi, bangunan mipmaps geometri
tidak berbeda daripada bekerja pada tekstur.
Ingat bahwa ukuran medan Anda harus menjadi kekuatan dua untuk metode ini untuk bekerja (karena
subdivisi langkah). Secara khusus, ukuran daerah harus dalam bentuk 2n +1 karena kita memerlukan simpul ekstra untuk
memastikan kami mendapatkan sejumlah paha power-of-dua. Lihat Gambar 14.4, yang menunjukkan ini dalam mesh 4x4,
menggunakan simpul 5x5.
tekstur, tapi pada geometri medan (maka nama). Semua yang perlu kita lakukan adalah memilih hak geometris
representasi tergantung pada jarak ke penonton, dan pastikan jahitan di mana dua berbeda
representasi memenuhi menggabungkan lancar tanpa artefak terlihat.
Konsep di balik geomipmapping dapat disesuaikan dengan struktur data medan. Namun, karena itu adalah
tekstur seperti pendekatan, cara termudah untuk menggunakannya adalah mulai dari representasi heightfield. Kebetulan,
heightfields dapat direpresentasikan dengan menggunakan gambar grayscale, jadi adanya kemiripan dengan peta tekstur masih
hadir. Kami kemudian harus menghitung mipmaps geometri. Untuk melakukannya, kita dapat menurunkan heightfield yang
bitmap menggunakan software pengolah gambar atau hanya menghitung mereka di runtime. Hanya ingat bahwa
mipmaps dihitung secara berurutan dengan membagi ukuran terakhir tekstur peta dengan faktor dua, menggabungkan
masing-masing empat texels dari peta awal menjadi satu, nilai rata-rata. Sekali lagi, bangunan mipmaps geometri
tidak berbeda daripada bekerja pada tekstur.
Ingat bahwa ukuran medan Anda harus menjadi kekuatan dua untuk metode ini untuk bekerja (karena
subdivisi langkah). Secara khusus, ukuran daerah harus dalam bentuk 2n +1 karena kita memerlukan simpul ekstra untuk
memastikan kami mendapatkan sejumlah paha power-of-dua. Lihat Gambar 14.4, yang menunjukkan ini dalam mesh 4x4,
menggunakan simpul 5x5.
Gambar 14.4. Untuk membuat 4x4
mesh segitiga (yang benar-benar memegang 32 segitiga),
kita perlu mesh vertex 5x5.
kita perlu mesh vertex 5x5.
Langkah pertama dalam proses rendering adalah untuk
secara efektif memuat struktur data dalam memori. Untuk
geomipmapping, data terrain diatur dalam quadtree, setiap simpul daun mengandung apa yang disebut medan yang
blok. Blok Medan adalah bagian dari medan yang terdiri dari beberapa segitiga masing-masing. Dalam formulasi awalnya, de
Boer menyarankan menggunakan jala 4x4 (terdiri dari 32 segitiga). Untuk membangun quadtree, Anda mulai dengan
data terrain Seluruh set. Simpul akar menyimpan kotak 3D berlari, dan kemudian masing-masing empat keturunan
mengandung salah satu dari empat subquadrants dari kumpulan data. Setiap node berikutnya akan berisi kotak pembatas
dari set masuk dan lulus empat pointer ke keturunannya sampai node persis terdiri dari satu
blok medan. Sebuah 257x257 peta daerah akan memerlukan tepat enam tingkat (berukuran 256, 128, 64, 32, 16, 8, dan
4 segitiga di masing-masing). Pengorganisasian data dalam quadtree akan membantu kita melakukan kliping hirarkis cepat.
Kami akan kedalaman melintasi pohon, dan segera setelah kotak berlari dari satu simpul ditolak sebagai benar-benar
tak terlihat, seluruh subtree akan ditolak, sehingga mempercepat perhitungan secara signifikan.
Perhatikan bagaimana, sampai saat ini, kami belum melakukan apapun LOD. Semua yang kita lakukan adalah mengatur sumber data
dalam quadtree, yang memang akan mempercepat kliping, tapi itu tentang hal itu. Bahkan, kita bisa berhenti di sini dan
menerapkan algoritma sebelumnya. Menggunakan pemusnahan perangkat keras, itu akan menjadi cara yang baik untuk memilih hanya mereka
segitiga efektif layar. Selain itu, tata letak blok memungkinkan untuk primitif dikemas seperti strip dan
segitiga diindeks daftar yang akan digunakan, memberikan kinerja yang cukup baik.
Tetapi tidak ada kebijakan LOD belum, segitiga begitu jauh mungkin akan menggerogoti semua siklus CPU kami, efektif
membunuh kinerja. Di sinilah geomipmaps memasukkan adegan untuk mempercepat proses rendering. Idenya
sangat mudah: Ketika kita mencapai daun quadtree, kami memutuskan untuk menggunakan resolusi untuk itu
blok medan. Kita perlu untuk tidak hanya menyimpan medan resolusi tinggi, tetapi versi mipmapped juga. Itu
kriteria keputusan, seperti biasa, tergantung pada jumlah detail di blok dan jarak ke penampil. Kami
mulai dengan menghitung kesalahan blok geometri, dinyatakan sebagai jarak maksimal (dalam ruang layar)
dari posisi mipmap untuk posisi sebenarnya dari geometri yang sebenarnya. Kami menyebutnya kesalahan karena merupakan
mengukur berapa banyak deviasi sebenarnya ada antara nilai riil (diambil dari mesh) dan nilai
kita menggunakan untuk tujuan rendering.
geomipmapping, data terrain diatur dalam quadtree, setiap simpul daun mengandung apa yang disebut medan yang
blok. Blok Medan adalah bagian dari medan yang terdiri dari beberapa segitiga masing-masing. Dalam formulasi awalnya, de
Boer menyarankan menggunakan jala 4x4 (terdiri dari 32 segitiga). Untuk membangun quadtree, Anda mulai dengan
data terrain Seluruh set. Simpul akar menyimpan kotak 3D berlari, dan kemudian masing-masing empat keturunan
mengandung salah satu dari empat subquadrants dari kumpulan data. Setiap node berikutnya akan berisi kotak pembatas
dari set masuk dan lulus empat pointer ke keturunannya sampai node persis terdiri dari satu
blok medan. Sebuah 257x257 peta daerah akan memerlukan tepat enam tingkat (berukuran 256, 128, 64, 32, 16, 8, dan
4 segitiga di masing-masing). Pengorganisasian data dalam quadtree akan membantu kita melakukan kliping hirarkis cepat.
Kami akan kedalaman melintasi pohon, dan segera setelah kotak berlari dari satu simpul ditolak sebagai benar-benar
tak terlihat, seluruh subtree akan ditolak, sehingga mempercepat perhitungan secara signifikan.
Perhatikan bagaimana, sampai saat ini, kami belum melakukan apapun LOD. Semua yang kita lakukan adalah mengatur sumber data
dalam quadtree, yang memang akan mempercepat kliping, tapi itu tentang hal itu. Bahkan, kita bisa berhenti di sini dan
menerapkan algoritma sebelumnya. Menggunakan pemusnahan perangkat keras, itu akan menjadi cara yang baik untuk memilih hanya mereka
segitiga efektif layar. Selain itu, tata letak blok memungkinkan untuk primitif dikemas seperti strip dan
segitiga diindeks daftar yang akan digunakan, memberikan kinerja yang cukup baik.
Tetapi tidak ada kebijakan LOD belum, segitiga begitu jauh mungkin akan menggerogoti semua siklus CPU kami, efektif
membunuh kinerja. Di sinilah geomipmaps memasukkan adegan untuk mempercepat proses rendering. Idenya
sangat mudah: Ketika kita mencapai daun quadtree, kami memutuskan untuk menggunakan resolusi untuk itu
blok medan. Kita perlu untuk tidak hanya menyimpan medan resolusi tinggi, tetapi versi mipmapped juga. Itu
kriteria keputusan, seperti biasa, tergantung pada jumlah detail di blok dan jarak ke penampil. Kami
mulai dengan menghitung kesalahan blok geometri, dinyatakan sebagai jarak maksimal (dalam ruang layar)
dari posisi mipmap untuk posisi sebenarnya dari geometri yang sebenarnya. Kami menyebutnya kesalahan karena merupakan
mengukur berapa banyak deviasi sebenarnya ada antara nilai riil (diambil dari mesh) dan nilai
kita menggunakan untuk tujuan rendering.
Dengan demikian, kita mengambil semua simpul dalam satu
blok dan menghitung jarak dari simpul mipmapped ke
geometri nyata. Ketika diproyeksikan ke layar, ini jumlah pixel kembali, yang mempertimbangkan
detail (lebih detail, semakin error) dan jarak (semakin jauh, semakin sedikit kesalahan). Kemudian, kami bekerja
dengan ambang tetap (nilai sekitar 5 piksel sering) dan pilih tingkat mipmap pertama sehingga kesalahan
dibatasi. Jadi, blok geometri yang jauh akan sangat disederhanakan, dan blok dekat tidak akan. sebuah menarik efek samping dari pendekatan seperti itu adalah bahwa kamera top-down biasanya akan berakhir render resolusi lebih rendah
jerat, karena kesalahan layar-space akan hampir tidak ada.
Menggunakan geomipmapping, kita harus berurusan dengan dua isu potensial untuk menyampaikan rasa baik realisme.
Pertama, kita harus berurusan dengan kesenjangan geometri yang terjadi setiap kali dua blok resolusi yang berbeda
berdekatan. Ini melanggar kontinuitas medan. Kedua, kita harus memastikan bahwa perubahan secara rinci dalam
wilayah tertentu hampir tak terlihat, sehingga pemain tidak menyadari pekerjaan LOD yang sedang terjadi. Mari kita
memeriksa setiap masalah dan cara untuk berurusan dengan itu.
geometri nyata. Ketika diproyeksikan ke layar, ini jumlah pixel kembali, yang mempertimbangkan
detail (lebih detail, semakin error) dan jarak (semakin jauh, semakin sedikit kesalahan). Kemudian, kami bekerja
dengan ambang tetap (nilai sekitar 5 piksel sering) dan pilih tingkat mipmap pertama sehingga kesalahan
dibatasi. Jadi, blok geometri yang jauh akan sangat disederhanakan, dan blok dekat tidak akan. sebuah menarik efek samping dari pendekatan seperti itu adalah bahwa kamera top-down biasanya akan berakhir render resolusi lebih rendah
jerat, karena kesalahan layar-space akan hampir tidak ada.
Menggunakan geomipmapping, kita harus berurusan dengan dua isu potensial untuk menyampaikan rasa baik realisme.
Pertama, kita harus berurusan dengan kesenjangan geometri yang terjadi setiap kali dua blok resolusi yang berbeda
berdekatan. Ini melanggar kontinuitas medan. Kedua, kita harus memastikan bahwa perubahan secara rinci dalam
wilayah tertentu hampir tak terlihat, sehingga pemain tidak menyadari pekerjaan LOD yang sedang terjadi. Mari kita
memeriksa setiap masalah dan cara untuk berurusan dengan itu.
sumber :
http://ismetsaja.wordpress.com/game-teknologi/
http://portal.paseban.com/news/49821/teknologi-game
CoreAlgorithmInGameTechnology.pdf