Compartilhar via


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

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 cinzas mostram os pixels que serão renderizados. Os quadrados rosa mostram pixels renderizados usando a "regra superior esquerda", que entra em jogo à medida que a borda do triângulo cruza a borda dos pixels. Pode haver falsos positivos (pixels definidos que não deveriam ter sido) que o sistema normalmente, mas nem sempre será descartado.

mostra a regra superior esquerda

Interações com o pipeline

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

Detalhes da 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 hardwares diferentes 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 ajuste inerentes às coordenadas de vértice de ponto fixo usadas na rasterização. A razão pela qual os falsos positivos (em relação às coordenadas de vértice de ponto fixo) são válidos é porque uma quantidade de falsos positivos é necessária para permitir que uma implementação faça a avaliação de cobertura em vértices pós-ajustados (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 conversão de ponto fixo (vértices collineares no rasterizador) podem ou não ser eliminados; 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 ou o teste de face invertida 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 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 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). Este é um inteiro escalar de 32 bits que pode ser especificado na entrada para um sombreador de pixel e representa as informações de rasterização conservadora subestimadas (ou seja, se um pixel é garantido-to-be-totalmente coberto).

Resumo da API

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