Wednesday, July 11, 2012

MIPMAPPING

Terkadang, khusus untuk objek yang letaknya jauh, anda akan melihat teksturnya berkerlap-kerlip,  dengan gerakan-gerakan kecil pada kamera maka menjadi terlihat aneh. Sebagaimana dibahas sebelumnya,  tekstur peta-peta harus  disaring, sehingga setiap pixel diberikan sebuah nilai yang ditambahkan texel-textel yang terdekat ke nilai yang diinginkan. Tapi apa yang terjadi ketika kita sangat jauh dari objek? Jawabannya adalah bahwa proyeksi Texel adalah jauh lebih kecil dari ukuran sebuah pixel, sehingga pencampuran empat nilai tidak cukup. Dalam hal ini, sedikit gerakan dalam kamera akan menghasilkan sebuah gerakan cepat per-pixel pada ruang tekstur. Hal ini menyebabkan tekstur ditempatkan pada obyek yang jauh untuk berkerlip dan menghasilkan efek yang menggangu.  Mari kita memvisualisasikan ini dengan sebuah sampel, seperti paralel yang terletak sangat jauh ke layar.  Satu pixel memiliki koordinat tekstur (0,5, 0,5), sedangkan yang lainnya,  arah tidak ditentukan,  dipetakan ke (0,65, 0,5).  Perbedaan koordinat berasal dari fakta sejauh ini, koordinat terpisah jauh didalam ruang tekstur.  Kemudian, dengan asumsi peta adalah 256 x 256,  pixel pertama dipetakan ke Texel (128, 128) ditambah interpolasi. Yang kedua dipetakan ke Texel (166, 0,5).  Jelas,  ada sebuah samudera antara kedua sampel.  Setiap gerakan kamera yang minimal akan membuat dampak yang besar 
dalam ruang tekstur dan menjadi terlihat berkerlap-kerlip. Lihat Gambar 18.3 untuk dua sampel.
Gambar 18.3. Gambar sebelah kiri menunjukkan gambar yang diberikan tekstur penyaringan,
sedangkan gambar sebelah kanan menunjukkan aplikasi yang sama yang dijalankan dengan penyaringan dinonaktifkan.

Solusi untuk masalah ini disebut mipmapping,  yang merupakan teknik penyaringan yang akan membuat tekstur  terlihat baik terlepas dari kejauhan. Mipmapping menghitung setiap masing-masing tekstur sebagai urutan memetakan setiap satu setengah ukuran dari sebelumnya. Jadi,  jika Anda mulai dengan peta tekstur  256 x 256, mipmaps Anda akan menjadi 128 x 128,  64 x 64,  32 x 32,  16 x 16,  dan sebagainya.  Peta-peta yang turun sampel dihitung dengan interpolasi texel-texel bersama-sama, sehingga mereka memberikan pengurangan detil halus untuk sejauh poligon . Kemudian, saat runtime,
tekstur untuk segitaga diproyeksikan di ruang layar, dan bidang mipmap yang sesuai dengan daerah segitiga lebih baik digunakan. Dengan cara ini kita dapat menghilangkan berkerlap-kerlip (pada biaya penggunaan memori tekstur tambahan). Meninjau contoh kita sebelumnya, bayangkan bahwa kami ditugaskan untuk letak mipmap dalam ukuran 8x8 piksel. Kemudian, pixel pertama, dengan koordinat (0,5, 0,5), akan dipetakan ke Texel (4,4). Pixel kedua,
dipetakan dengan (0,65, 0,5) sebagai koordinat, akan pergi ke Texel (5,2, 4), yang berdekatan dengan Texel sebelumnya.

Mipmaps dapat dihitung secara otomatis di kedua OpenGL dan DirectX. Di bawah OpenGL, mereka diciptakan dengan
panggilan:

gluBuild2Dmipmaps

Sintaks ini adalah panggilan yang sangat mirip dengan glTexImage2D, panggilan standar untuk mendefinisikan dan melewati tekstur ke OpenGL. Kemudian, seleksi mipmap adalah proses otomatis. Di bawah DirectX, mipmaps ditangani melalui GenerateMipSubLevels disebut milik antarmuka IDirect3Dtexture9. Atau, mipmaps dapat dihasilkan secara otomatis pada penciptaan tekstur jika kita lulus konstan D3DUSAGE_AUTOGENMIPMAP dalam penggunaan parameter panggilan CreateTexture.

1 comment: