Stencil a due lati (Direct3D 9)
I volumi shadow vengono usati per disegnare ombreggiature con il buffer degli stencil. L'applicazione calcola i volumi di ombreggiatura castati dalla geometria occlusione, calcolando i bordi della silhouette ed estrusendoli dalla luce in un set di volumi 3D. Il rendering di questi volumi viene quindi eseguito due volte nel buffer degli stencil.
Il primo rendering disegna poligoni con connessione in avanti e incrementa i valori del buffer stencil. Il secondo rendering disegna i poligoni rovesciati del volume dell'ombreggiatura e decrementa i valori del buffer degli stencil. In genere, tutti i valori incrementati e decrementati si annullano l'uno dall'altro. Tuttavia, il rendering della scena è già stato eseguito con una geometria normale, causando l'esito negativo del test z-buffer quando viene eseguito il rendering del volume shadow. I valori lasciati nel buffer degli stencil corrispondono ai pixel presenti nell'ombreggiatura. Questi rimanenti contenuti del buffer degli stencil vengono usati come maschera, per combinare alfa un grande quad nero incorporato nella scena. Con il buffer degli stencil che funge da maschera, il risultato consiste nell'oscurare i pixel presenti nelle ombre.
Ciò significa che la geometria dell'ombreggiatura viene disegnata due volte per sorgente di luce, quindi l'utilizzo della velocità effettiva dei vertici della GPU. La funzionalità stencil a due lati è stata progettata per attenuare questa situazione. In questo approccio sono disponibili due set di stato stencil (denominati di seguito), uno impostato ciascuno per i triangoli frontali e l'altro per i triangoli posteriore. In questo modo, viene disegnato solo un singolo passaggio per volume di ombreggiatura, per luce.
Le modifiche all'API sono limitate a un nuovo set di stati di rendering. Il nuovo stato di rendering D3DRS_Two_Sided_StencilMODE può essere impostato su TRUE o FAL edizione Standard. È FAL edizione Standard per impostazione predefinita, ovvero comportamento corrente (DirectX 8). Quando questa proprietà è impostata su TRUE (funzionerà solo se è impostata D3DSTENCILCpiattaforma di strumenti analitici_TWOSIDED), gli stati di rendering seguenti verranno applicati solo ai triangoli frontali (in senso orario).
Stato di rendering | Descrizione |
---|---|
D3DRS_STENCILFAIL | D3DSTENCILOP eseguire se il test dello stencil non riesce. |
D3DRS_STENCILZFAIL | D3DSTENCILOP eseguire se il test dello stencil supera e z-test ha esito negativo. |
D3DRS_STENCILPASS | D3DSTENCILOP fare se entrambi gli stencil e z-test superano. |
D3DRS_STENCILFUNC | D3DCMPFUNC fn. Stencil Test supera se ((ref & mask) stencilfn (stencil & mask)) è true. |
Un nuovo set di stati di rendering si applica ai triangoli antiorario (antiorario).
Stato di rendering | Descrizione |
---|---|
D3DRS_CCW_STENCILFAIL | D3DSTENCILOP eseguire se il test dello stencil non riesce. |
D3DRS_CCW_STENCILZFAIL | D3DSTENCILOP eseguire se il test dello stencil supera e z-test ha esito negativo. |
D3DRS_CCW_STENCILPASS | D3DSTENCILOP fare se entrambi gli stencil e z-test superano. |
D3DRS_CCW_STENCILFUNC | D3DCMPFUNC funzione. Il test dello stencil supera se ((ref & mask) stencilfn (stencil & mask)) è true. |
Gli stati di rendering degli stencil rimanenti si applicano sempre ai triangoli in senso orario e antiorario.
D3DRS_Two_Sided_StencilMODE viene ignorato per le linee e gli sprite dei punti, il che significa che il comportamento è invariato rispetto a DirectX 8. Gli stati di rendering D3DRS_CCW_STENCIL* vengono ignorati.
Un nuovo bit limite indica se il dispositivo supporta questa funzionalità. I driver che non supportano questa funzionalità devono ignorare questi nuovi stati di rendering. Tutti gli altri bit dell'estremità degli stencil si applicano a entrambe le modalità di buffering degli stencil. Poiché Two_Sided_Stencil implica la possibilità di disegnare con D3DCULLMODE_NONE impostato, il limite corrispondente deve essere impostato dal driver se supporta questa nuova modalità stencil. Microsoft Windows Hardware Quality Labs (WHQL) deve applicare questa impostazione.
Nuovi stati di rendering:
D3DRS_Two_Sided_StencilMODE // BOOL (default is FALSE)
D3DRS_CCW_STENCILFAIL // Same default as D3DRS_STENCILFAIL
D3DRS_CCW_STENCILZFAIL // Same default as D3DRS_STENCILZFAIL
D3DRS_CCW_STENCILPASS // Same default as D3DRS_STENCILPASS
D3DRS_CCW_STENCILFUNC // Same default as D3DRS_STENCILFUNC
Nuovo limite:
D3DSTENCILCAPS_TWOSIDED // a flag on D3DCAPS9.StencilCaps
Argomenti correlati