Rasterização Conservadora do Direct3D 11.3

A rasterização conservadora adiciona alguma certeza à renderização de pixels, o que é útil em particular para algoritmos de detecção de colisão.

Visão geral

A rasterização conservadora significa que todos os pixels que são pelo menos parcialmente cobertos por um primitivo renderizado são rasterizados, o que significa que o sombreador de pixel é invocado. O comportamento normal é a amostragem, que não é usada se a rasterização conservadora estiver habilitada.

A rasterização conservadora é útil em várias situações, incluindo a certeza na detecção de colisão, no abate de oclusão e na detecção de visibilidade.

Por exemplo, a figura a seguir mostra um triângulo verde renderizado usando rasterização conservadora. A área marrom é conhecida como uma "região de incerteza" - uma região onde erros de arredondamento e outras questões adicionam alguma incerteza às dimensões exatas do triângulo. Os triângulos vermelhos em cada vértice mostram como a região de incerteza é calculada. Os grandes quadrados cinza mostram os pixels que serão renderizados. Os quadrados cor-de-rosa mostram pixels renderizados usando a "regra superior esquerda", que entra em jogo quando a borda do triângulo cruza a borda dos pixels. Pode haver falsos positivos (conjunto de pixels que não deveriam ter sido) que o sistema normalmente, mas nem sempre abaterá.

shows the top left rule

Interações com o pipeline

Para obter muitos detalhes sobre como a rasterização conservadora interage com o pipeline gráfico, consulte a rasterização conservadora D3D12.

Detalhes de implementação

O tipo de rasterização com suporte no Direct3D 12 às vezes é chamado de "rasterização conservadora superestimada". Há também o conceito de "rasterização conservadora subestimada", o que significa que apenas pixels totalmente cobertos por um primitivo renderizado são rasterizados. Informações de rasterização conservadoras subestimadas estão disponíveis por meio do sombreador de pixels por meio do uso de dados de cobertura de entrada e apenas a rasterização conservadora superestimada está disponível como um modo de rasterização.

Se qualquer parte de um primitivo se sobrepor a um pixel, esse pixel será considerado coberto e, em seguida, será rasterizado. Quando uma borda ou canto de um primitivo cai ao longo da borda ou canto de um pixel, a aplicação da "regra superior esquerda" é específica da implementação. No entanto, para implementações que dão suporte a triângulos degenerados, um triângulo degenerado ao longo de uma borda ou canto deve cobrir pelo menos um pixel.

Implementações de rasterização conservadoras podem variar em hardware diferente e produzir falsos positivos, o que significa que elas podem decidir incorretamente que os pixels são cobertos. Isso pode ocorrer devido a detalhes específicos da implementação, como erros primitivos de crescimento ou captura inerentes às coordenadas de vértice de ponto fixo usadas na rasterização. A razão pela qual falsos positivos (em relação às coordenadas de vértice de ponto fixo) são válidos é porque alguma quantidade de falsos positivos são necessários para permitir que uma implementação faça a avaliação de cobertura em vértices pós-snapped (ou seja, coordenadas de vértice que foram convertidas do ponto flutuante para o ponto fixo 16,8 usado no rasterizador), mas honrem a cobertura produzida pelas coordenadas de vértice de ponto flutuante originais.

Implementações de rasterização conservadoras não produzem falsos negativos em relação às coordenadas de vértice de ponto flutuante para primitivos pós-snap não degenerados: se qualquer parte de um primitivo se sobrepor a qualquer parte de um pixel, esse pixel será rasterizado.

Triângulos degenerados (índices duplicados em um buffer de índice ou collinear em 3D) ou degenerados após a conversão de ponto fixo (vértices collineares no rasterizador), podem ou não ser abatidos; ambos são comportamentos válidos. Triângulos degenerados devem ser considerados voltados para trás, portanto, se um comportamento específico for exigido por um aplicativo, ele poderá usar o abate de face invertida ou o teste para frente. Triângulos degenerados usam os valores atribuídos ao Vértice 0 para todos os valores interpolados.

Há três camadas de suporte de hardware, além da possibilidade de que o hardware não dê suporte a esse recurso.

  • A camada 1 dá suporte a regiões de incerteza de 1/2 pixel e nenhum degenerado pós-snap. Isso é bom para renderização em blocos, um atlas de textura, geração de mapa de luz e mapas de sombra de sub pixel.
  • A camada 2 adiciona degenerados pós-snap e regiões de incerteza de 1/256. Ele também adiciona suporte para aceleração de algoritmo baseada em CPU (como voxelização).
  • A camada 3 adiciona regiões de incerteza de 1/512, cobertura de entrada interna e dá suporte ao abate de oclusão. A cobertura de entrada adiciona o novo valor SV_InnerCoverage à HLSL (Linguagem de Sombreamento de Alto Nível). Esse é um inteiro escalar de 32 bits que pode ser especificado na entrada de um sombreador de pixels e representa as informações de rasterização conservadora subestimadas (ou seja, se um pixel é garantido para ser totalmente coberto).

Resumo da API

Os seguintes métodos, estruturas, enumerações e classes auxiliares fazem referência à rasterização conservadora: