Regras de rasterizaçãoRasterization rules

As regras de rasterização definem como os dados de vetor são mapeados nos dados de rasterização.Rasterization rules define how vector data is mapped into raster data. Os dados de rasterização são ajustados para locais de inteiro que são, em seguida, removidos e recortados (para desenhar o número mínimo de pixels) e atributos de por pixel são interpolados (de atributos de vértice) antes de serem passados para um sombreador de pixel.The raster data is snapped to integer locations that are then culled and clipped (to draw the minimum number of pixels), and per-pixel attributes are interpolated (from per-vertex attributes) before being passed to a pixel shader.

Existem vários tipos de regras, que dependem do tipo de primitivo que está sendo mapeado, bem como se os dados usam ou não várias amostras para reduzir o serrilhado.There are several types of rules, which depend on the type of primitive that is being mapped, as well as whether or not the data uses multisampling to reduce aliasing. As ilustrações a seguir demonstram como os casos de canto são manipulados.The following illustrations demonstrate how the corner cases are handled.

Regras de rasterização de triângulo (sem multiamostragem)Triangle Rasterization Rules (Without Multisampling)

Qualquer centro de pixel que cai dentro de um triângulo é desenhado; um pixel é considerado estar dentro se passar pela regra superior esquerdo.Any pixel center which falls inside a triangle is drawn; a pixel is assumed to be inside if it passes the top-left rule. A regra superior esquerdo é quando um centro de pixel é definido como estando dentro de um triângulo se ficar na borda superior ou na borda esquerda de um triângulo.The top-left rule is that a pixel center is defined to lie inside of a triangle if it lies on the top edge or the left edge of a triangle.

onde:where:

  • Uma borda superior é uma borda exatamente horizontal e acima das outras bordas.A top edge, is an edge that is exactly horizontal and is above the other edges.
  • Uma borda esquerda é uma borda não exatamente horizontal e que está no lado esquerdo do triângulo. Um triângulo pode ter uma ou duas bordas esquerdas.A left edge, is an edge that is not exactly horizontal and is on the left side of the triangle A triangle can have one or two left edges.

A regra superior esquerdo garante que triângulos adjacentes sejam desenhados uma vez.The top-left rule ensures that adjacent triangles are drawn once.

Esta ilustração mostra exemplos de pixels desenhados por estarem dentro de um triângulo ou seguindo a regra superior esquerdo.This illustration shows examples of pixels that are drawn because they either lie inside a triangle or follow the top-left rule.

exemplos de rasterização de triângulo superior esquerdo

A cobertura cinza clara e escura dos pixels os mostra como grupos de pixels para indicar dentro de qual triângulo estão dentro.The light and dark gray covering of the pixels show them as groups of the pixels to indicate which triangle they are inside.

Regras de rasterização de linha (serrilhado, sem várias amostras)Line Rasterization Rules (Aliased, Without Multisampling)

