Rasterização
# Rasterização

Rasterização, é a tarefa de converter uma imagem vetorial (curvas funcionais) em uma imagem raster (pixels ou pontos) para a possível leitura do documento.
O termo Rasterização também é utilizado para converter uma imagem formada por vetores para um arquivo de formato bitmap (SVG para PNG).

## Introdução

O termo rasterização, em geral, pode ser aplicado a qualquer processo pelo qual informações tipo vetorial podem ser convertidas num formato raster$^[$.
Em condições normais de utilização, o termo refere-se ao popular algoritmo de renderização, usado para exibir formas tridimensionais num computador$^[$. Rasterização é atualmente a técnica mais popular para a produção em tempo real de gráficos 3D$^[$. Aplicações em tempo real precisam responder de imediato aos usuários e, em geral, necessitam produzir taxas de pelo menos 24 fps (frames por segundo) para passar a sensação de movimento$^[$.
Comparada a outras técnicas, como renderização, a rasterização é extremamente rápida$^[$. No entanto, rasterização é simplesmente o processo de computar formas e geometria para pixels, e não prescreve uma determinada forma de calcular a cor desses pixels$^[$.

## Abordagem básica

O mais básico algoritmo de rasterização pega uma cena 3D, descrita como polígonos, e transforma-a em uma superfície 2D, normalmente um monitor de computador$^[$. Polígonos são representados com uma coleções de triângulos$^[$. Triângulos são representados por 3 vértices no espaço tridimensional$^[$. Em um nível muito básico, os rasterizadors pegam um fluxo de vértices, e transforma-os em pontos de duas dimensões correspondentes ao monitor do telespectador e preenchem os triângulos 2D que foram transformados de acordo com a necessidade$^[$.

### Transformações

Transformations são normalmente realizados por matriz multiplicação$^[$. quaterniões matemática também podem ser utilizadas, mas que está fora do âmbito de aplicação do presente artigo$^[$. A 3 dimensional vértice pode ser transformado por um reforço adicional variável conhecida como uma variável homogênea e deixou 4-resultante da multiplicação do espaço vértice por uma transformação matriz 4 x 4$^[$. As principais transformações são tradução, escamação, rotação, e projeção$^[$.
Um 'Tradução', é simplesmente a circulação de um ponto a partir do seu local original para outro local, em 3 de espaço por uma constante deslocamento$^[$. As traduções podem ser representadas pela seguinte matriz:
    ${\begin{bmatrix}1&0&0&X\\0&1&0&Y\\0&0&1&Z\\0&0&0&1\end{bmatrix}}$
X, Y, Z são os deslocamentos no 3 dimensões, respectivamente$^[$.
Um 'escamação' transformação é realizado pela multiplicação da posição de um vértice por um valor escalar$^[$. Isto tem o efeito de dimensionamento um vértice no que diz respeito à origem$^[$. Dimensionamento pode ser representada pela seguinte matriz:
    ${\begin{bmatrix}X&0&0&0\\0&Y&0&0\\0&0&Z&0\\0&0&0&1\end{bmatrix}}$
X, Y, Z são os valores pelos quais cada uma das dimensões-3 são multiplicados$^[$. Assimétricas dimensionamento pode ser obtida através da variação do valor de X, Y, e Z$^[$.
'Rotação' matrizes dependem do eixo em torno do qual é um ponto a ser rodado$^[$.
Rotação sobre o eixo-X:
    ${\begin{bmatrix}1&0&0&0\\0&\cos {\theta }&-\sin {\theta }&0\\0&\sin {\theta }&\cos {\theta }&0\\0&0&0&1\end{bmatrix}}$
Rotação sobre o eixo Y:
    ${\begin{bmatrix}\cos {\theta }&0&\sin {\theta }&0\\0&1&0&0\\-\sin {\theta }&0&\cos {\theta }&0\\0&0&0&1\end{bmatrix}}$
Rotação sobre o eixo-Z:
    ${\begin{bmatrix}\cos {\theta }&-\sin {\theta }&0&0\\\sin {\theta }&\cos {\theta }&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}}$
θ cada um desses em todos os casos representam o ângulo de rotação$^[$.
Uma série de tradução, redimensionamento, rotação e matrizes podem descrever logicamente mais transformações$^[$. Rasterization sistemas geralmente usam um 'transformação pilha' para mover o fluxo de entrada vértices no lugar$^[$. A transformação é um padrão pilha stack, que armazena matrizes$^[$. Incoming vértices são multiplicados pela matriz pilha$^[$.
Como um exemplo ilustrativo de como a transformação pilha é utilizada, imaginar um cenário simples, com um único modelo de uma pessoa. A pessoa está de pé na posição vertical, de frente para uma direção arbitrária, enquanto sua cabeça se transformou em outra direção. A pessoa também está localizado a uma certa distância entre a origem$^[$. Um fluxo de vértices, o modelo, seria carregado para representar a pessoa$^[$. Em primeiro lugar, uma tradução matriz seria empurrado para dentro da pilha para mover o modelo para o local correto$^[$. Um dimensionamento matriz seria empurrado para dentro da pilha a dimensão do modelo corretamente$^[$. A rotação sobre o eixo y-seria empurrado para dentro da pilha para orientar o modelo corretamente$^[$. Em seguida, o fluxo de vértices representando o corpo seria enviada através do rasterizer$^[$. Uma vez que a cabeça está a enfrentar uma direção diferente, a matriz de rotação seria surgiram fora do topo da pilha e de uma outra matriz de rotação sobre o eixo y-com um ângulo diferente seria empurrado$^[$. Por último, o fluxo de vértices representando a cabeça seria enviada para o rasterizer$^[$.
Depois de todos os pontos foram transformados para os seus locais desejados no espaço 3-no que diz respeito ao telespectador, eles devem ser transformados para a imagem 2-D avião$^[$. O mais simples projecção, o projecção ortogonal, simplesmente envolve a remoção do componente de z transformou 3d vértices$^[$. Projecções ortográficas têm a propriedade que todas as linhas paralelas no espaço 3-permanecerá em paralelo a 2-D representação$^[$. No entanto, as imagens são do mundo real perspectiva imagens, objetos distantes com menor do que os objectos que aparecem perto do telespectador$^[$. A perspectiva projeção transformação necessita de ser aplicada a esses pontos$^[$.
Conceptualmente, a idéia é a de transformar a perspectiva visualização em volume ortogonal a visualização volume$^[$. O volume é uma perspectiva visualização tronco, isto é, uma pirâmide truncada$^[$. O volume é uma visualização ortográficas caixa rectangular, onde tanto o de perto e longe vendo aviões são paralelas ao plano imagem$^[$.
Uma projeção perspectiva transformação pode ser representada pela seguinte matriz:
    ${\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&(N+F)/N&-F\\0&0&1/N&0\end{bmatrix}}$
F e N-se aqui as distâncias de perto e de longe a visualização aviões, respectivamente$^[$. Os quatro vectores resultante será um vector onde a variável não é homogênea 1$^[$. Homogeneizante do vetor, ou multiplicando-o pelo inverso do homogêneo variável de tal forma que a variável se torna homogéneos unitária, dá-nos a nossa resultante 2-D localização nas coordenadas x e y$^[$.

### Clipping

((seemain | Clipping (computação gráfica)))
Uma vez triângulo vértices são transformados para a sua correcta 2d locais, alguns destes locais podem estar fora da janela de visualização, ou o espaço na tela para que pixels serão efectivamente escrita$^[$. Clipping é o processo de truncagem triângulos para encaixá-los dentro da área visível$^[$.
O mais comum é a técnica Sutherland-Hodgeman recorte algoritmo$^[$. Nesta abordagem, cada uma das 4 bordas da imagem avião é testado em um momento$^[$. Para cada extremidade, de testar todos os pontos a serem prestados$^[$. Se o ponto está fora da borda, o ponto é removido$^[$. Para cada triângulo ponta que é Intersected pela imagem avião da ponta, ou seja, um vértice da ponta está dentro da imagem ea outra está no exterior, um ponto é inserido na intersecção e fora do ponto é removido$^[$.

### Scan conversão

O último passo no processo é a tradicional rasterization preencher o 2D triângulos que estão agora no plano da imagem$^[$. Esta é também conhecida como scan conversão$^[$.
((principal | Hidden superfície determinação)) O primeiro problema a considerar é ou não um pixel de chamar a todos$^[$. Para um pixel a ser prestado, deve ser dentro de um triângulo, e ele não deve ser ocluído, ou bloqueado por outro pixel$^[$. Há uma série de algoritmos para preencher em pixels dentro de um triângulo, o mais popular do que é o algoritmo scanline$^[$. Uma vez que é difícil saber que o motor rasterization vai chamar todos os pixels de frente para trás, tem de haver alguma forma de assegurar que pixels perto do telespectador não são substituídas por pixels longe$^[$. A z buffer é a solução mais comum$^[$. A z buffer é um array 2d o que corresponde a imagem do avião que armazena uma profundidade de valor para cada pixel$^[$. Sempre que um pixel é desenhada, ele atualiza o buffer z valor com a sua profundidade$^[$. Qualquer novo pixel deve verificar o seu valor contra a profundidade z buffer valor antes que seja traçada$^[$. Closer pixels são desenhadas e mais pixels são tidos em conta$^[$.
Para descobrir um pixel de cores, texturas e sombreamento cálculos devem ser aplicadas$^[$. A textura mapa é um bitmap que é aplicado a um triângulo de definir a sua aparência$^[$. Cada um triângulo vértice está também associado com uma textura e coordenar uma textura (u, v) para a normal 2-d texturas, além de coordenar a sua posição$^[$. Cada vez que um pixel em um triângulo é prestado, o correspondente Texel (ou textura elemento) na textura devem ser encontrado$^[$. Isso é feito por interpolação entre os vértices do triângulo "associados textura coordenadas pela pixels na tela distância dos vértices$^[$. Na perspectiva projecções, interpolação é realizada sobre a textura coordena dividida pela profundidade do vértice para evitar um problema conhecido como 'Perspectivas foreshortening'$^[$.
Antes do final cor do pixel pode ser decidido, uma iluminação cálculo deve ser efectuado à sombra dos pixels com base em qualquer luzes que podem estar presentes na cena$^[$. Não há luz geralmente três tipos comumente usados nas cenas$^[$. 'Direcional luzes' são luzes que provêm de uma única direção e têm a mesma intensidade ao longo de toda a cena$^[$. Na vida real, luz solar chega perto de ser uma luz direcional, como o sol está tão longe que os raios de sol aparecerá paralelo com observadores e ao cair do alto da Terra é desprezível$^[$. 'Ponto luzes são luzes com uma posição definida no espaço e irradiar luz uniformemente em todas as direções$^[$. Ponto luzes são geralmente sujeitos a alguma forma de 'atenuação, ou cair na intensidade da luz incidente sobre os objectos mais distante$^[$. Vida real fontes luminosas experiência quadrático cair do alto$^[$. Por último, 'holofotes são como as da vida real holofotes, com um tempo determinado ponto do espaço, uma direção, e definindo um ângulo do cone de luz da ribalta$^[$. Há também muitas vezes um 'luz ambiente é adicionado ao valor que todos os cálculos finais iluminação arbitrariamente para compensar a iluminação global rasterization efeitos que não pode calcular corretamente$^[$.
Há uma série de algoritmos para sombreamento rasterizers$^[$. Todos os algoritmos sombreamento em conta a necessidade de distância da luz e do vetor normal do objeto sombreadas no que diz respeito à direcção da luz incidente$^[$. Os algoritmos mais rápido simplesmente sombra todos os pixels em qualquer triângulo, com um único valor iluminação, também conhecido como coloração plana (flat shading)$^[$. Não há nenhuma maneira de criar a ilusão de superfícies lisas, desta forma, exceto por subdivisão em muitos pequenos triângulos$^[$. Algoritmos podem também separadamente sombra vértices, e interpole a iluminação valor dos vértices quando desenho pixels$^[$. Isto é conhecido como coloração Gouraud (Gouraud shading)$^[$. A abordagem mais lentos e mais realista é a de calcular iluminação em separado para cada pixel, também conhecido como coloração Phong (Phong shading)$^[$. Este realiza bilineares interpolação do vetores normais e utiliza o resultado para o local iluminação cálculo$^[$.

## Técnicas de Aceleração

Para extrair o máximo de desempenho fora de qualquer rasterization motor, um número mínimo de polígonos, devem ser enviados para o renderer$^[$. Uma série de aceleração técnicas têm sido desenvolvidas ao longo do tempo para abater os objectos que não podem ser vistos$^[$.

### Backface abate

((principal | Back-face abate)) A maneira mais simples de se abater polígonos de abater todos os polígonos que enfrentam longe do espectador$^[$. Isto é conhecido como backface abate$^[$. Como a maioria dos objetos 3D são completamente fechado, polígonos enfrenta fora de um telespectador são sempre bloqueada pelo polígonos virada para o telespectador, a menos que o espectador está dentro do objeto$^[$. A virada do polígono é definido pelo seu 'liquidação', ou a ordem em que seus vértices são enviados para o renderer$^[$. Um renderer pode definir tanto no sentido horário ou counterclockwise dissolução como frente ou para trás enfrenta$^[$. Uma vez que um polígono foi transformada a tela espaço, o seu encerramento pode ser verificada e, se for no sentido oposto, não é traçada a todos$^[$. Evidentemente, backface abate não podem ser utilizados com degenerar e unclosed volumes$^[$.

### Os dados espaciais estruturas

Utilizar técnicas mais avançadas estruturas de dados para reunir os objetos que estão fora da visualização volume, quer sejam ou oclusos por outros objectos$^[$. Os mais comuns são estruturas de dados binário espaço partição s, octree s, e 'célula e portal abate'$^[$.

## Novos aperfeiçoamentos

Enquanto a base rasterization processo tem sido conhecido há décadas, continuam a fazer aplicações modernas otimizações e adições para aumentar o leque de possibilidades para o motor de renderização rasterization$^[$.

### Textura filtragem

Texturas são criados em resoluções específicas, mas a partir da superfície para que sejam aplicadas podem ser, em qualquer distância do espectador, eles podem aparecer de tamanhos sobre a arbitrariedade da imagem final$^[$. Como resultado, um pixel na tela geralmente não corresponde diretamente a um Texel$^[$. Alguma forma de filtragem técnica devem ser aplicados para criar imagens limpas em qualquer distância$^[$. Uma variedade de métodos estão disponíveis, com diferentes troca entre qualidade da imagem e complexidade computacional$^[$.

### Ambiente mapeamento

Ambiente mapeamento é uma forma de mapeamento de texturas em que a textura coordenadas são dependentes de vista$^[$. Uma aplicação comum, por exemplo, é simular a reflexão sobre um objeto brilhante. Um pode mapear o ambiente interior de uma sala para um copo metal em uma sala$^[$. À medida que o telespectador se move sobre a taça, coordena a textura da taça vértices do movimento nesse sentido, fornecendo a ilusão de reflexo metálico$^[$.

### Bump mapeamento

Bump mapa ping é uma outra forma de mapeamento de texturas que não prevê pixels com cores, mas sim com profundidade$^[$. Especialmente com a moderna pixel sombreador (ver abaixo), lombada mapeamento cria a sensação de ver e de iluminação-dependente rugosidade em uma superfície de reforçar grandemente realismo$^[$.

### Nível de pormenor

Em muitas aplicações modernas, o número de polígonos, em qualquer cenário pode ser fenomenal$^[$. No entanto, um espectador em um cenário só será capaz de discernir detalhes do próximo-por objetos$^[$. Nível de pormenor algoritmos variar a complexidade de geometria como uma função da distância para o telespectador$^[$. Objetos em frente ao telespectador pode ser prestado em plena complexidade enquanto objetos mais distantes podem ser simplificados dinamicamente, ou até mesmo substituir completamente com o sprites$^[$.

### Sombras

Iluminação cálculos no processo tradicional rasterization não conta para a oclusão objeto$^[$. Sombra mapeamento e volume shadow s estão dois comuns modernas técnicas de criação de sombras$^[$.

## Aceleração de Hardware

Começando na década de 1990, aceleração hardware para computadores desktop normal consumidor tornou-se a norma$^[$. Considerando que os programadores gráficos mais cedo tinha invocado a mão-codificado montagem para fazer seus programas correr rápido, mais modernos programas são escritos a interface com uma das actuais API gráfica, que impulsiona uma dedicada GPU$^[$.
O último recurso apoio para GPUs programáveis pixel shader s que melhorar drasticamente as capacidades dos programadores$^[$. A tendência é no sentido da plena programabilidade dos gráficos gasoduto$^[$.