Two-Sided galería de símbolos (Direct3D 9)

Los volúmenes de sombra se usan para dibujar sombras con el búfer de galería de símbolos. La aplicación calcula los volúmenes de sombra que se convierten al ocultar la geometría, calculando los bordes de la silueta y extruyéndolas lejos de la luz en un conjunto de volúmenes 3D. Estos volúmenes se representan dos veces en el búfer de galería de símbolos.

La primera representación dibuja polígonos orientados hacia delante e incrementa los valores del búfer de galería de símbolos. La segunda representación dibuja los polígonos orientados hacia atrás del volumen de sombras y disminuye los valores del búfer de galería de símbolos. Normalmente, todos los valores incrementados y decrementados se cancelan entre sí. Sin embargo, la escena ya se ha representado con geometría normal, lo que hace que algunos píxeles produzcan un error en la prueba del búfer z cuando se represente el volumen de sombras. Los valores que quedan en el búfer de galería de símbolos corresponden a píxeles que están en la sombra. Estos contenidos restantes del búfer de galería de símbolos se usan como máscara, para mezclar alfa un cuadrante negro grande y abarcado en la escena. Con el búfer de galería de símbolos que actúa como máscara, el resultado es oscurecer píxeles que están en las sombras.

Esto significa que la geometría de sombra se dibuja dos veces por fuente de luz, por lo que presiona el rendimiento del vértice de la GPU. La característica de galería de símbolos de dos caras se ha diseñado para mitigar esta situación. En este enfoque, hay dos conjuntos de estados de galería de símbolos (denominados a continuación), uno establecido cada uno para los triángulos frontales y el otro para los triángulos orientados hacia atrás. De este modo, solo se dibuja un solo paso por volumen de sombras, por luz.

Los cambios de API están restringidos a un nuevo conjunto de estados de representación. El nuevo estado de representación D3DRS_Two_Sided_StencilMODE se puede establecer en TRUE o FALSE. Es FALSE de forma predeterminada, lo que significa el comportamiento actual (DirectX 8). Cuando esto se establece en TRUE (solo funcionará si se establece D3DSTENCILCAPS_TWOSIDED), los siguientes estados de representación solo se aplicarán a los triángulos frontales (en el sentido de las agujas del reloj).

Estado de representación Descripción
D3DRS_STENCILFAIL D3DSTENCILOP para realizar si se produce un error en la prueba de galería de símbolos.
D3DRS_STENCILZFAIL D3DSTENCILOP para realizar si se supera la prueba de galería de símbolos y se produce un error en z-test.
D3DRS_STENCILPASS D3DSTENCILOP para hacer si se superan las galerías de símbolos y las pruebas z.
D3DRS_STENCILFUNC D3DCMPFUNC fn. La prueba de galería de símbolos supera si ((ref & mask) la galería de símbolos ( & máscara de galería de símbolos)) es true.

 

Un nuevo conjunto de estados de representación se aplica a los triángulos hacia atrás (en sentido contrario a las agujas del reloj).

Estado de representación Descripción
D3DRS_CCW_STENCILFAIL D3DSTENCILOP para realizar si se produce un error en la prueba de galería de símbolos.
D3DRS_CCW_STENCILZFAIL D3DSTENCILOP para realizar si se supera la prueba de galería de símbolos y se produce un error en z-test.
D3DRS_CCW_STENCILPASS D3DSTENCILOP para hacer si se superan las galerías de símbolos y las pruebas z.
D3DRS_CCW_STENCILFUNC Función D3DCMPFUNC. La prueba de galería de símbolos supera si ((ref & mask) la galería de símbolos (máscara de galería & de símbolos)) es true.

 

Los estados de representación de la galería de símbolos restantes siempre se aplican a triángulos en sentido contrario a las agujas del reloj y a las agujas del reloj.

D3DRS_Two_Sided_StencilMODE se omite para las líneas y sprites de punto, lo que significa que el comportamiento no cambia de DirectX 8. Los estados de representación D3DRS_CCW_STENCIL* se omiten.

Un nuevo bit de límite indica si el dispositivo admite esta característica. Se espera que los controladores que no admitan esta característica omitan estos nuevos estados de representación. Todos los demás bits de mayúscula de galería de símbolos se aplican a ambos modos de almacenamiento en búfer de galería de símbolos. Dado que Two_Sided_Stencil implica la capacidad de dibujar con D3DCULLMODE_NONE conjunto, el controlador debe establecer el límite correspondiente si admite este nuevo modo de galería de símbolos. Microsoft Windows Hardware Quality Labs (WHQL) debe aplicar esto.

Nuevos estados de representación:

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

Nuevo límite:

D3DSTENCILCAPS_TWOSIDED // a flag on D3DCAPS9.StencilCaps

Técnicas de búfer de galería de símbolos

D3DRENDERSTATETYPE