Regras de rasterização de linha usam uma área de teste de diamante para determinar se uma linha abrange um pixel.Line rasterization rules use a diamond test area to determine if a line covers a pixel. Para linhas de x grande (linhas com -1 <= 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, borda superior direita, canto superior, canto esquerdo e canto direito.For x-major lines (lines with -1 <= slope <= +1), the diamond test area includes (shown solid) the lower-left edge, lower-right edge, and bottom corner; the diamond excludes (shown dotted) the upper-left edge, upper-right edge, the top corder, the left corner, and the right corner. Uma linha de y grande é qualquer linha que não seja uma linha de x grande; a área de diamante de teste é a mesma conforme descrito para a linha de x grande, exceto pelo canto direito também estar incluído.A y-major line is any line that is not an x-major line; the test diamond area is the same as described for the x-major line except the right corner is also included.

Dada a área de diamante, uma linha abrange um pixel se a linha sai da área de teste de diamante do pixel ao passar pela linha desde o início até o final.Given the diamond area, a line covers a pixel if the line exits the pixel's diamond test area when traveling along the line from the start towards the end. Uma faixa de linha se comporta da mesma forma, pois é desenhada como uma sequência de linhas.A line strip behaves the same, as it is drawn as a sequence of lines.

A ilustração a seguir mostra alguns exemplos.The following illustration shows some examples.

exemplos de rasterização de linha serrilhada

Regras de rasterização de linha (com suavização, sem várias amostras)Line Rasterization Rules (Antialiased, Without Multisampling)

Uma linha suavizada é rasterizada como se fosse um retângulo (com largura = 1).An antialiased line is rasterized as if it were a rectangle (with width = 1). O retângulo cruza com um destino de renderização produzindo valores de cobertura por pixel, que são multiplicados em componentes alfa de saída de sombreador de pixel.The rectangle intersects with a render target producing per-pixel coverage values, which are multiplied into pixel shader output alpha components. Não há nenhuma suavização executada ao desenhar linhas em um destino de renderização com várias amostras.There is no antialiasing preformed when drawing lines on a multisampled render target.

Será considerado que não há uma "melhor" e única maneira para realizar uma renderização de linha com suavização.It is deemed that there is no single "best" way to perform antialiased line rendering. Direct3D adota como diretriz o método mostrado na ilustração a seguir.Direct3D adopts as a guideline the method shown in the following illustration. Esse método foi derivado empiricamente, apresentando um número de propriedades visuais considerado desejável.This method was derived empirically, exhibiting a number of visual properties deemed desirable.

O hardware não precisa corresponder exatamente a esse algoritmo; testes em relação a essa referência deverão 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 do filtro.Hardware need not exactly match this algorithm; tests against this reference shall have "reasonable" tolerances, guided by some of the principles listed further below, permitting various hardware implementations and filter kernel sizes. Essa flexibilidade permitida na implementação de hardware, no entanto, não pode ser comunicada pelo Direct3D para apps, além de simplesmente desenhar linhas e observar/medir sua aparência.None of this flexibility permitted in hardware implementation, however, can be communicated up through Direct3D to applications, beyond simply drawing lines and observing/measuring how they look.

exemplos de rasterização de linha suavizada

Esse algoritmo gera linhas relativamente suaves, com intensidade uniforme, com mínimo de bordas com dentes ou trançados.This algorithm generates relatively smooth lines, with uniform intensity, with minimal jagged edges or braiding. O padrão moiré para linhas próximas é minimizado.Moire patterning for close lines is minimized. Há uma boa cobertura de junções entre os segmentos de linha colocados de ponta a ponta.There is good coverage for junctions between line segments placed end-to-end.

O kernel do filtro é um equilíbrio razoável entre a quantidade de desfoque de borda e as alterações na intensidade causadas por correções de gama.The filter kernel is a reasonable tradeoff between the amount of edge blurring and the changes in intensity caused by gamma corrections. O valor de cobertura é multiplicado em o0.a de sombreador de pixel (srcAlpha) pela seguinte fórmula pelo estágio de fusão de saída (OM):The coverage value is multiplied into pixel shader o0.a (srcAlpha) per the following formula by the Output Merger (OM) stage:

srcColor * srcAlpha + destColor * (1-srcAlpha)srcColor * srcAlpha + destColor * (1-srcAlpha)

Regras de rasterização de pontos (sem várias amostragens)Point Rasterization Rules (Without Multisampling)

Um ponto é interpretado como se fosse composto de dois triângulos em um padrão Z, que usa regras de rasterização de triângulo.A point is interpreted as though it were composed of two triangles in a Z pattern, which use triangle rasterization rules. A coordenada identifica o centro de um quadrado na largura de um pixel.The coordinate identifies the center of a one pixel wide square. Não há seleção para pontos.There is no culling for points.

A ilustração a seguir mostra alguns exemplos.The following illustration shows some examples.

exemplos de rasterização de pontos

Regras de rasterização de suavização de várias amostrasMultisample Anti-Aliasing Rasterization Rules

A suavização de várias amostras (MSAA) reduz o serrilhado de geometria usando testes de cobertura de pixel e estêncil de profundidade em vários locais de subamostra.Multisample antialiasing (MSAA) reduces geometry aliasing using pixel coverage and depth-stencil tests at multiple sub-sample locations. Para melhorar o desempenho, cálculos por pixel são executados uma vez para cada pixel coberto, compartilhando saídas de sombreador por subpixels cobertos.To improve performance, per-pixel calculations are performed once for each covered pixel, by sharing shader outputs across covered sub-pixels. A suavização de várias amostras não reduz o serrilhado de superfície.Multisample antialiasing does not reduce surface aliasing. Locais de amostra e funções de reconstrução dependem da implementação de hardware.Sample locations and reconstruction functions are dependent on the hardware implementation.

A ilustração a seguir mostra alguns exemplos.The following illustration shows some examples.

exemplos de rasterização de suavização de várias amostras

O número de locais de amostra depende do modo de várias amostras.The number of sample locations is dependent on the multisample mode. Atributos de vértice são interpolados em centros de pixel, pois é onde o sombreador de pixel é invocado (isso se torna extrapolação se o centro não está coberto).Vertex attributes are interpolated at pixel centers, since this is where the pixel shader is invoked (this becomes extrapolation if the center is not covered). Atributos podem ser sinalizados no sombreador de pixel para serem amostras centroides, o que faz com que pixels não cobertos interpolem o atributo na interseção entre a área do pixel e o primitivo.Attributes can be flagged in the pixel shader to be centroid sampled, which causes non-covered pixels to interpolate the attribute at intersection of the pixel's area and the primitive.

Um sombreador de pixel é executado para cada área de pixel de 2x2 dar suporte a cálculos derivados (que usam deltas de x e y).A pixel shader runs for each 2x2 pixel area to support derivative calculations (which use x and y deltas). Isso significa que as invocações de sombreador ocorrerem mais do que é mostrado para preencher o quanta de 2x2 mínimo (que é independente de várias amostras).This means that shader invocations occur more than is shown to fill out the minimum 2x2 quanta (which is independent of multisampling). O resultado do sombreador é gravado para cada amostra coberta que passa no teste de estêncil de profundidade por amostra.The shader result is written out for each covered sample that passes the per-sample depth-stencil test.

Regras de rasterização para primitivos são, em geral, inalteradas por suavização de várias amostras, exceto:Rasterization rules for primitives are, in general, unchanged by multisample antialiasing, except:

  • Para um triângulo, um teste de cobertura é realizado para cada local de amostra (não para um centro de pixel).For a triangle, a coverage test is performed for each sample location (not for a pixel center). Se mais de um local de amostra for coberto, um sombreador de pixel será executado uma vez com atributos interpolados no centro de pixel.If more than one sample location is covered, a pixel shader runs once with attributes interpolated at the pixel center. O resultado é armazenado (replicado) para cada local de amostra coberto no pixel passa no teste de profundidade/estêncil.The result is stored (replicated) for each covered sample location in the pixel that passes the depth/stencil test.

    Uma linha é tratada como um retângulo composto de dois triângulos, com uma largura de linha de 1,4.A line is treated as a rectangle made up of two triangles, with a line width of 1.4.

  • Para um ponto, um teste de cobertura é realizado para cada local de amostra (não para um centro de pixel).For a point, a coverage test is performed for each sample location (not for a pixel center).

Formatos de várias amostras podem ser usados em destinos de renderização que podem ser lidas novamente em sombreadores usando carregar, já que nenhuma resolução é necessária para amostras individuais acessadas pelo sombreador.Multisampling formats can be used in render targets which can be read back into shaders using load, since no resolve is required for individual samples accessed by the shader. Não há suporte para formatos de profundidade para recurso de várias amostras. Portanto, os formatos de profundidade são restritos a somente destinos de renderização.Depth formats are not supported for multisample resource, therefore, depth formats are restricted to render targets only.

Formatos sem tipo dão suporte a várias amostras para permitir que um modo de exibição de recurso interprete dados de diferentes maneiras.Typeless formats support multisampling to allow a resource view to interpret data in different ways. Por exemplo, você pode criar um recurso de multiamostragem usando R8G8B8A8 _ sem tipo, renderizar para ele usando um recurso render-Target-View com um _ formato R8G8B8A8 uint e, em seguida, resolver o conteúdo para outro recurso com um _ formato de dados R8G8B8A8 UNORM.For instance, you could create a multisample resource using R8G8B8A8_TYPELESS, render to it using a render-target-view resource with a R8G8B8A8_UINT format, then resolve the contents to another resource with a R8G8B8A8_UNORM data format.

Suporte a hardwareHardware Support

A API relata suporte de hardware para várias amostras por meio do número de níveis de qualidade.The API reports hardware support for multisampling through the number of quality levels. Por exemplo, um nível de qualidade 0 significa que o hardware não oferece suporte a várias amostras (em um determinado formato e nível de qualidade).For example, a 0 quality level means the hardware does not support multisampling (at a particular format and quality level). Um 3 para níveis de qualidade significa que o hardware oferecer suporte a três layouts diferentes de amostra e/ou algoritmos de resolução.A 3 for quality levels means that the hardware supports three different sample layouts and/or resolve algorithms. Também é possível presumir o seguinte:You can also assume the following:

  • Qualquer formato que dá suporte a várias amostras é compatível com o mesmo número de níveis de qualidade para cada formato nessa família.Any format that supports multisampling, supports the same number of quality levels for every format in that family.
  • Cada formato que dá suporte a multiamostrabilidade e tem os _ formatos UNORM, _ sRGB, _ SNORM ou _ float, também dá suporte à resolução.Every format that supports multisampling, and has the _UNORM, _SRGB, _SNORM or _FLOAT formats, also supports resolving.

Amostragem de atributos de centróide quando a suavização de multiamostrasCentroid Sampling of Attributes when Multisample Antialiasing

Por padrão, os atributos de vértice são interpolados para um centro de pixel durante a suavização de várias amostras; se o centro de pixel não estiver coberto, atributos serão extrapolados para um centro de pixel.By default, vertex attributes are interpolated to a pixel center during multisample antialiasing; if the pixel center is not covered, attributes are extrapolated to a pixel center. Se uma entrada de sombreador de pixel contendo a semântica de centroide (supondo que o pixel não está totalmente coberto) for amostrada em algum lugar dentro da área de cobertura do pixel, será possivelmente em um dos locais de amostra cobertos.If a pixel shader input that contains the centroid semantic (assuming the pixel is not fully covered) will be sampled somewhere within the covered area of the pixel, possibly at one of the covered sample locations. Uma máscara de amostra (especificada pelo estado de rasterizador) é aplicada antes do cálculo de centroides.A sample mask (specified by the rasterizer state) is applied prior to centroid computation. Portanto, uma amostra fora da máscara não será usada como um local de centroides.Therefore, a sample that is masked out will not be used as a centroid location.

O rasterizador de referência escolhe um local de amostra para a amostragem de centroides semelhante a este:The reference rasterizer chooses a sample location for centroid sampling similar to this:

  • A máscara de amostra permite todas as amostras.The sample mask allows all samples. Use um centro de pixel se o pixel estiver coberto ou se nenhuma das amostras estiver coberta.Use a pixel center if the pixel is covered or if none of the samples are covered. Caso contrário, a primeira amostra coberta será escolhida, começando pelo centro de pixel e movendo para fora.Otherwise, the first covered sample is chosen, starting from the pixel center and moving outward.
  • A máscara de amostra desativa todas as amostras menos uma (um cenário comum).The sample mask turns off all samples but one (a common scenario). Um app pode implementar superamostragem de passagem múltipla passando valores de máscara de amostra de bit único e renderizando novamente a cena para cada amostra usando amostragem de centroide.An application can implement multipass supersampling by cycling through single-bit sample-mask values and re-rendering the scene for each sample using centroid sampling. Isso exige que um app ajuste derivadas para selecionar adequadamente mips de textura mais detalhada para a mais alta densidade de amostragem de textura.This would require that an application adjust derivatives to select appropriately more detailed texture mips for the higher texture sampling density.

Cálculos derivados com várias amostrasDerivative Calculations When Multisampling

Os sombreadores de pixel são sempre executados usando uma área mínima de pixel de 2x2 para suporte a cálculos derivados, que são calculados utilizando deltas entre dados de pixels adjacentes (considerando que os dados em cada pixel tenham sido amostrados com espaçamento de unidade horizontal ou vertical).Pixel shaders always run using a minimum 2x2 pixel area to support derivative calculations, which are calculated by taking deltas between data from adjacent pixels (making the assumption that the data in each pixel has been sampled with unit spacing horizontally or vertically). Isso não é afetado por várias amostras.This is unaffected by multisampling.

Se derivadas forem solicitadas em um atributo com amostragem de centroides, o cálculo de hardware não será ajustado, o que pode causar derivadas imprecisas.If derivatives are requested on an attribute that has been centroid sampled, the hardware calculation is not adjusted, which can cause inaccurate derivatives. Um sombreador irá esperar um vetor de unidade no espaço de destino de renderização, mas poderá receber um vetor de não unidade em relação a algum outro espaço de vetor.A shader will expect a unit vector in render-target space but may get a non-unit vector with respect to some other vector space. Portanto, é responsabilidade do app tomar cuidado ao solicitar derivadas de atributos com amostragem de centroides.Therefore, it is an application's responsibility to exhibit caution when requesting derivatives from attributes that are centroid sampled.

Na verdade, é recomendável que você não combine derivadas e amostragem de centroides.In fact, it is recommended that you do not combine derivatives and centroid sampling. A amostragem de centroides pode ser útil para situações em que é fundamental que atributos interpolados de primitivo não sejam extrapolados, mas isso faz com que atributos pareçam saltar onde uma borda de primitivo cruza um pixel (em vez de alterar continuamente) ou derivadas que não podem ser usadas em operações de amostragem de textura que derivam LOD.Centroid sampling can be useful for situations where it is critical that a primitive's interpolated attributes are not extrapolated, but this comes with tradeoffs such as attributes that appear to jump where a primitive edge crosses a pixel (rather than change continuously) or derivatives that cannot be used by texture sampling operations that derive LOD.

Tópicos relacionadosRelated topics

AnexosAppendices

Estágio do rasterizador (RS)Rasterizer (RS) stage