Rasterización conservador 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 la canalización
- Detalles de la implementación
- Resumen de API
- Temas relacionados
Información general
La rasterización conservadora significa que todos los píxeles que están al menos parcialmente cubiertos 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 una serie de 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 cuando 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 conservador D3D12.
Detalles de la implementación
El tipo de rasterización admitido en Direct3D 12 a veces se conoce como "rasterización conservadora sobreestimada". También existe el concepto de "rasterización conservadora subestimada", lo que significa que solo los píxeles que están completamente cubiertos por un primitivo representado se rasterizan. La información de rasterización conservador subestimada está disponible a través del sombreador de píxeles mediante el uso de datos de cobertura de entrada y solo la rasterización conservador sobrestimada está disponible 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 conservadores 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 errores primitivos de crecimiento o ajuste inherentes a las coordenadas de vértice 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 la evaluación de cobertura en vértices post-acoplados (es decir, coordenadas de vértice 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értice de punto flotante original.
Las implementaciones de rasterización conservadores 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 ser seleccionados; ambos son comportamientos válidos. Los triángulos degenerados se deben considerar hacia atrás, por lo que si una aplicación requiere un comportamiento específico, puede usar la selección de cara trasera o la prueba para la cara frontal. Los triángulos degenerados usan los valores asignados a Vértices 0 para todos los valores interpolados.
Hay tres niveles de soporte técnico de 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 mosaico, 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 de un sombreador de píxeles y representa la información de rasterización conservadora subestimada (es decir, si se garantiza que un píxel esté totalmente cubierto).
API summary
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, tomando nota de 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 compatibilidad con el hardware.
- ID3D11Device::CheckFeatureSupport : método para acceder a las características admitidas.