Qual è lo scopo del buffer dello stencil? Più precisamente, cos'è uno stencil nella computer grafica?


41

Ho letto molto la parola stencil e non ho idea di quale sia il suo vero scopo nella computer grafica.

Vedendo l'immagine in bianco e nero su Wikipedia, ho ancora problemi con esso.

Perché utilizziamo uno stencil o un buffer di stencil e qual è la differenza con un buffer Z? Perché usare questa parola che sembra avere un significato nella progettazione grafica?


Ottima domanda, tutto quello che so è che è usato per il rendering delle ombre ... Ma sarò interessato a sentirne una spiegazione completa!
Ricket,

Risposte:


40

Nella sua incarnazione originale, un buffer di stencil era un framebuffer a un bit per pixel (cioè bianco o nero, ma senza grigi). Potresti renderizzarlo come volevi come qualsiasi altro framebuffer. Quindi, in seguito, è possibile utilizzare il contenuto di quel buffer per "stencil" o mascherare quando si disegna sul buffer normale.

Un esempio: supponiamo che tu stia creando un gioco di guida. Vuoi avere un piccolo specchietto retrovisore sullo schermo che ti mostra cosa c'è dietro la macchina. Dovrai eseguire il rendering di una vista che punta dietro la macchina, ma desideri renderla solo all'interno del piccolo rettangolo arrotondato dello specchietto retrovisore. La soluzione tipica è:

  1. Rendering della forma rettangolare arrotondata al buffer dello stencil.
  2. Abilita stencil.
  3. Rendering della vista di puntamento all'indietro sul buffer normale.

Lo stencil lo maschera quindi in modo da disegnare solo nella forma dello specchio.

Ora che le pipeline di rendering sono molto più flessibili e programmabili, i buffer di stencil vengono utilizzati solo come framebuffer generico a 1 bit con il quale è possibile fare ciò che si desidera. Le ombre sono un caso d'uso comune.


10
In altre parole, ha sostanzialmente la stessa funzione di uno stencil reale, mascherando le parti quando si applica l'inchiostro.
Kaj,

4
Al giorno d'oggi quasi tutti i dispositivi supportano un buffer di stencil a 8 bit.
Chris Howe,

Non ho davvero il tuo esempio, è come se ci fosse un secondo errore? rasterizza un'altra parte della scena? Puoi fare un esempio con le ombre?
jokoon

È solo un secondo frame buffer. Potresti sempre cambiare il frustum prima di renderlo (che è quello che penso facciano i sistemi ombra), ma questo non fa parte del concetto centrale.
munifico

9

Oltre all'utilizzo funzionale dei buffer di stencil di cui le persone hanno già discusso, i buffer di stencil possono essere utilizzati anche per l'ottimizzazione.

A causa della posizione del test dello stencil nella pipeline grafica (che è prima dell'ombreggiatura dei pixel), è possibile utilizzare il test dello stencil per uccidere i pixel che svolgono lavori di ombreggiatura pesante quando non sono necessari. Spesso questo può essere fatto con una granularità più grossolana di un singolo pixel, ad es. una porzione di pixel, quindi il lavoro può essere spesso abbattuto anche durante le fasi di rasterizzazione grossolana.


4

È solo un buffer che controlla quali pixel possono essere modificati durante il rendering dei poligoni. Per ogni pixel, esiste un valore di stencil corrispondente e i pixel possono essere modificati / ignorati in base a questi valori

Nella sua forma più semplice, può essere utilizzato come uno stencil fisico, una maschera che consente il passaggio di alcuni pixel e impedisce la modifica di altri pixel.

È molto simile nel comportamento a un buffer z - come il test di profondità, il test dello stencil è un test vero / falso e ci sono impostazioni simili per controllare il test dello stencil (passa se maggiore / minore / uguale). Ma invece di scriverne una profondità, di solito avrà valori predefiniti scritti su di essa, o sarà incrementato / decrementato quando i pixel sono disegnati, come usato negli algoritmi di ombra stencil.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.