fase de Output-Merger
La fase de fusión de salida (OM) genera el color de píxel representado final mediante una combinación de estado de canalización, los datos de píxeles generados por los sombreadores de píxeles, el contenido de los destinos de representación y el contenido de los búferes de profundidad o galería de símbolos. La fase om es el paso final para determinar qué píxeles son visibles (con pruebas de galería de símbolos de profundidad) y combinar los colores de píxeles finales.
Diferencias entre Direct3D 9 y Direct3D 10:
- Direct3D 9 implementa pruebas alfa (mediante el estado de prueba alfa) para controlar si un píxel se escribe en un destino de representación de salida.
- Direct3D 10 y versiones posteriores no implementan una prueba alfa (o estado de prueba alfa). Esto se puede controlar mediante un sombreador de píxeles o con funcionalidad de profundidad/galería de símbolos.
Introducción a las pruebas de Depth-Stencil
Un búfer de galería de símbolos de profundidad, que se crea como un recurso de textura, puede contener datos de profundidad y datos de galería de símbolos. Los datos de profundidad se usan para determinar qué píxeles se encuentran más cerca de la cámara y los datos de la galería de símbolos se usan para enmascarar qué píxeles se pueden actualizar. En última instancia, la fase de fusión de salida usa los datos de valores de profundidad y galería de símbolos para determinar si se debe dibujar o no un píxel. En el diagrama siguiente se muestra conceptualmente cómo se realizan las pruebas de galería de símbolos de profundidad.
Para configurar las pruebas de galería de símbolos de profundidad, consulte Configuración de la funcionalidad de Depth-Stencil. Un objeto de galería de símbolos de profundidad encapsula el estado de la galería de símbolos de profundidad. Una aplicación puede especificar el estado de la galería de símbolos de profundidad o la fase de OM usará valores predeterminados. Las operaciones de fusión se realizan por píxel si el muestreo múltiple está deshabilitado. Si el muestreo múltiple está habilitado, la combinación se produce en función de cada muestra múltiple.
El proceso de usar el búfer de profundidad para determinar qué píxel se debe dibujar se denomina almacenamiento en búfer de profundidad, también denominado a veces z-buffering.
Una vez que los valores de profundidad alcanzan la fase de fusión de salida (ya sea procedente de la interpolación o de un sombreador de píxeles), siempre se fijan: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) según el formato o la precisión del búfer de profundidad, mediante reglas de punto flotante. Después de la fijación, se compara el valor de profundidad (mediante DepthFunc) con el valor del búfer de profundidad existente. Si no hay ningún búfer de profundidad enlazado, la prueba de profundidad siempre se supera.
Si no hay ningún componente de galería de símbolos en el formato de búfer de profundidad o sin límite de búfer de profundidad, la prueba de galería de símbolos siempre se supera. De lo contrario, la funcionalidad no cambia de Direct3D 9.
Solo un búfer de profundidad/galería de símbolos puede estar activo a la vez; cualquier vista de recursos enlazada debe coincidir (el mismo tamaño y dimensiones) la vista de profundidad/galería de símbolos. Esto no significa que el tamaño del recurso debe coincidir, solo que el tamaño de la vista debe coincidir.
Para obtener más información sobre las pruebas de galería de símbolos de profundidad, consulte el tutorial 14.
Introducción a la combinación
La combinación combina uno o varios valores de píxeles para crear un color de píxel final. En el diagrama siguiente se muestra el proceso implicado en la combinación de datos de píxeles.
Conceptualmente, puede visualizar este gráfico de flujo implementado dos veces en la fase de fusión de salida: el primero combina datos RGB, mientras que en paralelo, otro combina datos alfa. Para ver cómo usar la API para crear y establecer el estado de combinación, consulte Configuración de la funcionalidad de fusión.
La combinación de funciones fijas se puede habilitar de forma independiente para cada destino de representación. Sin embargo, solo hay un conjunto de controles de mezcla, por lo que la misma mezcla se aplica a todos los RenderTargets con la combinación habilitada. Los valores de Blend (incluido BlendFactor) siempre se fijan en el intervalo del formato de destino de representación antes de la fusión. La fijación se realiza por destino de representación, respetando el tipo de destino de representación. La única excepción es para los formatos float16, float11 o float10 que no están fijados para que las operaciones de combinación en estos formatos se puedan realizar con al menos una precisión o intervalo iguales como el formato de salida. Los ceros y los ceros con signo de NaN se propagan para todos los casos (incluidos los pesos de mezcla de 0,0).
Cuando se usan destinos de representación de sRGB, el tiempo de ejecución convierte el color de destino de representación en un espacio lineal antes de realizar la fusión. El tiempo de ejecución convierte el valor combinado final en espacio sRGB antes de guardar el valor en el destino de representación.
Diferencias entre Direct3D 9 y Direct3D 10:
- En Direct3D 9, la combinación de funciones fijas se puede habilitar de forma independiente para cada destino de representación.
- En Direct3D 10 y versiones posteriores, hay una descripción de estado de mezcla; por lo tanto, se puede establecer un valor de combinación para todos los destinos de representación.
combinación de colores Dual-Source
Esta característica permite que la fase de fusión de salida use simultáneamente las salidas del sombreador de píxeles (o0 y o1) como entradas para una operación de fusión con el destino de representación único en la ranura 0. Entre las operaciones de combinación válidas se incluyen: agregar, restar y revsubtract. Entre las opciones de combinación válidas para SrcBlend, DestBlend, SrcBlendAlpha o DestBlendAlpha se incluyen: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. La ecuación de mezcla y la máscara de escritura de salida especifican qué componentes genera el sombreador de píxeles. Se omiten los componentes adicionales.
Escribir en otras salidas de sombreador de píxeles (o2, o3, etc.) no está definida; es posible que no escriba en un destino de representación si no está enlazado a la ranura 0. La escritura de oDepth es válida durante la combinación de color de doble fuente.
Para obtener ejemplos, vea Combinar salidas del sombreador de píxeles.
Introducción a Varios RenderTargets
Un sombreador de píxeles se puede usar para representar al menos 8 destinos de representación independientes, todos los cuales deben ser del mismo tipo (búfer, Texture1D, Texture1DArray, etc.). Además, todos los destinos de representación deben tener el mismo tamaño en todas las dimensiones (ancho, alto, profundidad, tamaño de matriz, recuentos de muestras). Cada destino de representación puede tener un formato de datos diferente.
Puede usar cualquier combinación de ranuras de destinos de representación (hasta 8). Sin embargo, una vista de recursos no se puede enlazar a varias ranuras de destino de representación simultáneamente. Se puede reutilizar una vista siempre que los recursos no se usen simultáneamente.
Introducción a la máscara de Output-Write
Use una máscara de escritura de salida para controlar (por componente) qué datos se pueden escribir en un destino de representación.
Introducción a la máscara de ejemplo
Una máscara de ejemplo es una máscara de cobertura multimuestra de 32 bits que determina qué muestras se actualizan en los destinos de representación activos. Solo se permite una máscara de ejemplo. Un usuario define la asignación de bits en una máscara de ejemplo a los ejemplos de un recurso. Para la representación de n muestras, se usan los primeros n bits (del LSB) de la máscara de muestra (32 bits es el número máximo de bits).
En esta sección
Tema | Descripción |
---|---|
Configuración de la funcionalidad de Depth-Stencil |
En esta sección se describen los pasos para configurar el búfer de galería de símbolos de profundidad y el estado de galería de símbolos de profundidad para la fase de fusión de salida. |
Configuración de la funcionalidad de fusión |
Las operaciones de fusión se realizan en cada salida del sombreador de píxeles (valor RGBA) antes de escribir el valor de salida en un destino de representación. Si se habilita el muestreo múltiple, la combinación se realiza en cada multimuestra; de lo contrario, la combinación se realiza en cada píxel. |
Sesgo de profundidad |
Los polígonos que son coplanares en el espacio 3D se pueden hacer para que aparezcan como si no fueran coplanar agregando un sesgo z (o sesgo de profundidad) a cada uno. |