SMAA: Enhanced Morfological Smoothing Subpixel


Artikel ini didasarkan pada majalah Jorge Jimenez, Jose Echevarria, Saus Thiago dan Diego Gutierrez.

Demo implementasi SMAA mereka dapat ditemukan di sini (file .exe). Pada GTX 960 2GB saya bekerja dengan sangat baik.

Metode anti-aliasing lama


Selama bertahun-tahun, standar untuk smoothing adalah MSAA (Multisampling Antialiasing) dan SSAA (Supersampling Antialiasing). Bahkan, mereka masih memberikan kualitas tertinggi di antara semua teknik anti-aliasing modern. Seperti yang kita ketahui, aliasing terjadi karena kurangnya sampel, baik pada spasial (garis putus-putus) maupun pada tingkat temporal (berkedip-kedip), biasanya di dekat tepi dan area gambar dengan kontras tinggi / rendah. Untuk mengatasinya, kami memiliki dua metode yang dulunya satu-satunya solusi: Supersampling dan Multisampling. Dengan supersampling, kami memperbesar gambar, dan kemudian mengurangi pengambilan sampel ke resolusi yang diinginkan. Prinsip ini bekerja dengan baik karena berlaku untuk semua aspek masalah. Multisampling menggunakan solusi serupa. Dalam metode ini, setiap sampel diduplikasi berdasarkan koefisien tertentu. Dengan resolusi tinggi modern, ini membutuhkan kartu grafis yang cukup kuat. Oleh karena itu, kita memerlukan metode pemulusan baru, baik pada tingkat spasial dan temporal. Semua metode ini menggunakan satu algoritma dalam pengenalan tepi pekerjaan mereka. Tetapi mereka melakukan operasi lain.

Metode perataan modern


Ada banyak metode berbasis filter modern yang melakukan pekerjaan dengan baik, meskipun lebih rendah dari dua yang tercantum di atas. FXAA, DEAA, GPAA, GBAA, CSAA, EQAA, DLAA ... Pada artikel ini kita akan berbicara tentang SMAA, dan pendahulunya - MLAA. Metode berbasis filter modern ini memiliki masalah sendiri:

  • Sebagian besar algoritma pengenalan tepi yang mendasari metode ini hanya mempertimbangkan perbedaan numerik antara piksel dan mengabaikan cara mereka ditampilkan kepada pemirsa.
  • Bentuk asli objek tidak selalu dipertahankan, pembulatan umum sudut hampir selalu terlihat jelas pada teks, sudut tajam, dan elemen subpiksel.
  • Sebagian besar solusi dirancang untuk hanya menangani pola horizontal atau vertikal, dan mengabaikan diagonal.
  • Elemen subpixel nyata dan gerakan subpixel tidak diproses dengan benar. Refleksi Aliasing (specular) dan bayangan (shading) tidak sepenuhnya dihilangkan.

Seperti yang Anda duga, kami mengangkat masalah ini karena kami ingin menghilangkannya.

Antialiasing morfologi (MLAA)


MLAA sedang mencoba mengevaluasi cakupan geometri asli. Untuk rasterisasi akurat dari segitiga yang dihaluskan, perlu untuk menghitung luas cakupan setiap piksel di dalam segitiga untuk mencampurnya dengan latar belakang dengan benar. MLAA dimulai dengan gambar anti-alias dan kemudian membalikkan proses dengan membuat vektor siluet untuk menghitung area yang dicakupnya. Karena latar belakang tidak dapat dikenali setelah rasterisasi, MLAA kemudian mencampurnya dengan tetangga, dengan anggapan bahwa nilainya dekat dengan nilai latar belakang aslinya. Dengan kata lain , algoritma mengenali batas (menggunakan informasi tentang warna atau kedalaman), dan kemudian menemukan pola spesifik di dalamnya. Smoothing disediakan oleh pencampuran piksel secara cerdas di perbatasan. MLAA memiliki implementasi pada DirectX 10 dan Mono Game (XNA). Ini jujur โ€‹โ€‹diterapkan dalam game seperti Fable II. Pencipta MLAA kemudian menciptakan SMAA, atau Enhanced Subpixel Morphological Antialiasing (sub-pixel canggih anti-aliasing morfologi), yang merupakan tema utama dari artikel ini.


MLAA sedang beraksi

Antialiasing Subpixel yang Ditingkatkan (SMAA)



Perbandingan SMAA dan metode lain dalam Crysis 2

SMAA memberikan pengenalan tepi yang andal, serta cara yang sederhana dan efisien untuk menangani elemen geometris dan garis diagonal yang tajam. Selain itu, SMAA tidak mengubah bentuk geometri, seperti metode lainnya.


Di atas - AA no; di tengah - MLAA; di bawah - SMAA

