Rabu, 14 Juni 2017

Backface Cully (Backface Culling)

Setelah sekian lama tidak publikasi entri sama sekali, kali ini saya akan mempublikasikan sebuah materi mengenai Backface Cully atau biasa disebut dengan Backface Culling. Sebelum menjelaskan tentang apa itu Backface Culling, berikut akan dijelaskan terlebih dahulu tentang apa itu Visible-Surface Determination atau VSD.

Visible-Surface Determination atau yang sering disebut dengan Hidden Surface Removal atau hidden-surface elimination adalah suatu algoritma yang digunakan untuk menghilangkan penampilan bagian yang tertutup oleh objek yang didepannya.

Apabila ada dua bidang yang berpotongan, ditampilkan biasa tanpa menggunakan algoritma Visible Surface Determination maka bagian yang berpotongan itu akan tidak kelihatan, oleh karena bidang yang satu ditutupi oleh bagian yang lain tanpa memotong.  Oleh karena itu untuk menampilkan bidang perpotongan dengan memberikan titik pandang dan arah pandang, diperlukan Algoritma Hidden Surface Removal.

Dapat dikategorikan menjadi object-space methods dan image-space methods. Algoritma ruang objek, menentukan objek mana yang akan berada di depan dari yang lain digunakan pada 3D objek ( verteks,edge,permukaan). Algoritma ruang gambar menentukan objek mana yang tampil pada setiap pixel digunakan pada gamabar 2D.


Kompleksitas pada Hidden Surface Elimination adalah pertama jika suatu tempat memiliki n permukaan, maka setiap permukaan harus di uji terhadap setiap permukaan lain untuk visibilitas, bisa digunakan algotima presisi objek untuk mengambil O(n^2) waktu. Dilain hal, jika terdapat N Ipixel, dapat menggunakan algoritma presisi gambar untuk mengambil O(nN) waktu, setiap pixel harus diuji untuk visibilitas dan n permukaan. Sejak angka permukaan lebih kecil ketimbang angka pixel, maka penentuan angka yang harus dibuat harus lebih kecil dari objek presisi, n<<N.

Setelah kita mengerti tentang VSD, lalu apakah itu Backface Culling? Backface Cully (Backface Culling) adalah bagian yang penting dalam performa 3D Enginge untuk mengecek visibilitas. Tujuannya adalah mendeteksi poligon yang tidak terlihat di dalam di dalam sebuah scene tertentu, yaitu poligon yang tidak tertangkap oleh penglihatan.


Mendeteksi back-facing poligon memungkinkan kita untuk menghilangkannya dari pipeline rendering engine pada tahap awal, sehingga mengurangi jumlah perhitungan dan lalu lintas memori. Ada berbagai cara mendeteksi apakah poligon menghadap ke arah atau menjauhi viewer (pemirsa), dan masing-masing metode memiliki tingkat kerumitan dan akurasi yang berbeda.

Backface culling dapat dilakukan pada beberapa tahap dalam pipeline 3D. Meskipun kita bisa duduk santai dan membiarkan proses raster (mengkonversi gambar yang disimpan sebagai outline ke dalam piksel yang bisa ditampilkan di layar atau dicetak) melakukan Culling sendiri untuk kita, ada baiknya untuk untuk mengatur performa culling terlebih dahulu. Karena, semakin banyak data yang tidak relevan kita buang, semakin sedikit data yang perlu dimasukkan ke dalam sistem (menghemat bandwith) dan semakin sedikit pula perhitungan yang harus dilakukan (menghemat penggunaan CPU). Culling dapat dilakukan dalam 3 tahap:
1. sebelum transformasi dan pencahayaan
2. setelah transformasi namun sebelum pencahayaan
3. pada saat rasterize (setelah trasnformasi dan pencahayaan)

Tahap 2 dan 3 biasanya dilakukan di ruang layar dengan memeriksa urutan searah jarum jam/ berlawanan jarum jam dari simpul poligon. Pada tahap 1 biasanya dilakukan dengan menghitung dot produk dari tampilan vektor dan segi poligon normal. Segi normal dapat dihitung cepat atau didahului dan disimpan dengan kumpulan data. Bagaimanapun, culling tahap 1 lebih cepat dari pada tahap 2 dan 3 karena lebih menghemat bandwith dan memerlukan sedikit perhitungan.

Berikut contoh gambar dari Backface Culling :