Definicja bufora szablonów przez Wikipedię naprawdę nie jest świetna, zbyt mocno koncentruje się na szczegółach współczesnych implementacji (OpenGL). Uważam, że wersja jednoznaczna jest łatwiejsza do zrozumienia:
Szablon to szablon służący do rysowania lub malowania za każdym razem identycznych liter, symboli, kształtów lub wzorów. Projekt utworzony przez taki szablon jest również nazywany szablonem.
To właśnie oznaczało szablon przed grafiką komputerową. Jeśli wpiszesz szablon w Grafice Google, jest to jeden z pierwszych wyników:
Jak widać, jest to po prostu maska lub wzór, którego można użyć do „namalowania” negatywu wzoru na czymś.
Stencil buffer prac w dokładnie taki sam sposób. Można wypełnić bufor szablonu wybranym wzorem, wykonując przejście renderowania szablonu, a następnie ustawić odpowiednią funkcję szablonu, która określi sposób interpretacji wzoru na kolejnych rysunkach, a następnie wyrenderuje końcową scenę. Piksele, które wpadają w odrzucone obszary maski szablonu, zgodnie z funkcją porównania, nie są rysowane.
Jeśli chodzi o implementację bufora szablonów, czasami rzeczywiście jest on sprzężony z buforem głębokości. Większość urządzeń graficznych korzysta z 1-bajtowego (8-bitowego) bufora szablonów, co wystarcza w większości aplikacji. Bufory głębokości są zwykle implementowane przy użyciu 3 bajtów (24 bity), co znowu jest zwykle wystarczające dla większości rodzajów renderowania 3D. Logiczne jest więc spakowanie 8 bitów bufora szablonu z innymi 24 buforami głębokości, dzięki czemu możliwe jest zapisanie każdego piksela głębokości + szablonu w 32-bitowej liczbie całkowitej. To właśnie Wikipedia rozumiała przez:
Bufor głębokości i bufor wzornika często dzielą ten sam obszar w pamięci RAM sprzętu graficznego.
Jedną z aplikacji, w której bufor wzornika był królem, był rendering cienia, w technice zwanej objętościami cieni , a czasem także odpowiednio zwanymi cieniami wzornikowymi . Było to bardzo sprytne użycie bufora, ale obecnie wydaje się, że większość pola renderowania przesunęła się w kierunku map cieni opartych na głębokości.
cleaver
->clever
. Nie mogę go edytować D: Nawiasem mówiąc, świetna odpowiedź, to jak dotąd najbardziej sensowne.Bufor wzorników jest buforem liczb całkowitych bez znaku, zwykle obecnie 8-bitowym, w którym można wypełnić informacje o pikselach według własnego uznania, w zależności od użycia różnych operacji ( na przykład tutaj OpenGL Ops ) po teście wzornika.
Test matrycowy to po prostu operacja na piksel, w której bieżąca wartość matrycy pikselowej jest testowana względem zawartości bufora matrycowego. Ustawiasz warunek, w którym test szablonu jest przekazywany (np. ZAWSZE, MNIEJ itp.).
Możesz zdecydować, co stanie się z wartością szablonu w zależności od wyniku testu (w OpenGL, korzystając z operacji, którą podłączyłem powyżej)
Bufor szablonów ma kilka zastosowań, z których pierwsze przychodzą na myśl:
W przeszłości był używany również do technik cieniowania, takich jak objętość cienia.
Słaby bufor szablonu jest często niedoceniany, ale może być dobrą bronią w zbrojowni programisty.
[*] Wartość do odczytania w późniejszym procesie przy użyciu odpowiedniego SRV!
EDYCJA: Warto również wspomnieć, że w Shader Model 5.1 (czyli D3D11.3 i D3D12) masz dostęp do wartości odniesienia szablonu za pośrednictwem
SV_StencilRef
źródło
Źródło: Co to jest bufor wzornika? | Microsoft Developer Network
Ogólna idea jest taka, że można ustawić wartość dla każdego piksela, a następnie ustawić operację (
GREATER
,SMALLER
,EQUAL
etc), kiedy to wartość true piksel jest zacieniony i pokazane.Jedną z aplikacji jest odbicie w czasie rzeczywistym, podczas renderowania tekstury odbicia bufor wzornika służy do utworzenia maski, w której zastosowano odbicie. Na przykład zastosuj odbicie tylko do cieniowanych trójkątów z materiału szklanego. Można go również wykorzystać do utworzenia dowolnych dwuwymiarowych masek dla całego bufora ramki.
źródło