Compartir a través de


galería de símbolos de Two-Sided (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 de búfer de galería de símbolos. Normalmente, todos los valores incrementados y reducidos se cancelan entre sí. Sin embargo, la escena ya se ha representado con geometría normal, lo que provoca que algunos píxeles produzcan un error en la prueba del búfer z, ya que se representa 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 que abarca todo 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, lo que pone presión sobre 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 estado 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 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 sentido de las agujas del reloj).

Estado de representación Descripción
D3DRS_STENCILFAIL D3DSTENCILOP realizar si se produce un error en la prueba de galería de símbolos.
D3DRS_STENCILZFAIL D3DSTENCILOP realizar si se supera la prueba de galería de símbolos y se produce un error en z-test.
D3DRS_STENCILPASS D3DSTENCILOP 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) stencilfn (galería de símbolos & mask)) es true.

 

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

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

 

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

D3DRS_Two_Sided_StencilMODE se omite para 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 admiten esta característica omitan estos nuevos estados de representación. Todos los demás bits de límite 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 establecido, 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 de

D3DRENDERSTATETYPE