Rasterización conservadora de Direct3D 11.3
La rasterización conservadora agrega cierta certeza a la representación de píxeles, lo que resulta útil en particular para los algoritmos de detección de colisiones.
- información general
- interacciones con el de canalización
- detalles de implementación
- resumen de la API de
- temas relacionados
Visión general
La rasterización conservadora significa que todos los píxeles que están al menos cubiertos parcialmente por un primitivo representado se rasterizan, lo que significa que se invoca el sombreador de píxeles. El comportamiento normal es el muestreo, que no se usa si está habilitada la rasterización conservadora.
La rasterización conservadora es útil en varias situaciones, incluida la certeza en la detección de colisiones, la selección de oclusión y la detección de visibilidad.
Por ejemplo, en la ilustración siguiente se muestra un triángulo verde representado mediante la rasterización conservadora. El área marrón se conoce como una "región de incertidumbre": una región en la que los errores de redondeo y otros problemas agregan cierta incertidumbre a las dimensiones exactas del triángulo. Los triángulos rojos de cada vértice muestran cómo se calcula la región de incertidumbre. Los cuadrados grises grandes muestran los píxeles que se representarán. Los cuadrados rosas muestran píxeles representados mediante la "regla superior izquierda", que entra en juego mientras el borde del triángulo cruza el borde de los píxeles. Puede haber falsos positivos (píxeles establecidos que no deberían haber sido) que el sistema normalmente pero no siempre seleccionará.
Interacciones con la canalización
Para obtener muchos detalles sobre cómo interactúa la rasterización conservadora con la canalización de gráficos, consulte rasterización conservadora D3D12.
Detalles de implementación
El tipo de rasterización admitido en Direct3D 12 se conoce a veces como "rasterización conservadora sobrestimada". También existe el concepto de "rasterización conservadora infravalorada", lo que significa que solo los píxeles que están totalmente cubiertos por un primitivo representado se rasterizan. La información de rasterización conservadora infravalorada está disponible a través del sombreador de píxeles mediante el uso de datos de cobertura de entrada, y solo hay disponible una rasterización conservadora excesiva como modo de rasterización.
Si alguna parte de un primitivo se superpone a un píxel, ese píxel se considera cubierto y, a continuación, se rasteriza. Cuando un borde o esquina de un primitivo cae a lo largo del borde o la esquina de un píxel, la aplicación de la "regla superior izquierda" es específica de la implementación. Sin embargo, para las implementaciones que admiten triángulos degenerados, un triángulo degenerado a lo largo de un borde o esquina debe cubrir al menos un píxel.
Las implementaciones de rasterización conservadoras pueden variar en hardware diferente y producen falsos positivos, lo que significa que pueden decidir incorrectamente que los píxeles están cubiertos. Esto puede ocurrir debido a detalles específicos de la implementación, como los errores primitivos de crecimiento o ajuste inherentes a las coordenadas de vértices de punto fijo que se usan en la rasterización. La razón por la que los falsos positivos (con respecto a las coordenadas de vértices de punto fijo) son válidos es porque se necesita cierta cantidad de falsos positivos para permitir que una implementación realice una evaluación de cobertura con vértices posteriores (es decir, coordenadas de vértices que se han convertido de punto flotante al punto fijo 16,8 usado en el rasterizador), pero respeta la cobertura producida por las coordenadas de vértices de punto flotante originales.
Las implementaciones de rasterización conservadoras no producen falsos negativos con respecto a las coordenadas de vértice de punto flotante para primitivos posteriores a la rásterización no degenerados: si alguna parte de un primitivo se superpone a cualquier parte de un píxel, ese píxel se rasteriza.
Triángulos que se degeneran (índices duplicados en un búfer de índice o collinear en 3D) o se degeneran después de la conversión de punto fijo (vértices collineares en el rasterizador), pueden o no eliminarse; ambos son comportamientos válidos. Los triángulos degenerados deben considerarse orientados hacia atrás, por lo que si una aplicación requiere un comportamiento específico, puede usar la selección de caras traseras o la prueba para la cara frontal. Los triángulos degenerados usan los valores asignados al vértice 0 para todos los valores interpolados.
Hay tres niveles de compatibilidad con hardware, además de la posibilidad de que el hardware no admita esta característica.
- El nivel 1 admite regiones de incertidumbre de 1/2 píxeles y no se degenera ningún ajuste posterior. Esto es bueno para la representación en mosaicos, un atlas de textura, una generación de mapas de luz y mapas de sombras de sub píxeles.
- El nivel 2 agrega degenerados posteriores al ajuste y 1/256 regiones de incertidumbre. También agrega compatibilidad con la aceleración del algoritmo basado en CPU (como la voxelización).
- El nivel 3 agrega 1/512 regiones de incertidumbre, cobertura de entrada interna y admite la selección de oclusión. La cobertura de entrada agrega el nuevo valor
SV_InnerCoverage
al lenguaje de sombreado de alto nivel (HLSL). Se trata de un entero escalar de 32 bits que se puede especificar en la entrada a un sombreador de píxeles y representa la información de rasterización conservadora infravalorada (es decir, si se garantiza un píxel,to-betotalmente cubierto).
Resumen de LA API
Los métodos, estructuras, enumeraciones y clases auxiliares siguientes hacen referencia a la rasterización conservadora:
- D3D11_RASTERIZER_DESC2 : estructura que contiene la descripción del rasterizador, teniendo en cuenta la clase auxiliar CD3D12_RASTERIZER_DESC2 para crear descripciones de rasterizador.
- D3D11_CONSERVATIVE_RASTERIZATION_MODE : valores de enumeración para el modo (activado o desactivado).
- D3D11_FEATURE_DATA_D3D11_OPTIONS2 : estructura que contiene el nivel de soporte técnico.
- D3D11_CONSERVATIVE_RASTERIZATION_TIER : valores de enumeración para cada nivel de soporte técnico del hardware.
- ID3D11Device::CheckFeatureSupport : método para acceder a las características admitidas.