Apa itu VSD ?
Visible
Surface Determination (VSD)
atau disebut juga dengan Hidden Surface
Removal (HSR) merupakan suatu cara untuk menentukan garis atau permukaan
yang terlihat pada suatu objeck 3D dan spesifikasi pandangan (kamera). Proses
VSD dan HSR ini berguna untuk mempercepat proses rendering pada software
komputer grafik.
VSD adalah proses yang digunakan dalam
komputer grafik untuk menentukan bagian mana saja yang dapat dilihat dari sudut
pandang tertentu.
HSR adalah kebalikan dari VSD, dimana
proses akan menentukan bagian mana saja pada objek yang tidak tampak/terlihat
karena tertutup oleh objek lain untuk kemudian disembunyikan/dihilangkan.
Terdapat 3 pendekatan utama pada
permukaan terlihat, yaitu:
- Tes penampakan konservatif (Conservative Surface Test) hanya sebatas trivial reject saja, yang tidak memberikan jawaban, contohnya Spatial Subdivision, Back-Face Culling. Untuk mendapat penyelesaiannya harus dilakukan dengan pendekatan yang lain.
- Ketelitian gambar (Image-Precission) bagian yang terlihat ditentukan dengan point-point pada setiap posisi pixelnya pada bidang proyeksi. Contohnya pada Painter’s Algorithm atau Z-buffer.
- Ketelitian objek (Object-Precission) menentukan bagian mana yang terlihat dengan membandingkan objek dan bagian-bagiannya dalam layar. Contohnya pada 3D Sort Algorithm, Binary Space Partitioning dan Warnock Algorithm.
Painter's Algorithm
Algoritma ini didasarkan pada pemilihan urutan kedalaman dan
merupakan gabungan objek dan algoritma ruang gambar. Menggambar permukaan dari
belakang (terjauh) ke depan (terdekat), dengan poligon yang terdepan akan
menutupi pixel di belakangnya. Caranya adalah sebagai berikut:
- Urutkan semua poligon sesuai dengan kedalaman nilai z (ruang objek).
- Menggambar objek dalam urutan (terjauh ke terdekat). Gambarlah poligon dari belakang (maksimum z) ke depan (minimum z)
- Objek yang lebih dekat “dilukis ulang” di atas bagian atas objek-objek lebih jauh
Algoritma Painter disebut sebagai pengisian prioritas,
adalah salah satu cara termudah untuk masalah visibilitas dalam grafis tiga
dimensi. Saat memproyeksikan tampilan 3D ke layar 2D, cukup penting berbagai titik
untuk difinalisasi dimana poligon yang terlihat, dan poligon mana yang
tersembunyi.
Algoritma Painter’s
menunjukkan cara yang digunakan oleh sebagian besar pelukis untuk mengecat
bagian-bagian terpencil/terdalam dari
sebuah gambar sebelum bagian-bagian yang lebih dekat
sehingga menyembunyikan beberapa area dari bagian yang jauh. Algoritma
painter’s mengatur
semua poligon dalam pandangan berdasarkan kedalamannya dan kemudian melukisnya
dalam urutan, terjauh ke
terdekat.
Pengurutan yang digunakan oleh algoritma ini disebut 'Depth-Sorting’, permukaan diurutkan atau disusun berdasarkan
pengurangan kedalaman objek yang ada dan
tidak harus memperhatikan jarak
ke bagian-bagian gambar lainnya.
Algoritma :
Mengurutkan objek secara mendalam, membelah(membagi) jika perlu untuk menangani perpotongan;
Loop pada objek (menggambar
dari belakang ke depan){
Loop
pada y dalam rentang y objek ini{
Loop pada x dalam
rentang x dari garis pemindaian objek ini{
Gambar [x, y] = bayangan
(x, y);
}
}
}
- Hitung rentang 'y' dari sebuah objekHitung rentang 'x' dari garis pemindaian tertentu dari suatu objek
- Hitung titik perpotongan objek yang diberikan, dengan sinar melalui titik pixel (x, y).
- Pilih permukaan dengan kedalaman terbesar
- Pilih kedalaman terbesar berikutnya
- Evaluasi kedalaman dua objek, tentukan apakah A ada di depan B, atau B ada di depan A, apakah keduanya tidak tumpang tindih di bidang xy, atau keduanya berpotongan.
- Jika tidak ada kedalaman tumpang tindih, maka lukis permukaan.
- Jika tumpang tindih, maka membagi satu objek dengan objek lainnya yang berpotongan. Keuntungan dari algoritma pelukis adalah inner loop yang cukup mudah dan batasannya adalah sortasi operasi.
Logika & Contoh
- Hitung jarak Z untuk masing-masing objek.
- Pilih nilai Z terbesar, maka pegunungan yang lebih jauh dilukis terlebih dahulu.
- Pilih nilai Z kedua terbesar, maka dilukiskan padang rumput yang lebih dekat.
- Terakhir pilih Z terkecil, maka melukiskan pepohonan yang jaraknya paling dekat. Hal ini membuat sebagian objek yang lebih belakang tertutupi pixelnya oleh sebagian oleh objek yang lebih depan.
Keuntungan:
- Sangat baik jika urutan valid, mudah untuk mengambarkannya, namun tidak begitu baik untuk permukaan yang lebih kompleks.
- Untuk kasus sederhana sangat mudah untuk diterapkan
- Cocok untuk render Pipeline
Kekurangan:
- Tidak begitu efisien - semua poligon di render, bahkan ketika mereka tidak terlihat
- Kompleks processing (sorting+tests) untuk objek-objek yang kompleks
- Tidak mungkin ada solusi untuk menyortir rangka
- Kemungkinan loop tak terbatas pada urutan permukaan yang saling bertukar(tumpang tindih
Poligon yang
tumpang tindih dapat menyebabkan algoritma menjadi gagal. Kelemahan ini
menyebabkan pengembangan teknik penyangga (Z-buffer), yang dapat dipandang
sebagai pengembangan algoritma painter, dengan menyelesaikan konflik mendalam
berdasarkan basis pixel demi pixel, mengurangi kebutuhan akan basis kedalaman.
Referensi: