Bagikan melalui


Pemfilteran tekstur dengan mipmap

Mipmap adalah urutan tekstur, yang masing-masing adalah representasi resolusi yang semakin rendah dari gambar yang sama. Tinggi dan lebar setiap gambar, atau tingkat, dalam mipmap adalah kekuatan dua lebih kecil dari tingkat sebelumnya. Mipmaps tidak harus persegi.

Gambar mipmap resolusi tinggi digunakan untuk objek yang dekat dengan pengguna. Gambar resolusi bawah digunakan sebagai objek tampak lebih jauh. Mipmapping meningkatkan kualitas tekstur yang dirender dengan mengorbankan penggunaan lebih banyak memori.

Direct3D mewakili mipmaps sebagai rantai permukaan yang terpasang. Tekstur resolusi tertinggi ada di kepala rantai dan memiliki tingkat mipmap berikutnya sebagai lampiran. Pada gilirannya, tingkat tersebut memiliki lampiran yang merupakan tingkat berikutnya dalam mipmap, dan sebagainya, turun ke tingkat resolusi terendah mipmap.

Ilustrasi berikut menunjukkan contoh tingkat ini. Tekstur bitmap mewakili tanda pada kontainer dalam game orang pertama 3D. Saat dibuat sebagai mipmap, tekstur resolusi tertinggi adalah yang pertama dalam set. Setiap tekstur yang berhasil dalam set mipmap lebih kecil tinggi dan lebar dengan kekuatan 2. Dalam hal ini, mipmap resolusi maksimum adalah 256 piksel dengan 256 piksel. Tekstur berikutnya adalah 128x128. Tekstur terakhir dalam rantai adalah 64x64.

Tanda ini memiliki jarak maksimum dari mana ia terlihat. Jika pengguna mulai jauh dari tanda, game menampilkan tekstur terkecil dalam rantai mipmap, yang dalam hal ini tekstur 64x64.

ilustrasi tekstur tanda bahaya 64x64

Saat pengguna memindahkan sudut pandang lebih dekat ke tanda, tekstur resolusi yang semakin tinggi dalam rantai mipmap digunakan. Resolusi dalam ilustrasi berikut adalah 128x128.

ilustrasi tekstur tanda bahaya 128x128

Tekstur resolusi tertinggi digunakan ketika sudut pandang pengguna berada pada jarak minimum yang diizinkan dari tanda, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi tekstur 256x256 dari tanda bahaya

Ini adalah cara yang lebih efisien untuk mensimulasikan perspektif untuk tekstur. Daripada merender tekstur tunggal pada banyak resolusi, lebih cepat menggunakan beberapa tekstur pada resolusi yang bervariasi.

Direct3D dapat menilai tekstur mana dalam set mipmap yang merupakan resolusi terdekat dengan output yang diinginkan, dan dapat memetakan piksel ke ruang texelnya. Jika resolusi gambar akhir berada di antara resolusi tekstur dalam set mipmap, Direct3D dapat memeriksa texel dalam mipmap dan memadukan nilai warnanya bersama-sama.

Untuk menggunakan mipmaps, aplikasi Anda harus membangun sekumpulan mipmap. Aplikasi menerapkan mipmap dengan memilih mipmap yang ditetapkan sebagai tekstur pertama dalam kumpulan tekstur saat ini. Lihat Perpaduan tekstur.

Selanjutnya, aplikasi Anda harus mengatur metode pemfilteran yang digunakan Direct3D untuk mengambil sampel texel. Metode tercepat pemfilteran mipmap adalah meminta Direct3D memilih texel terdekat. Gunakan nilai enumerasi D3DTEXF_POINT untuk memilih ini. Direct3D dapat menghasilkan hasil pemfilteran yang lebih baik jika aplikasi Anda menggunakan nilai enumerasi D3DTEXF_LINEAR. Ini memilih mipmap terdekat, lalu menghitung rata-rata tertimbang texel yang mengelilingi lokasi dalam tekstur tempat piksel saat ini dipetakan.

Tekstur Mipmap digunakan dalam adegan 3D untuk mengurangi waktu yang diperlukan untuk merender adegan. Mereka juga meningkatkan realisme adegan. Namun, mereka sering membutuhkan memori dalam jumlah besar.

Perhatikan Setiap permukaan dalam rantai mipmap memiliki dimensi yang merupakan setengah dari permukaan sebelumnya dalam rantai. Jika mipmap tingkat atas memiliki dimensi 256x128, dimensi mipmap tingkat kedua adalah 128x64, tingkat ketiga adalah 64x32, dan sebagainya, turun ke 1x1. Anda tidak dapat meminta sejumlah tingkat mipmap dalam Tingkat yang akan menyebabkan lebar atau tinggi mipmap apa pun dalam rantai menjadi lebih kecil dari 1. Dalam kasus sederhana permukaan mipmap tingkat atas 4x2, nilai maksimum yang diizinkan untuk Level adalah tiga. Dimensi tingkat atas adalah 4x2, dimensi tingkat kedua adalah 2x1, dan dimensi untuk tingkat ketiga adalah 1x1. Nilai yang lebih besar dari 3 dalam Tingkat menghasilkan nilai pecahan dalam tinggi mipmap tingkat kedua, dan karenanya tidak diizinkan.

 

Direct3D dapat secara otomatis melakukan pemfilteran tekstur mipmap. Aplikasi dapat melintasi rantai mipmap secara manual untuk memuat data bitmap ke setiap permukaan dalam rantai. Ini sering menjadi satu-satunya alasan untuk melintasi rantai. Secara otomatis menghasilkan mipmap pada waktu pembuatan tekstur memanfaatkan pemfilteran perangkat keras karena mipmap berada di memori video.

Pemfilteran tekstur