Hidden Surface Removal (HSR)
Hidden Surface Removal Sering disebut juga visible surface detection Salah satu cara untuk mempercepat pemrosesan grafik 3D. Dengan cara menghilangkan semua permukaan yang tidak terlihat (yang menghadap ke belakang, atau tertutup objek lain) Waktu yang diperlukan untuk memproses sebuah scene menjadi cepat
Hidden Surface Removal Tepat Tidak boleh menghapus permukaan yang seharusnya terlihat Efisien Semua permukaan yang tidak terlihat tidak perlu diproses
Metode Painter’s Algorithm Z-Buffering Back Space Detection Ray Casting
Painter’s Algorithm PROBLEM :
Depth Cueing Intensitas dan efek yang berbeda untuk jarak yang berbeda
Z-Buffering Membandingkan kedalaman permukaan pada tiap posisi pixel pada bidang proyeksi Mencatat semua koordinat Z setiap titik yang diletakkan di layar Ketika akan menampilkan koordinat, dibandingkan dengan koordinat lain untuk melihat apakah ada yang menghalangi di depan, jika ada maka koordinat tersebut tidak perlu digambar
Z-Buffering Memori yang dibutuhkan untuk implementasi adalah sebesar lebar dikali panjang memori layar Memerlukan 2 buffer : depth buffer dan refresh buffer Depth buffer menyimpan nilai kedalaman untuk setiap posisi (x,y) Refresh buffer menyimpan nilai intensitas untuk setiap posisi
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
Langkah-Langkah Z-Buffering 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)
z-buffer(x,y)=max depth COLOR(x,y)=warna background for(tiap polygon P dalam daftar polygon) do{ for(tiap pixel(x,y) pada P) do{ Hitung z-depth pada P di (x,y) If (z-depth > z-buffer[x,y]) then{ z-buffer[x,y]=z-depth; COLOR(x,y)=intensitas P di (x,y); }
Z-Buffering Kelebihan Kekurangan Waktu yang diperlukan meningkat linier terhadap jumlah polygon Dapat merender scene yang kompleks dengan benar Mudah diimplementasikan Kekurangan Butuh banyak memori Cukup lambat
Contoh
Jawab
Z-Buffer Sebuah titik (x,y,z) berada dipermukaan polygon, bila Ax + By + Cz + D = 0, maka
Contoh Diketahui 3 buah polygon A,B, dan C dengan persamaan berikut Polygon A: fA(x,y, z) = 2x + 12y – 4z + 8 Polygon B: fB(x,y,z) = 4x – 6y + 2z – 6 Polygon C: fC(x,y,z) = 8x – 4y + 4z – 8 Tentukan depth-buffer dari ketiga polygon tersebut untuk bidang pandang berikut Bila ketiga polygon tersebut digambar dilayar menggunakan algoritma depth-buffer, tentukan, polygon mana yang tampak dilayar untuk bidang pandang tersebut.
Back Face Detection Pada objek solid, ada permukaan yang menghadap ke penonton dan ada yang berlawanan dengan penonton (front faces) (back faces). Misal : sumbu z menunjuk ke penonton. Jika komponen z dari vektor adalah negatif maka back face, jika positif maka front face
Back Face Detection Permukaan polygon (A,B,C,D adalah parameter bidang permukaan polygon) f(x,y,z) = Ax + By + Cz + D Vektor normal N dari permukaan : N(A,B,C)
Back Face Detection Sebuah titik (x,y,z) berada dibelakang permukaan polygon bila Ax + By + Cz + D < 0
Back Face Detection Titik pandang (kamera) : Vview(xv,yv,zv) Permukaan polygon di belakang titik pandang (tidak nampak) jika : N . Vview > 0 Arah pandang adalah sumbu z negatif Vview = ( 0,0, −1) Permukaan polygon berada di belakang jika: (A,B,C) .(0,0,−1) > 0, − C > 0 Atau C ≤ 0
Contoh 1 Permukaan normal segitiga N(0.5 , 0.8 , 0.1) menuju keluar permukaan depan segitiga Sebuah verteks pada segitiga adalah (3,2,2) dan kamera (1,8,0). Apakah permukaan depan dari segitiga tersebut terletak dibelakang atau didepan kamera? Atau apakah kamera bisa melihat bagian permukaan depan dari segitiga tersebut ? N = (0,5 , 0,8 , 0,1) Permukaan depan
Jawab Vview adalah vektor dari kamera ke verteks segitiga, yaitu: Vview = (3,2,2) – (1,8,0) = (2, –6,2) N . Vview = (0,5 , 0,8 , 0,1) . (2, –6,2) = (0,5). (2) + (0,8).(–6) + (0,1).(2) = – 3,6 Hasil N . Vview negatif maka bisa dilihat
Contoh 2 Kamera berada di posisi (2,1,5). Sebuah bidang mempunyai persamaan 5x + 3y – 2z + 12 = 0. Apakah bidang tersebut berada dibelakang atau didepan kamera? Jawab : 5(2) + 3(1) – 2(5) + 12 = 15 > 0 Karena itu, bidang berada di depan kamera.
Ray Casting Jika kita memancarkan sebuah garis lurus dari sebuah posisi pixel pada bidang pandang, kita dapat menentukan objek apa yang berpotongan dengan garis tersebut. Setelah menghitung semua titik perpotongan, kita mengidentifikasi bahwa permukaan yang dapat dilihat adalah yang mempunyai titik perpotongan terdekat
Ray Casting