SMAA dibangun di atas pipa MLAA, dan meningkatkan atau memikirkan kembali setiap langkahnya. Secara khusus, pengenalan tepi ditingkatkan dengan menggunakan informasi warna bersama dengan mengadaptasi kontras lokal untuk membuat tepi yang lebih tajam. Metode ini memperluas jumlah pola yang digunakan untuk menyimpan elemen geometris dan diagonal yang tajam. Akhirnya, ia menunjukkan bagaimana smoothing morfologis dapat secara akurat dikombinasikan dengan multisampling atau supersampling dan proyeksi temporal.

Pengakuan tepi


Pengenalan tepi adalah langkah penting karena tepi yang tidak dikenali tetap terdistorsi. Di sisi lain, terlalu banyak tepian dengan penyaringan mengurangi kualitas gambar yang dihaluskan. Berbagai informasi dapat digunakan untuk pengenalan tepi: warna, kecerahan, kedalaman, permukaan normal dan kombinasinya. SMAA menggunakan luma karena empat alasan:

  1. Lebih sedikit artefak.
  2. Kecerahan selalu terlihat.
  3. Ini dapat menangani distorsi bayangan.
  4. Dan akhirnya, lebih cepat dari kroma.


Kiri dan tengah: metode lain untuk pengenalan tepi, yang mengarah ke tampilan persimpangan merah dan artefak; di sebelah kanan: tepi tajam SMAA

Ingat gambar ini. Inilah cara kerja pengenalan tepi: nilai akhir yang dihitung adalah nilai Boolean yang disebut batas tepi kiri . Demikian pula, nilai Boolean untuk tepi atas dihitung. Formula

cmaks=maks kiri(cl,cr,cb,ci,c2l kanan)


el prime=el wedgecl>0.5.cmaks


Semua nilai c disebut delta kontras .

Pemrosesan Pola


Pengenalan pola SMAA memungkinkan Anda menyimpan elemen geometris yang tajam, seperti sudut, memproses diagonal dan menyediakan pencarian yang akurat untuk jarak.

Elemen geometris yang tajam: Vektorisasi siluet dalam MLAA rentan terhadap sudut pembulatan. Untuk menghindari hal ini, SMAA menggunakan pengamatan bahwa persimpangan tepi pada garis kontur memiliki ukuran maksimum satu piksel, dan untuk sudut yang tajam, panjang ini cenderung lebih panjang. Oleh karena itu, SMAA membutuhkan panjang sisi berpotongan dua piksel, yang memungkinkan pemrosesan sudut yang kurang agresif.

Pola diagonal: kami telah menambahkan cara yang sama sekali baru untuk mengenali pola diagonal. Ini terdiri dari dua tahap berikut:

  1. Pencarian jarak diagonal dldan drkiri dan kanan garis diagonal.
  2. Mendapatkan Tepian yang Bersimpangan e1dan e2.
  3. Dengan menggunakan input ini, kami menetapkan pola diagonal khusus untuk mengakses tekstur pra-kalkulasi wilayah, memperoleh wilayah tersebut atdan ab.

Jika pengenalan pola diagonal gagal, pengenalan pola ortogonal dimulai.

Pencarian akurat untuk jarak: kunci untuk mengenali dan mengklasifikasikan pola adalah untuk mendapatkan jarak yang tepat dari tepi (panjang untuk kedua ujung garis). Untuk mempercepat proses ini, MLAA aktif menggunakan interpolasi perangkat keras. Pemfilteran perangkat keras Bilinear dapat digunakan untuk memperoleh dan menyandikan hingga empat nilai berbeda dalam satu operasi akses memori. Interpolasi linier dari dua nilai biner ini (yaitu, bilinear ) menciptakan nilai floating point tunggal yang dijelaskan oleh rumus berikut:

fx(b1,b2,x)=x.b1(1โˆ’x).b


Dimana b1dan b2Apakah dua nilai biner (0 atau 1), dan xApakah nilai interpolasi.

Hasil


MLAA bekerja dengan satu sampel per piksel. Yang mengarah ke sub-sampling, karena itu tidak mungkin untuk membuat ulang elemen sub-pixel nyata.


Bandingkan MLAA dengan SMAA dan tanpa AA

Namun, SMAA beroperasi pada tingkat sub-piksel. Ini mengarah pada hal berikut:

  • Kontras lokal
  • Mengenali Pola Diagonal
  • Elemen geometris yang tajam
  • Pencarian tepat

Semua ini dapat dilihat pada gambar di bawah ini, di mana aspek-aspek ini dibandingkan dengan hasil metode lain. Bahkan, SMAA dapat menghasilkan hasil yang mendekati SSAA 16x.


Overhead yang dibuat oleh masing-masing solusi ini dapat diabaikan. Secara khusus, adaptasi kontras lokal hanya membutuhkan 0,08 ms, pengenalan elemen geometris yang tajam dan jarak yang tepat membutuhkan 0,01 ms, dan pemrosesan diagonal menambah 0,12 ms ekstra. Sederhananya, SMAA cukup cepat, lebih lambat dari SSAA dan MSAA, tetapi lebih bermanfaat dan kurang intensif sumber daya.

Source: https://habr.com/ru/post/id440428/


All Articles