Mengonfigurasi fungsionalitas stensil kedalaman

Bagian ini mencakup langkah-langkah untuk menyiapkan buffer stensil kedalaman, dan status stensil kedalaman untuk tahap output-merger.

Setelah Anda tahu cara menggunakan buffer stensil kedalaman dan status stensil kedalaman yang sesuai, lihat teknik stensil tingkat lanjut.

Buat Status Depth-Stencil

Status stensil kedalaman memberi tahu tahap output-merger cara melakukan uji stensil kedalaman. Tes stensil kedalaman menentukan apakah piksel tertentu harus digambar atau tidak.

Mengikat Data Depth-Stencil ke Tahap OM

Ikat status stensil kedalaman.

Mengikat sumber daya stensil kedalaman menggunakan tampilan.

Target render semuanya harus jenis sumber daya yang sama. Jika antialias multisample digunakan, semua target render terikat dan buffer kedalaman harus memiliki jumlah sampel yang sama.

Ketika buffer digunakan sebagai target render, pengujian stensil kedalaman dan beberapa target render tidak didukung.

  • Sebanyak 8 target render dapat terikat secara bersamaan.
  • Semua target render harus memiliki ukuran yang sama di semua dimensi (lebar dan tinggi, dan kedalaman untuk ukuran 3D atau array untuk *Jenis array).
  • Setiap target render mungkin memiliki format data yang berbeda.
  • Tulis masker mengontrol data apa yang ditulis ke target render. Kontrol masker tulis output pada target per render, tingkat per komponen data apa yang ditulis ke target render.

Teknik Stensil Tingkat Lanjut

Bagian stensil dari buffer stensil kedalaman dapat digunakan untuk membuat efek penyajian seperti komposit, penurunan, dan kerangka.

Komposit

Aplikasi Anda dapat menggunakan buffer stensil untuk menyusun gambar 2D atau 3D ke adegan 3D. Masker di buffer stensil digunakan untuk menempati area permukaan target penyajian. Informasi 2D yang disimpan, seperti teks atau bitmap, kemudian dapat ditulis ke area terakludasi. Secara bergantian, aplikasi Anda dapat merender primitif 3D tambahan ke wilayah bertopeng stensil dari permukaan target penyajian. Bahkan dapat merender seluruh adegan.

Game sering menggabungkan beberapa adegan 3D bersama-sama. Misalnya, game mengemudi biasanya menampilkan cermin tampilan belakang. Cermin berisi tampilan adegan 3D di belakang pengemudi. Ini pada dasarnya adalah adegan 3D kedua yang terdiri dari tampilan ke depan driver.

Desaling

Aplikasi Direct3D menggunakan decaling untuk mengontrol piksel mana dari gambar primitif tertentu yang digambar ke permukaan target penyajian. Aplikasi menerapkan desal pada gambar primitif untuk mengaktifkan poligon koplanar untuk dirender dengan benar.

Misalnya, saat menerapkan tanda ban dan garis kuning ke jalan, penandaan akan muncul langsung di atas jalan. Namun, nilai z marking dan jalannya sama. Oleh karena itu, buffer kedalaman mungkin tidak menghasilkan pemisahan yang bersih antara keduanya. Beberapa piksel di primitif belakang dapat dirender di atas primitif depan dan sebaliknya. Gambar yang dihasilkan tampaknya berkilau dari bingkai ke bingkai. Efek ini disebut z-fighting atau flimmering.

Untuk mengatasi masalah ini, gunakan stensil untuk menutupi bagian primitif belakang tempat desal akan muncul. Matikan z-buffering dan render gambar primitif depan ke area masked-off permukaan render-target.

Beberapa penpaduan tekstur dapat digunakan untuk menyelesaikan masalah ini.

Kerangka dan Siluet

Anda dapat menggunakan buffer stensil untuk efek yang lebih abstrak, seperti menguraikan dan silhouetting.

Jika aplikasi Anda melakukan dua render melewati - satu untuk menghasilkan masker stensil dan kedua untuk menerapkan masker stensil ke gambar, tetapi dengan primitif sedikit lebih kecil pada pass kedua - gambar yang dihasilkan hanya akan berisi kerangka primitif. Aplikasi kemudian dapat mengisi area gambar yang ditutupi stensil dengan warna solid, memberikan tampilan timbul primitif.

Jika masker stensil berukuran dan bentuk yang sama dengan primitif yang Anda render, gambar yang dihasilkan berisi lubang di mana primitif harus. Aplikasi Anda kemudian dapat mengisi lubang dengan hitam untuk menghasilkan siluet primitif.

Stensil Dua Sisi

Volume Bayangan digunakan untuk menggambar bayangan dengan buffer stensil. Aplikasi ini menghitung volume bayangan yang dilemparkan dengan menempati geometri, dengan menghitung tepi siluet dan mengusirnya dari cahaya ke dalam satu set volume 3D. Volume ini kemudian dirender dua kali ke dalam buffer stensil.

Render pertama menggambar poligon yang menghadap ke depan, dan menaikkan nilai stensil-buffer. Render kedua menggambar poligon volume bayangan yang menghadap ke belakang, dan mengurangi nilai buffer stensil.

Biasanya, semua nilai bertahap dan berkurang saling membatalkan. Namun, adegan tersebut sudah dirender dengan geometri normal yang menyebabkan beberapa piksel gagal dalam pengujian z-buffer saat volume bayangan dirender. Nilai yang tersisa di buffer stensil sesuai dengan piksel yang ada di bayangan. Isi stensil-buffer yang tersisa ini digunakan sebagai masker, untuk menyatukan quad hitam besar yang mencakup semua ke dalam adegan. Dengan buffer stensil yang bertindak sebagai masker, hasilnya adalah untuk menggelapkan piksel yang ada di bayangan.

Ini berarti bahwa geometri bayangan digambar dua kali per sumber cahaya, sehingga memberikan tekanan pada throughput verteks GPU. Fitur stensil dua sisi telah dirancang untuk mengurangi situasi ini. Dalam pendekatan ini, ada dua set status stensil (dinamai di bawah), satu set masing-masing untuk segitiga menghadap depan dan yang lainnya untuk segitiga yang menghadap belakang. Dengan cara ini, hanya satu pass yang digambar per volume bayangan, per cahaya.

Membaca Buffer Depth-Stencil sebagai Tekstur

Buffer stensil kedalaman yang tidak aktif dapat dibaca oleh shader sebagai tekstur. Aplikasi yang membaca buffer stensil kedalaman sebagai tekstur merender dalam dua lintasan, lulus pertama menulis ke buffer stensil kedalaman dan lulus kedua membaca dari buffer. Hal ini memungkinkan shader untuk membandingkan nilai kedalaman atau stensil yang sebelumnya ditulis dengan buffer terhadap nilai untuk piksel yang dirender secara currrent. Hasil perbandingan dapat digunakan untuk membuat efek seperti pemetaan bayangan atau partikel lunak dalam sistem partikel.

Tahap Output Merger (OM)

Alur grafik

Tahap Output-Merger