Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As regras de rasterização definem como os dados de vetor são mapeados em dados de raster. Os dados de raster são ajustados em locais inteiros que são então cortados e recortados (para desenhar o número mínimo de pixels) e os atributos por pixel são interpolados (de atributos por vértice) antes de serem passados para um sombreador de pixel.
Há vários tipos de regras, que dependem do tipo primitivo que está sendo mapeado, bem como se os dados usam ou não multisampling para reduzir o aliasing. As ilustrações a seguir demonstram como os casos de canto são tratados.
- regras de rasterização de triângulo (sem várias funções)
- regras de rasterização de linha (aliased, sem multisampling)
- regras de rasterização de linha (sem várias funções)
- regras de rasterização de ponto (sem várias funções)
-
regras de rasterização anti-alias de várias funções
- suporte a hardware
- amostragem centroide de atributos quando a suavização de várias várias
- cálculos derivados de ao multisampling
- tópicos relacionados
Regras de rasterização de triângulo (sem várias funções)
Qualquer centro de pixels que cai dentro de um triângulo é desenhado; supõe-se que um pixel esteja dentro se ele passar a regra superior esquerda. A regra superior esquerda é que um centro de pixels é definido para estar dentro de um triângulo se ele estiver na borda superior ou na borda esquerda de um triângulo.
Onde:
- Uma borda superior é uma borda que é exatamente horizontal e está acima das outras bordas.
- Uma borda esquerda é uma borda que não é exatamente horizontal e está no lado esquerdo do triângulo. Um triângulo pode ter uma ou duas bordas esquerdas.
A regra superior esquerda garante que triângulos adjacentes sejam desenhados uma vez.
Esta ilustração mostra exemplos de pixels que são desenhados porque estão dentro de um triângulo ou seguem a regra superior esquerda.
A cobertura cinza claro e escuro dos pixels mostra-os como grupos dos pixels para indicar em qual triângulo eles estão dentro.
Regras de rasterização de linha (aliased, sem multisampling)
As regras de rasterização de linha usam uma área de teste de diamante para determinar se uma linha cobre um pixel. Para linhas x principais (linhas com -1 <= <de inclinação = +1), a área de teste de diamante inclui (mostrado sólido) a borda inferior esquerda, a borda inferior direita e o canto inferior; o diamante exclui (mostrado pontilhado) a borda superior esquerda, a borda superior direita, o cabo superior, o canto esquerdo e o canto direito. Uma linha y principal é qualquer linha que não seja uma linha x principal; a área de diamante de teste é a mesma descrita para a linha x principal, exceto que o canto direito também está incluído.
Dada a área de diamante, uma linha cobre um pixel se a linha sair da área de teste de diamante do pixel ao viajar ao longo da linha desde o início até o final. Uma faixa de linhas se comporta da mesma forma, pois é desenhada como uma sequência de linhas.
A ilustração a seguir mostra alguns exemplos.
Regras de rasterização de linha (sem várias funções)
Uma linha análida é rasterizada como se fosse um retângulo (com largura = 1). O retângulo se cruza com um destino de renderização que produz valores de cobertura por pixel, que são multiplicados em componentes alfa de saída do sombreador de pixel. Não há nenhuma suavização pré-formada ao desenhar linhas em um destino de renderização multisampado.
Considera-se que não há uma única maneira "melhor" de executar a renderização de linhas anárias. O Direct3D 10 adota como diretriz o método mostrado na ilustração a seguir. Esse método foi derivado empiricamente, exibindo várias propriedades visuais consideradas desejáveis. O hardware não precisa corresponder exatamente a esse algoritmo; Os testes em relação a essa referência devem ter tolerâncias "razoáveis", orientadas por alguns dos princípios listados mais abaixo, permitindo várias implementações de hardware e tamanhos de kernel de filtro. Nenhuma dessas flexibilidades permitidas na implementação de hardware, no entanto, pode ser comunicada por meio do Direct3D 10 para aplicativos, além de simplesmente desenhar linhas e observar/medir a aparência delas.
Esse algoritmo gera linhas relativamente suaves, com intensidade uniforme, com bordas irregulares mínimas ou tranças. A padronização do Moire para linhas próximas é minimizada. Há uma boa cobertura para junções entre segmentos de linha colocados de ponta a ponta. O kernel de filtro é uma compensação razoável entre a quantidade de desfoque de borda e as alterações de intensidade causadas por correções gama. O valor de cobertura é multiplicado em sombreador de pixel o0.a (srcAlpha) de acordo com a seguinte fórmula pela fase de fusão de saída: srcColor * srcAlpha + destColor * (1-srcAlpha).
Regras de rasterização de ponto (sem várias funções)
Um ponto é interpretado como se fosse composto por dois triângulos em um padrão Z, que usam regras de rasterização de triângulo. A coordenada identifica o centro de um quadrado de um pixel de largura. Não há abate para pontos.
A ilustração a seguir mostra alguns exemplos.
de rasterização de ponto
Regras de rasterização anti-aliasing de várias várias imagens
A MSAA (suavização multisampla) reduz o aliasing de geometria usando a cobertura de pixels e testes de estêncil de profundidade em vários locais de sub-amostra. Para melhorar o desempenho, os cálculos por pixel são executados uma vez para cada pixel coberto, compartilhando saídas de sombreador entre sub pixels cobertos. A suavização de várias várias funções não reduz o aliasing de superfície. Locais de exemplo e funções de reconstrução dependem da implementação de hardware.
A ilustração a seguir mostra alguns exemplos.
de rasterização de várias antiplasias
O número de locais de exemplo depende do modo de várias amostras. Os atributos de vértice são interpolados em centros de pixel, pois é aqui que o sombreador de pixel é invocado (isso se torna extrapolação se o centro não estiver coberto). Os atributos podem ser sinalizados no sombreador de pixel para serem amostrados de centroide, o que faz com que pixels não cobertos interpolem o atributo na interseção da área do pixel e do primitivo. Um sombreador de pixel é executado para cada área de 2x2 pixels para dar suporte a cálculos derivados (que usam deltas x e y). Isso significa que as invocações de sombreador ocorrem mais do que é mostrado para preencher o mínimo de 2x2 quanta (que é independente de multisampling). O resultado do sombreador é gravado para cada amostra coberta que passa no teste de estêncil de profundidade por amostra.
As regras de rasterização para primitivos são, em geral, inalteradas pela suavização de várias funções, exceto:
Para um triângulo, um teste de cobertura é executado para cada local de exemplo (não para um centro de pixels). Se mais de um local de exemplo for coberto, um sombreador de pixel será executado uma vez com atributos interpolados no centro de pixels. O resultado é armazenado (replicado) para cada local de exemplo coberto no pixel que passa no teste de profundidade/estêncil.
Uma linha é tratada como um retângulo composto por dois triângulos, com uma largura de linha de 1,4.
Para um ponto, um teste de cobertura é executado para cada local de exemplo (não para um centro de pixels).
Muitos formatos dão suporte a multisampling (consulte Suporte de hardware para formatos Direct3D 10), alguns formatos podem ser resolvidos (ResolveSubresource; que reduz um formato multisampado para um tamanho de exemplo de 1). Formatos de multisampling podem ser usados em destinos de renderização que podem ser lidos novamente em sombreadores usando de carga, já que nenhuma resolução é necessária para amostras individuais acessadas pelo sombreador. Não há suporte para formatos de profundidade para recursos de várias plataformas, portanto, os formatos de profundidade são restritos somente a destinos de renderização.
Formatos sem tipo (R8G8B8A8_TYPELESS por exemplo) dão suporte a multisampling para permitir que uma exibição de recurso interprete dados de maneiras diferentes. Por exemplo, você pode criar um recurso de várias instâncias usando R8G8B8A8_TYPELESS, renderizá-lo usando um recurso de exibição de destino de renderização com um formato R8G8B8A8_UINT e, em seguida, resolver o conteúdo para outro recurso com um formato de dados R8G8B8A8_UNORM.
Suporte a hardware
A API relata suporte de hardware para multisampação por meio do número de níveis de qualidade. Por exemplo, um nível de qualidade 0 significa que o hardware não dá suporte a multisampling (em um formato específico e nível de qualidade). Um 3 para níveis de qualidade significa que o hardware dá suporte a três layouts de exemplo diferentes e/ou a algoritmos de resolução. Você também pode assumir o seguinte:
- Qualquer formato que dê suporte a multisampling dá suporte ao mesmo número de níveis de qualidade para cada formato dessa família.
- Cada formato que dá suporte a multisampling e tem os formatos _UNORM, _SRGB, _SNORM ou _FLOAT, também dá suporte à resolução.
Amostragem centroide de atributos durante a suavização de várias várias funções
Por padrão, os atributos de vértice são interpolados para um centro de pixels durante a suavização de várias vértices; se o centro de pixels não estiver coberto, os atributos serão extrapolados para um centro de pixels. Se uma entrada de sombreador de pixel que contém a semântica centroide (supondo que o pixel não esteja totalmente coberto) será amostrada em algum lugar dentro da área coberta do pixel, possivelmente em um dos locais de exemplo cobertos. Uma máscara de exemplo (especificada pelo estado do rasterizador) é aplicada antes da computação centroide. Portanto, uma amostra mascarada não será usada como um local centralizado.
O rasterizador de referência escolhe um local de exemplo para amostragem de centroides semelhante a esta:
- A máscara de exemplo permite todos os exemplos. Use um pixel center se o pixel estiver coberto ou se nenhum dos exemplos estiver coberto. Caso contrário, a primeira amostra coberta será escolhida, começando do centro de pixels e movendo-se para fora.
- A máscara de exemplo desativa todos os exemplos, exceto um (um cenário comum). Um aplicativo pode implementar a superampação de váriospasss percorrendo valores de máscara de exemplo de bit único e renderizando novamente a cena para cada exemplo usando amostragem centralizada. Isso exigiria que um aplicativo ajustasse derivados para selecionar mips de textura adequadamente mais detalhados para a densidade de amostragem de textura mais alta.
Cálculos derivados quando multisampling
Os sombreadores de pixel sempre são executados usando uma área mínima de 2x2 pixels para dar suporte a cálculos derivados, que são calculados usando deltas entre dados de pixels adjacentes (pressupõe que os dados em cada pixel foram amostrados com espaçamento de unidade horizontal ou verticalmente). Isso não é afetado pela multisampação.
Se derivativos forem solicitados em um atributo que foi amostrado de centroide, o cálculo de hardware não será ajustado, o que pode causar derivativos imprecisos. Um sombreador espera um vetor de unidade no espaço de destino de renderização, mas pode obter um vetor que não seja de unidade em relação a algum outro espaço de vetor. Portanto, é responsabilidade de um aplicativo exibir cuidado ao solicitar derivados de atributos que são amostrados de centroide. Na verdade, é recomendável que você não combine derivados e amostragem de centroides. A amostragem centroide pode ser útil para situações em que é fundamental que os atributos interpolados de um primitivo não sejam extrapolados, mas isso vem com compensações como atributos que parecem saltar onde uma borda primitiva cruza um pixel (em vez de mudar continuamente) ou derivados que não podem ser usados por operações de amostragem de textura que derivam LOD.
Tópicos relacionados