Apa tujuan buffer stensil? Lebih tepatnya, apa itu stensil dalam grafik komputer?

41

Saya banyak membaca kata stensil, dan saya tidak tahu apa tujuan sebenarnya dari grafik komputer.

Melihat gambar hitam putih di wikipedia, saya masih mengalami masalah dengan itu.

Mengapa kita menggunakan buffer stensil atau stensil, dan apa bedanya dengan buffer-Z? Mengapa menggunakan kata ini yang tampaknya memiliki makna dalam desain grafis?

jokoon
sumber
Pertanyaan yang bagus, yang saya tahu adalah ini digunakan untuk membuat bayangan ... Tapi saya akan tertarik mendengar penjelasan lengkapnya!
Ricket

Jawaban:

40

Dalam inkarnasi aslinya, buffer stensil adalah framebuffer satu bit bit (yaitu hitam atau putih, tetapi tidak ada abu-abu). Anda dapat merendernya apa pun yang Anda inginkan seperti framebuffer lainnya. Kemudian, nanti, Anda bisa menggunakan konten buffer itu untuk "stensil" atau menutupi ketika menggambar ke buffer biasa.

Contoh: Misalkan Anda membuat game mengemudi. Anda ingin memiliki sedikit kaca spion di layar yang menunjukkan apa yang ada di belakang mobil. Anda harus membuat tampilan yang menunjuk ke belakang mobil, tetapi Anda hanya ingin membuatnya dalam bentuk persegi panjang bulat dari kaca spion. Solusi khasnya adalah:

  1. Render bentuk persegi panjang bulat ke buffer stensil.
  2. Aktifkan stencilling.
  3. Render tampilan menunjuk ke belakang ke buffer biasa.

Stensil kemudian akan menutupinya sehingga Anda hanya menggambar bentuk cermin.

Sekarang membuat pipeline jauh lebih fleksibel dan dapat diprogram, buffer stensil hanya digunakan sebagai framebuffer 1-bit generik yang dapat Anda lakukan apa pun yang Anda inginkan. Bayangan adalah kasus penggunaan umum.

banyak sekali
sumber
10
Dengan kata lain, itu pada dasarnya memiliki fungsi yang sama dengan stensil kehidupan nyata, menutupi bagian-bagian saat menggunakan tinta.
Kaj
4
Hampir semua perangkat saat ini mendukung buffer stensil 8-bit.
Chris Howe
Saya tidak benar-benar mendapatkan contoh Anda, itu seperti ada frustrasi kedua? apakah itu meraster bagian lain dari adegan itu? Bisakah Anda memberi contoh dengan bayangan?
jokoon
Itu hanya buffer bingkai kedua. Anda selalu dapat mengubah frustum sebelum Anda membuatnya (yang saya pikir sistem bayangan lakukan), tetapi itu bukan bagian dari konsep inti.
murah hati
9

Selain penggunaan fungsional buffer stensil yang sudah dibahas orang, buffer stensil juga dapat digunakan untuk optimisasi.

Karena posisi tes stensil dalam pipa grafis (yang sebelum pixel shading), pengujian stensil dapat digunakan untuk membunuh piksel yang melakukan pekerjaan shading berat ketika mereka tidak diperlukan. Seringkali ini dapat dilakukan pada granularity yang lebih kasar daripada hanya satu pixel saja. ubin piksel, sehingga pekerjaan sering dapat dimusnahkan selama tahap rasterisasi kasar juga.

jpaver
sumber
4

Itu hanya buffer yang mengontrol piksel mana yang dapat dimodifikasi saat poligon dirender. Untuk setiap piksel, ada nilai stensil yang sesuai, dan piksel dapat dimodifikasi / diabaikan dengan syarat tergantung pada nilai-nilai ini

Paling sederhana, ini dapat digunakan seperti stensil fisik - topeng yang memungkinkan beberapa piksel masuk, dan menghentikan piksel lainnya yang sedang dimodifikasi.

Ini sangat mirip dalam perilaku dengan z-buffer - seperti pengujian kedalaman, pengujian stensil adalah tes benar / salah, dan ada pengaturan serupa untuk mengontrol tes stensil (lulus jika lebih besar / kurang / sama). Tetapi alih-alih menulis kedalaman untuk itu, biasanya akan memiliki nilai yang ditentukan sebelumnya ditulis untuk itu, atau akan bertambah / dikurangi ketika piksel diambil, seperti yang digunakan dalam algoritma bayangan stensil.

bluescrn
sumber