Şablon tamponu nedir?


26

Wikipedia , bir şablon tamponunun bir gölgelendiricinin kullanabileceği bazı rasgele tampon olduğunu belirtir .

Bununla birlikte, derinlik ve piksel tamponlarını kırpmak veya başka şekilde "sıkıca bağlamak" için hafifçe çelişkili olduğunu ima eder.

Şablon tamponu gerçekten ne yapar ve pratikte modern uygulamalarda nasıl kullanılır?

Yanıtlar:


31

Vikipedi şablon şablon tanımı gerçekten de harika değil, modern uygulamaların detaylarına (OpenGL) çok fazla odaklanıyor. Ayrıştırılmış sürümünü anlamak daha kolay buluyorum :

Şablon, her kullanıldığında aynı harfleri, sembolleri, şekilleri veya desenleri çizmek veya boyamak için kullanılan bir şablondur. Böyle bir şablon tarafından üretilen tasarıma bir şablon da denir.

Bilgisayar Grafiği'nden önce şablonun anlamı budur. Google Görseller’e stencil yazarsanız , bu ilk sonuçlardan biridir:

Şablon maskesi

Gördüğünüz gibi, modelin negatifini bir şey üzerine "boyamak" için kullanılabilecek bir maske veya desendir.

Tampon şablon tam aynı şekilde işler. Bir şablon şablon geçişi yapılarak şablon tamponunu seçilen bir desenle doldurabilir, ardından modelin müteakip çizimlerde nasıl yorumlanacağını tanımlayacak uygun şablon fonksiyonunu ayarlayabilir, ardından son sahneyi oluşturabilirsiniz. Karşılaştırma işlevine göre şablon maskesinin reddedilen alanlarına düşen pikseller çizilmez.


Şablon tamponun uygulanmasına gelince, bazen gerçekten de derinlik tamponu ile birleştirilir. Grafik donanımlarının çoğu, çoğu uygulama için yeterli olan 1 bayt (8 bit) bir şablon tamponu kullanır. Derinlik arabellekleri genellikle 3 bayt (24 bit) kullanılarak uygulanır; bu da çoğu 3B oluşturma türü için normalde yeterlidir. Bu nedenle, şablon tamponunun 8 bitini derinlik tamponunun diğer 24'ü ile doldurmak mantıklıdır, böylece her derinlik + şablon pikselinin 32 bit bir tamsayıya kaydedilmesi mümkün olur. Wikipedia’nın kastettiği:

Derinlik tamponu ve şablon tamponu genellikle grafik donanımın RAM'inde aynı alanı paylaşır.


Şablon tamponunun kral olduğu bir uygulama, gölge oluşturma için, gölge hacimleri adı verilen bir teknikte veya bazen de uygun şekilde şablon gölgeleri olarak adlandırılan bir teknikti . Bu tamponun çok zekice bir kullanımıydı, ancak günümüzde görüntü oluşturma alanının çoğu derinlik tabanlı gölge haritalarına yöneldi.


Bu bir karakter, ancak cleaver-> clever. Düzenleyemiyorum D: Bu arada harika cevap, bu şimdiye kadarki en mantıklı olanı.
Qix

3
Pahalı bir piksel gölgelendiriciniz varsa, şablon tamponu da benzer dişleri gruplamak için kullanılabilir, bu farklılığı azaltır ve bu OIT makalesinde olduğu gibi doluluk oranını arttırır , bölüm 2.6 (feragatname: Ben bir yazarım).
jozxyqk 10:15

@jozxyqk, bu kutunun dışında bazılarını düşünen! Çok hoş.
glampert

13

Şablon tamponu, bir şablon şablon testinin ardından çeşitli işlemlerin ( örneğin OpenGL Ops ) kullanımına dayanarak istediğiniz zaman piksel başına bilgi doldurabileceğiniz, genellikle bugünlerde 8-bit olan işaretsiz bir tamsayı tamponudur .

Şablon testi, mevcut piksel şablon değerinin şablon tamponunun içeriğine karşı test edildiği bir piksel başına bir işlemdir. Şablon testinin geçeceği koşulu siz belirlersiniz (örneğin HER ZAMAN, DAHA AZ vs.).

Testin sonucuna bağlı olarak şablon değerine ne olacağına karar verebilirsiniz (OpenGL'de sizi yukarıda bağladığım işlemi kullanarak)

Şablon tamponu, akla ilk gelenler arasında oldukça az kullanım alanı vardır:

  • Çerçevenin belirli bir bölümünü seçici olarak oluşturmak ve gerisini atmak için maske olarak kullanılabilir. Bu, örneğin, yansımalar için kullanışlıdır, fakat aynı zamanda çok daha fazlası. Birden fazla çözünürlükte görüntü oluşturma işleminde, daha yüksek çözünürlükte görüntülenmesi gereken kenarları işaretlemek için kullanılabilir. Gerçekten çok fazla maskeleme kullanımı var.
  • Örneğin çok basit bir overdraw filtresi. Şablon testini her zaman geçecek ve her zaman değeri artıracak şekilde ayarlayabilirsiniz. Şablon tamponunda son bulduğunuz değer, fazla harcamayı gösterir. [*]

Geçmişte Gölge hacmi gibi gölgeleme teknikleri için de kullanılmıştır.

Zayıf şablon tamponu genellikle oldukça hafife alınır, ancak bir grafik programcısının cephaneliğinde iyi bir silah olabilir.

[*] Doğru SRV kullanılarak işlem sonrası okunacak değer!

EDIT: Ayrıca, Shader Model 5.1'de (yani D3D11.3 ve D3D12) şablon referans değerine şu yoldan erişebildiğinizi belirtmeye değer SV_StencilRef


6

Bir şablon tamponu, piksellerin oluşturulduğu üzerinde daha fazla kontrol eklemek için kullanılan piksel başına tamsayı verisini içerir.

Bir şablon tamponu bir derinlik tamponuna benzer şekilde çalışır. Benzer şekilde, bu şablon verileri bir derinlik tamponunda depolanır. Derinlik verileri hangi pikselin kameraya en yakın olduğunu belirlerken, şablon verileri pikselleri kaydetmek veya silmek için piksel başına daha genel bir amaç olarak kullanılabilir. Maskeyi oluşturmak için, bir referans şablon değerini - bir genel değer - bir piksel işlendiğinde şablon tamponundaki değerle karşılaştırmak için bir şablon işlevi kullanın.

Kaynak: Şablon Tamponu Nedir? | Microsoft Geliştirici Ağı

Genel fikir, her piksel için bir değer ayarlamak ve sonra işlemi (ayarlayabilmenizdir GREATER, SMALLER, EQUALtrue bu değerlendirir piksel gölgeli ve gösterildiğinde, vs).

Bir uygulama, gerçek zamanlı yansımadır, yansıma dokusunu oluştururken şablon tamponu, yansımanın uygulandığı bir maske oluşturmak için kullanılır. Örneğin, sadece cam malzeme gölgeli üçgenlere yansıma uygulayın. Tüm çerçeve için keyfi iki boyutlu maskeler oluşturmak için de kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.