Untuk memahami sifat dari penyaringan anisotropik, Anda harus memiliki pemahaman yang kuat tentang arti sebenarnya pemetaan tekstur.
Istilah "pemetaan tekstur" berarti menetapkan posisi pada objek ke lokasi dalam tekstur. Ini memungkinkan rasterizer / shader untuk, untuk setiap posisi pada objek, mengambil data yang sesuai dari tekstur. Metode tradisional untuk melakukan ini adalah untuk menetapkan setiap titik pada objek koordinat tekstur, yang secara langsung memetakan posisi itu ke lokasi dalam tekstur. Rasterizer akan menginterpolasi koordinat tekstur ini di seluruh wajah berbagai segitiga untuk menghasilkan koordinat tekstur yang digunakan untuk mengambil warna dari tekstur.
Sekarang, mari kita berpikir tentang proses rasterisasi. Bagaimana cara kerjanya? Dibutuhkan segitiga dan memecahnya menjadi blok berukuran piksel yang akan kita sebut "fragmen". Sekarang, blok-blok berukuran piksel ini berukuran relatif terhadap layar.
Tetapi fragmen-fragmen ini tidak berukuran relatif terhadap tekstur. Bayangkan jika rasterizer kami menghasilkan koordinat tekstur untuk setiap sudut fragmen. Sekarang bayangkan menggambar keempat sudut itu, bukan di ruang layar, tetapi di ruang tekstur . Seperti apa bentuknya?
Yah, itu tergantung pada koordinat tekstur. Artinya, itu tergantung pada bagaimana tekstur dipetakan ke poligon. Untuk setiap fragmen tertentu, itu mungkin persegi yang selaras sumbu. Ini mungkin persegi yang tidak selaras sumbu. Mungkin persegi panjang. Itu mungkin trapesium. Mungkin hampir semua angka empat sisi (atau setidaknya, yang cembung).
Jika Anda melakukan pengaksesan tekstur dengan benar, cara untuk mendapatkan warna tekstur untuk sebuah fragmen adalah dengan mencari tahu apa persegi panjang ini. Kemudian ambil setiap texel dari tekstur dalam persegi panjang itu (menggunakan cakupan untuk skala warna yang ada di perbatasan). Kemudian rata-rata semuanya. Itu akan menjadi pemetaan tekstur yang sempurna.
Itu juga akan sangat lambat .
Untuk kepentingan kinerja, kami mencoba memperkirakan jawaban sebenarnya. Kami mendasarkan hal-hal pada satu koordinat tekstur, daripada 4 yang menutupi seluruh area fragmen dalam ruang texel.
Penyaringan berbasis Mipmap menggunakan gambar beresolusi lebih rendah. Gambar-gambar ini pada dasarnya adalah jalan pintas untuk metode yang sempurna, dengan pra-komputasi seperti apa blok warna yang besar ketika dicampur bersama. Jadi ketika memilih mipmap yang lebih rendah, ia menggunakan nilai pra-komputasi di mana setiap texel mewakili area tekstur.
Penyaringan anisotropik bekerja dengan cara mendekati metode sempurna (yang dapat, dan harus, digabungkan dengan pemetaan) melalui pengambilan sejumlah sampel tambahan yang telah diperbaiki. Tapi bagaimana cara mencari area di ruang texel untuk mengambil, karena masih hanya diberi satu koordinat tekstur?
Pada dasarnya, itu curang. Karena shader fragmen dieksekusi dalam blok tetangga 2x2, dimungkinkan untuk menghitung turunan dari nilai apa pun dalam shader fragmen dalam ruang-ruang X dan Y. Kemudian menggunakan turunan ini, ditambah dengan koordinat tekstur aktual, untuk menghitung perkiraan dari apa jejak tekstur fragmen yang sebenarnya akan. Dan kemudian melakukan sejumlah sampel dalam area ini.
Berikut diagram untuk membantu menjelaskannya:
Kotak hitam-putih mewakili tekstur kami. Itu hanya kotak-kotak 2x2 texels putih dan hitam.
Titik oranye adalah koordinat tekstur untuk fragmen yang dimaksud. Garis merah adalah jejak fragmen, yang berpusat pada koordinat tekstur.
Kotak hijau mewakili texels yang dapat diakses oleh implementasi penyaringan anisotropik (rincian algoritme penyaringan anisotropik spesifik platform, jadi saya hanya bisa menjelaskan ide umum).
Diagram khusus ini menunjukkan bahwa suatu implementasi mungkin mengakses 4 texels. Oh ya, kotak hijau mencakup 7 dari mereka, tetapi kotak hijau di tengah bisa mengambil dari mipmap yang lebih kecil, sehingga mengambil setara dengan 4 texels dalam satu pengambilan. Implementasi tentu saja akan berat rata-rata untuk yang diambil oleh 4 relatif terhadap yang texel tunggal.
Jika batas penyaringan anisotropik adalah 2 daripada 4 (atau lebih tinggi), maka implementasi akan memilih 2 sampel tersebut untuk mewakili jejak fragmen.