Visible Surface Determination (Z-Buffer)
Definisi Visible Surface Determination
Konsep dasar Visible-Surface Determination
Algoritma Z-Buffer
Gambar Implementasi Z-Buffer
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
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
Posting Komentar