Buffer Kedalaman (Direct3D 9)
Buffer kedalaman, sering disebut z-buffer atau w-buffer, adalah properti perangkat yang menyimpan informasi kedalaman yang akan digunakan oleh Direct3D. Ketika Direct3D merender adegan ke permukaan target, itu dapat menggunakan memori di permukaan buffer kedalaman terkait sebagai ruang kerja untuk menentukan bagaimana piksel poligon raster menempati satu sama lain. Direct3D menggunakan permukaan Direct3D di luar layar sebagai target tempat nilai warna akhir ditulis. Permukaan buffer kedalaman yang terkait dengan permukaan target render digunakan untuk menyimpan informasi kedalaman yang memberi tahu Direct3D seberapa dalam setiap piksel yang terlihat dalam adegan.
Ketika adegan dirasterisasi dengan buffering kedalaman diaktifkan, setiap titik pada permukaan penyajian diuji. Nilai dalam buffer kedalaman dapat berupa z-coordinate titik atau koordinat w-koordinatnya yang homogen - dari lokasi titik (x,y,z,w) di ruang proyeksi. Buffer kedalaman yang menggunakan nilai z sering disebut z-buffer, dan yang menggunakan nilai w disebut w-buffer. Setiap jenis buffer kedalaman memiliki kelebihan dan kekurangan, yang dibahas nanti.
Pada awal pengujian, nilai kedalaman dalam buffer kedalaman diatur ke nilai terbesar yang mungkin untuk adegan. Nilai warna pada permukaan penyajian diatur ke nilai warna latar belakang atau nilai warna tekstur latar belakang pada saat itu. Setiap poligon dalam adegan diuji untuk melihat apakah bersinggungan dengan koordinat saat ini (x,y) pada permukaan penyajian. Jika ya, nilai kedalaman - yang akan menjadi koordinat z dalam z-buffer, dan koordinat w dalam w-buffer - pada titik saat ini diuji untuk melihat apakah itu lebih kecil dari nilai kedalaman yang disimpan dalam buffer kedalaman. Jika kedalaman nilai poligon lebih kecil, nilai tersebut disimpan dalam buffer kedalaman dan nilai warna dari poligon ditulis ke titik saat ini pada permukaan penyajian. Jika nilai kedalaman poligon pada saat itu lebih besar, poligon berikutnya dalam daftar diuji. Proses ini diperlihatkan dalam diagram berikut.
Catatan
Meskipun sebagian besar aplikasi tidak menggunakan fitur ini, Anda dapat mengubah perbandingan yang digunakan Direct3D untuk menentukan nilai mana yang ditempatkan di buffer kedalaman dan kemudian permukaan target render. Untuk melakukannya, ubah nilai untuk status render D3DRS_ZFUNC. Pada beberapa perangkat keras, mengubah fungsi perbandingan dapat menonaktifkan pengujian z hierarkis.
Hampir semua akselerator di pasar mendukung z-buffering, menjadikan z-buffer sebagai jenis buffer kedalaman yang paling umum saat ini. Namun di mana-mana, z-buffer memiliki kelemahannya. Karena matematika yang terlibat, nilai z yang dihasilkan dalam z-buffer cenderung tidak didistribusikan secara merata di seluruh rentang z-buffer (biasanya 0,0 hingga 1,0, inklusif). Secara khusus, rasio antara bidang kliping jauh dan dekat sangat mempengaruhi seberapa merata nilai z didistribusikan. Menggunakan jarak bidang jauh ke rasio jarak bidang dekat 100, 90 persen dari rentang buffer kedalaman dihabiskan pada 10 persen pertama dari rentang kedalaman adegan. Aplikasi umum untuk simulasi hiburan atau visual dengan adegan eksterior sering membutuhkan rasio bidang jauh/bidang dekat di mana saja antara 1.000 hingga 10.000. Pada rasio 1.000, 98 persen dari rentang dihabiskan pada 2 persen pertama dari rentang kedalaman, dan distribusi menjadi lebih buruk dengan rasio yang lebih tinggi. Ini dapat menyebabkan artefak permukaan tersembunyi dalam objek yang jauh, terutama saat menggunakan buffer kedalaman 16-bit, kedalaman bit yang paling umum didukung.
Buffer kedalaman berbasis w, di sisi lain, sering lebih merata antara bidang klip dekat dan jauh daripada z-buffer. Manfaat utamanya adalah bahwa rasio jarak untuk bidang kliping jauh dan dekat tidak lagi menjadi masalah. Ini memungkinkan aplikasi untuk mendukung rentang maksimum yang besar, sambil tetap mendapatkan buffer kedalaman yang relatif akurat dekat dengan titik mata. Buffer kedalaman berbasis w tidak sempurna, dan terkadang dapat menunjukkan artefak permukaan tersembunyi untuk objek dekat. Kelemahan lain dari pendekatan w-buffered terkait dengan dukungan perangkat keras: w-buffering tidak didukung secara luas dalam perangkat keras seperti z-buffering.
Menggunakan z-buffer memerlukan overhead selama penyajian. Berbagai teknik dapat digunakan untuk mengoptimalkan penyajian saat menggunakan z-buffer. Untuk detailnya, lihat Performa Z-Buffer.
Catatan
Interpretasi aktual dari nilai kedalaman khusus untuk perender.
Bagian ini menyajikan informasi tentang menggunakan buffer kedalaman untuk garis tersembunyi dan penghapusan permukaan tersembunyi.
- Kueri untuk Dukungan Buffer Kedalaman (Direct3D 9)
- Membuat Buffer Kedalaman (Direct3D 9)
- Mengaktifkan Buffering Kedalaman (Direct3D 9)
- Mengambil Buffer Kedalaman (Direct3D 9)
- Membersihkan Buffer Kedalaman (Direct3D 9)
- Mengubah Akses Tulis Buffer Kedalaman (Direct3D 9)
- Mengubah Fungsi Perbandingan Buffer Kedalaman (Direct3D 9)
Topik terkait