Mipmapping

Mipmapping (dijelaskan secara rinci dalam Bab 18, "Tekstur Pemetaan") adalah teknik pemetaan tekstur bertujuanmeningkatkan 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 karyaprecomputing serangkaian peta tekstur skala-down (½, ¼, dan sebagainya) yang disebut mipmaps. Mipmaps adalahprefiltered sehingga mereka rata-rata nilai Texel benar.Kemudian, ketika texturing, segitiga bertekstur menggunakanmipmap 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 yang menerapkan sistem medan gumpalan dengan menggunakan mipmaps dihitung bukan padatekstur, 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.


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. 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 menarikefek 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 geometriyang 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 tidakmenyadari pekerjaan LOD yang sedang terjadi. Mari kita memeriksa setiap masalah dan cara untuk berurusan dengan itu.

Sumber :


Komentar

Postingan populer dari blog ini

game engine

pemuda