Visible Surface Determination (Z-Buffer)

Definisi Visible Surface Determination

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).
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 back-free culling. Untuk mendapat penyelesaiannya harus dilakukan dengan pendekatan yang lain. 
2. Ketelitian gambar (image-precission) 
bagian yang erlihat ditentukan dengan point-point pada setiap posisis pixelnya pada bidang proyeksi. Contohnya pada raytracing, atau Z-buffer
3. Ketelitian objek (object-precission)
menentukan bagian mana yang terlihat dengan membandingkan objek dan bagian-bagiannya dalam layar . COntohnya pada poly clipping, BSP trees,dll

Konsep dasar Visible-Surface Determination

Visible-Surface Determination atau yang sering disebut dengan Hidden Surface Removal adalah suatu algoritma yang digunakan untuk menghilangkan penampilan bagian yang tertutup oleh objek yang didepannya. Apabila ada dua bidang yang berpotongan, apabila 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, diperlukan Algoritma Hidden Surface Removal.

Algoritma Z-Buffer

Algoritma Depth Buffer atau sering disebut algoritma Z-Buffer adalah salah satu dari algoritma Visible Surface Determination yang mempergunakan image space sebagai dasar proses penghitungan tampak atau tidaknya permukaan suatu objek. Algoritma ini melakukan scaning satu kali untuk suatu permukaan objek sampai proses berakhir.
Algoritma ini menguji tampak atau tidaknya setiap pixel pada suatu permukaan objek yang satu terhadap permukaan objek yang lain dan harga permukaan yang paling dekat dengan bidang pandang yang akan tersimpan di dalam Depth Buffer dan selanjutnya harga intensitas warna dari permukaan pixel tersebut disimpan di dalam Refresh Buffer atau algoritma Depth Buffer ini akan menampilkan bagian permukaan objek berdasarkan posisi z yang paling dekat dengan bidang pandang dengan proyeksi orthogonal atau proyeksi tegak lurus. Permukaan untuk suatu titik pada (x,y) untuk setiap permukaan objek diuji mana yang paling dekat dengan bidang pandang. Untuk setiap titik posisi (x,y) pada bidang pandang, permukaan dengan z koordinat terbesar pada posisi itu akan terlihat. 
Gambar 1 memperlihatkan tiga permukaan bidang pada berbagai kedalaman z dengan posisi (x,y) yang sama untuk setiap permukaan.


Pada Gambar 2 dapat dilihat bahwa permukaan  S1 mempunyai harga z terkecil pada posisi (x,y) ini sehingga harga z disimpan pada Depth Buffer dan harga intensitas S1 pada (x,y) disimpan pada Refresh Buffer. 
Algoritma ini membutuhkan dua buffer untuk implementasi, yaitu : Buffer Depth dan Buffer Refresh.
Depth Buffer digunakan untuk menyimpan harga kedalaman atau harga z masingmasing pixel untuk setiap permukaan objek pada posisi xy pada layar sebagai batasan daerah permukaan yang dibandingkan.
Refresh Buffer digunakan menyimpan harga intensitas(warna) yang dimiliki oleh masing-masing posisi pixel permukaan yang tersimpan pada Depth Buffer.

Langkah-langkah  algoritma Depth Buffer adalah sebagai berikut :
1. Inisialisasi Depth Buffer dan Refresh Buffer sehingga untuk semua koordinat posisi(x,y) depth(x,y) =0 dan refresh(x,y) = background.
2. Untuk setiap posisi pada permukaan, bandingkan harga kedalaman terhadap harga yang tersimpan pada depth buffer untuk menentukan penampakan.
a. Hitung harga z untuk setiap posisi(x,y) pada permukaan.
b. Jika z>depth(x,y), kemudian masukan depth(x,y) = z dan refresh (x,y) = i, dimana i adalah harga dari intensitas pada posisi(x,y) di atas permukaan. 
Pada langkah terakhir, jika z lebih kecil dari harga Depth Buffer untuk posisi tersebut, titik tidak tampak. Ketika proses ini selesai untuk semua permukaan, Depth Buffer berisi harga z untuk permukaan yang tampak dan Refresh Buffer berisi hanya harga intensitas.
Metode Depth Buffer tidak membutuhkan sorting dari permukaan sebuah gambar. T Sebagai contoh, sebuah sistem dengan resolusi 1024 x 1024 membutuhkan lebih dari 1 juta posisi dalam Depth Buffer, dengan setiap posisi berisi bit-bit yang cukup untuk menyatakan keperluan peningkatan dari koordinat z.

Langkah-Langkah Z-Buffering

