Sabtu, 10 Juni 2017

VSD Image Precision (Algoritma Painter)


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:

  1. 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.
  2. 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.
  3. 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);
}
}
}

Operasi Dasar :
  1. Hitung rentang 'y' dari sebuah objekHitung rentang 'x' dari garis pemindaian tertentu dari suatu objek
  2. Hitung titik perpotongan objek yang diberikan, dengan sinar melalui titik pixel (x, y).
  3. Pilih permukaan dengan kedalaman terbesar
  4. Pilih kedalaman terbesar berikutnya
  5. 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. 
  6. Jika tidak ada kedalaman tumpang tindih, maka lukis permukaan.
  7. 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


  1. Hitung jarak Z untuk masing-masing objek. 
  2. Pilih nilai Z terbesar, maka pegunungan yang lebih jauh dilukis terlebih dahulu.
  3. Pilih nilai Z kedua terbesar, maka dilukiskan padang rumput yang lebih dekat. 
  4. 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. 
Meskipun beberapa pohon lebih jauh dari sudut pandang beberapa bagian padang rumput, namun pemilihan susunan (pegunungan, padang rumput, pepohonan) membentuk urutan kedalaman yang valid, karena tidak ada objek dalam urutan yang mengaburkan bagian dari objek selanjutnya.

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:

Tidak ada komentar:

Posting Komentar