Renderização Scanline - Scanline rendering

Exemplo de algoritmo de linha de varredura

A renderização de linha de varredura (também renderização de linha de varredura e renderização de linha de varredura ) é um algoritmo para determinação de superfície visível , em computação gráfica 3D , que funciona linha por linha em vez de um polígono por polígono ou pixel por pixel base. Todos os polígonos a serem renderizados são primeiro classificados pela coordenada y superior em que aparecem pela primeira vez, então cada linha ou linha de varredura da imagem é calculada usando a interseção de uma linha de varredura com os polígonos na frente da lista classificada, enquanto a lista classificada é atualizada para descartar polígonos não mais visíveis à medida que a linha de varredura ativa avança para baixo na imagem.

A principal vantagem desse método é que a classificação dos vértices ao longo da normal do plano de varredura reduz o número de comparações entre as arestas. Outra vantagem é que não é necessário traduzir as coordenadas de todos os vértices da memória principal para a memória de trabalho - apenas os vértices que definem as arestas que cruzam a linha de varredura atual precisam estar na memória ativa, e cada vértice é lido apenas uma vez. A memória principal é frequentemente muito lenta em comparação com o link entre a unidade de processamento central e a memória cache e, portanto, evitar o re-acesso de vértices na memória principal pode fornecer um aumento substancial de velocidade.

Este tipo de algoritmo pode ser facilmente integrado com muitas outras técnicas gráficas, como o modelo de reflexão Phong ou o algoritmo Z-buffer .

Algoritmo

O método usual começa com bordas de polígonos projetados inseridos em baldes, um por linha de varredura; o rasterizador mantém uma mesa de borda ativa ( AET ). As entradas mantêm links de classificação, coordenadas X, gradientes e referências aos polígonos que vinculam. Para rasterizar a próxima linha de varredura, as bordas não mais relevantes são removidas; novas arestas do balde Y das linhas de varredura atuais são adicionadas, inseridas classificadas pela coordenada X. As entradas da tabela de borda ativa têm X e outras informações de parâmetro incrementadas. As entradas da tabela de arestas ativas são mantidas em uma lista classificada por X por classificação de bolha , efetuando uma alteração quando 2 arestas se cruzam. Após atualizar as arestas, a tabela de arestas ativas é percorrida em X para emitir apenas os vãos visíveis, mantendo uma tabela de Vãos ativa classificada em Z, inserindo e excluindo as superfícies quando as arestas são cruzadas.

Variantes

Um híbrido entre isso e o Z-buffering acaba com a classificação da tabela de borda ativa e, em vez disso, rasteriza uma linha de varredura por vez em um buffer Z, mantendo a extensão do polígono ativo de uma linha de varredura para a próxima.

Em outra variante, um buffer de ID é rasterizado em uma etapa intermediária, permitindo o sombreamento diferido dos pixels visíveis resultantes.

História

A primeira publicação da técnica de renderização de linha de varredura foi provavelmente por Wylie, Romney, Evans e Erdahl em 1967.

Outros desenvolvimentos iniciais do método de renderização de linha de varredura foram por Bouknight em 1969 e Newell, Newell e Sancha em 1972. Muito do trabalho inicial sobre esses métodos foi feito no grupo gráfico de Ivan Sutherland na Universidade de Utah e no Evans & Sutherland company em Salt Lake City .

Use na renderização em tempo real

A linha de geradores de imagens (IGs) da Evans & Sutherland ESIG empregava a técnica em hardware 'em tempo real', para gerar imagens uma linha de varredura por vez sem um framebuffer , poupando a necessidade de memória dispendiosa. As variantes posteriores usaram uma abordagem híbrida.

O Nintendo DS é o hardware mais recente a renderizar cenas 3D dessa maneira, com a opção de armazenar em cache as imagens rasterizadas em VRAM.

O hardware sprite predominante nas máquinas de jogos dos anos 1980 pode ser considerado uma forma 2D simples de renderização de linha de varredura.

A técnica foi usada no primeiro mecanismo Quake para renderização de ambientes por software (mas os objetos em movimento eram armazenados em Z por cima). O cenário estático usou classificação derivada de BSP para prioridade. Provou ser melhor do que os algoritmos do tipo Z-buffer / pintor no tratamento de cenas de complexidade de alta profundidade com operações de pixel caras (ou seja, mapeamento de textura com perspectiva correta sem auxílio de hardware). Este uso precedeu a adoção generalizada de GPUs baseadas em Z-buffer, agora comuns em PCs.

A Sony experimentou renderizadores de linha de varredura de software em um segundo processador Cell durante o desenvolvimento do PlayStation 3 , antes de optar por um arranjo CPU / GPU convencional.

Técnicas semelhantes

Um princípio semelhante é empregado na renderização lado a lado (o mais famoso é o chip PowerVR 3D); ou seja, os primitivos são classificados no espaço da tela e, em seguida, processados ​​na memória rápida no chip, um ladrilho de cada vez. O Dreamcast forneceu um modo para rasterizar uma linha de blocos por vez para varredura direta de varredura, evitando a necessidade de um framebuffer completo, algo no espírito da renderização de linha de varredura por hardware.

Alguns rasterizadores de software usam 'span buffering' (ou 'buffering de cobertura'), no qual uma lista de spans agrupados e classificados é armazenada em baldes de scanline. Os primitivos seriam adicionados sucessivamente a esta estrutura de dados, antes de rasterizar apenas os pixels visíveis em um estágio final.

Comparação com algoritmo Z-buffer

A principal vantagem da renderização de linha de varredura sobre o Z-buffering é que o número de vezes que os pixels visíveis são processados ​​é mantido no mínimo absoluto, que é sempre uma vez se nenhum efeito de transparência for usado - um benefício para o caso de alta resolução ou cálculos de sombreamento caros .

Em sistemas Z-buffer modernos, benefícios semelhantes podem ser obtidos por meio da classificação aproximada de frente para trás (aproximando-se do 'algoritmo de pintores reversos'), rejeição Z inicial (em conjunto com Z hierárquico) e técnicas de renderização adiada menos comuns possíveis em GPUs programáveis.

As técnicas de scanline que trabalham no raster têm a desvantagem de que a sobrecarga não é tratada de maneira adequada.

A técnica não é considerada para escalar bem à medida que o número de primitivas aumenta. Isso se deve ao tamanho das estruturas de dados intermediárias necessárias durante a renderização - que podem exceder o tamanho de um Z-buffer para uma cena complexa.

Consequentemente, em aplicativos gráficos interativos contemporâneos, o Z-buffer tornou-se onipresente. O Z-buffer permite que grandes volumes de primitivas sejam percorridos linearmente, em paralelo, de uma maneira amigável para o hardware moderno. Coordenadas transformadas, gradientes de atributos, etc., nunca precisam deixar o chip gráfico; apenas os pixels visíveis e valores de profundidade são armazenados.

Veja também

Referências

links externos