Pertama-tama, semua posisi pada depth buffer di-set 0 (kedalaman minimum), dan refresh buffer di-set pada intensitas background.
Tiap permukaan pada polygon diproses, menghitung kedalaman (nilai z) pada tiap posisi pixel (x,y). 
Nilai z hasil perhitungan dibandingkan dengan nilai yang disimpan sebelumnya pada posisi (x,y) yang sama.
Jika nilai z hasil perhitungan lebih besar maka simpan nilai z yang baru, dan nilai intensitas permukaan ditentukan di refresh buffer
Inisialisasi depth buffer dan refresh buffer untuk posisi (x,y)
Depth (x,y) = 0,  refresh(x,y) = Ibackgnd
Untuk tiap posisi pada setiap permukaan polygon, bandingkan nilai kedalaman dengan nilai kedalaman sebelumnya yang tersimpan di depth buffer
Hitung kedalaman z untuk tiap posisi (x,y) pada polygon
jika z > depth(x, y), maka set : depth(x,y) = z, refresh(x,y) = Isurface(x,y)
Ibackgnd = nilai intensitas background
Isurface = nilai intensitas permukaan pada posisi pixel (x,y)

Kelebihan dan Kekurangan Z-Buffering

Kelebihan :
Waktu yang diperlukan meningkat linier terhadap jumlah polygon
Dapat merender scene yang kompleks dengan benar
Mudah diimplementasikan

Kekurangan :
Butuh banyak memori 
Cukup lambat

Metode Depth-Buffer

Metode ini untuk menguji dari depth-z dari masing-masing permkaan untuk menentukan permukaan terlihat. Pertama kali ditemukan oleh Catmull 74. Algoritma dari Depth-Buffer (Z-Buffer), yaitu:
– Menginisialisas depth-buffer dan me-refeshnya sehingga untuk semua posisi penyangga 
(x, y) ==>          depth(x,y)= 0, refresh(x,y)= Ibackground
– Menghitung kedalaman z pada setiap posisi (X,y) dalam polygon
–  If  z> depth(x,y), then set depth (x,y) = z, refresh(x,y)=Isurface(x,y)
– Hitung nilai z untuk polygon planar. Dengan rumus Z = (-D-Ax-By)/ C. Lalu pada (x+ Dx,y), nilia dari z adalah z’=z-A/C
– Jika polygon tidak planar, maka di-subdivide (dibagi lagi).

Keuntungan :
o Presorting tidak ada dan perbandingan objek-objek diperlukan
o Waktu yang diambil dari perhitungan permukaan terlihat adalah konstan
o Merupakan implementasi yang sederhana dan mudah pada hardware
o Baik untuk animasi dan sangat mudah untuk diterapkan

Kekurangan :
o Membutuhkan memori yang besar untuk Z dan Frame buffer
o Merupakan subjek yang menggunakan nama lain.   == > Improved by A-buffer algorithm [CARP 84]
o Dapat menggambarkan pixel yang sama beberapa kali

Implementasi Algoritma Z Buffer 

Alur proses Hidden Surface Removal dengan menggunakan algoritma Z Buffer dapat dilihat pada Gambar 3. Proses yang dilakukan oleh Z Buffer adalah : 
• Meng-inisialisasi isi Buffer 
• Melakukan uji penampakan keseluruhan bagian permukaan setiap link mulai dari awal link hingga akhir link sebanyak 1 kali. 
• Memindahkan/menampilkan  seluruh isi Z Buffer 
Jadi bilamana Z Buffer melakukan proses Hidden Surface Removal secara lengkap maka Z Buffer sudah melakukan : 
a) Menginisialisasi Depth Buffer dan Refresh Buffer yang berukuran sebesar bidang gambar. 
b) Berpindah dari link ke link berikutnya hanya satu kali dimulai dari awal link data permukaan hingga akhir link data permukaan untuk uji penampakan. 
c) Memindahkan/menampilkan isi Refresh Buffer yang berukuran sebesar bidang gambar.

Gambar 3. Algoritma Z Buffer

Gambar Implementasi Z-Buffer 


Gambar 4. Membentuk bayangan dengan Z-Buffer

Gambar 5.  Complementary matching antara 2 objek fragmen menggunakan Z-buffer

Gambar 6. Mendeteksi bagian yang retak pada suatu objek

Sumber :

http://jurnalinformatika.petra.ac.id/index.php/inf/article/viewFile/15800/15792
https://freezcha.wordpress.com/2009/10/27/visual-surface-determination/
http://dinus.ac.id/repository/docs/ajar/8_-_HSR.ppt
cgi.di.uoa.gr/~graphics/Downloads/papers/conferences/s15.pdf

Komentar

Postingan Populer