O que é filtragem de textura em jogos? A filtragem é anisotrópica. Uso prático de extensões: filtragem anisotrópica

Os jogos modernos usam cada vez mais efeitos gráficos e tecnologias que melhoram a imagem. No entanto, os desenvolvedores geralmente não se preocupam em explicar exatamente o que estão fazendo. Quando você não tem o computador mais poderoso, precisa sacrificar alguns dos recursos. Vamos tentar ver o que significam as opções gráficas mais comuns para entender melhor como liberar recursos do PC com impacto mínimo nos gráficos.

Filtragem anisotrópica

Quando alguma textura é exibida no monitor fora do tamanho original, é necessário inserir pixels adicionais nela ou, ao contrário, remover os extras. Para fazer isso, é utilizada uma técnica chamada filtragem.

A filtragem bilinear é o algoritmo mais simples e requer menos poder computacional, mas também produz os piores resultados. Trilinear adiciona clareza, mas ainda gera artefatos. O método mais avançado que elimina distorções perceptíveis em objetos fortemente inclinados em relação à câmera é a filtragem anisotrópica. Ao contrário dos dois métodos anteriores, ele combate com sucesso o efeito de gradação (quando algumas partes da textura ficam mais desfocadas do que outras e a fronteira entre elas se torna claramente visível). Ao usar a filtragem bilinear ou trilinear, a textura fica cada vez mais borrada à medida que a distância aumenta, mas a filtragem anisotrópica não tem essa desvantagem.

Dada a quantidade de dados sendo processados ​​(e pode haver muitas texturas de 32 bits de alta resolução na cena), a filtragem anisotrópica é particularmente exigente na largura de banda da memória. O tráfego pode ser reduzido principalmente por meio da compactação de texturas, que agora é usada em todos os lugares. Anteriormente, quando não era praticado com tanta frequência e o rendimento da memória de vídeo era muito menor, a filtragem anisotrópica reduzia significativamente o número de quadros. Em placas de vídeo modernas, quase não afeta o fps.

A filtragem anisotrópica possui apenas uma configuração - fator de filtro (2x, 4x, 8x, 16x). Quanto mais alto, mais claras e naturais ficam as texturas. Normalmente, com um valor alto, pequenos artefatos são visíveis apenas nos pixels mais externos das texturas inclinadas. Valores de 4x e 8x geralmente são suficientes para eliminar a maior parte da distorção visual. Curiosamente, ao passar de 8x para 16x, a penalidade de desempenho será bem pequena, mesmo em teoria, já que o processamento adicional só será necessário para um pequeno número de pixels não filtrados anteriormente.

Sombreadores

Shaders são pequenos programas que podem realizar certas manipulações em uma cena 3D, por exemplo, alterar iluminação, aplicar textura, adicionar pós-processamento e outros efeitos.

Os shaders são divididos em três tipos: os shaders de vértice operam com coordenadas, os shaders de geometria podem processar não apenas vértices individuais, mas também formas geométricas inteiras que consistem em no máximo 6 vértices, os pixel shaders trabalham com pixels individuais e seus parâmetros.

Shaders são usados ​​principalmente para criar novos efeitos. Sem eles, o conjunto de operações que os desenvolvedores poderiam usar nos jogos é muito limitado. Ou seja, a adição de shaders possibilitou a obtenção de novos efeitos que não vinham incluídos na placa de vídeo por padrão.

Os shaders funcionam de forma muito produtiva no modo paralelo, e é por isso que os adaptadores gráficos modernos têm tantos processadores de fluxo, também chamados de shaders. Por exemplo, a GeForce GTX 580 possui até 512 deles.

Mapeamento de paralaxe

O mapeamento paralaxe é uma versão modificada da conhecida técnica de mapeamento de relevo, usada para adicionar relevo às texturas. O mapeamento paralaxe não cria objetos 3D no sentido usual da palavra. Por exemplo, um piso ou parede em uma cena de jogo parecerá áspero, mas na verdade é completamente plano. O efeito de relevo aqui é conseguido apenas através da manipulação de texturas.

O objeto de origem não precisa ser plano. O método funciona em vários objetos do jogo, mas seu uso é desejável apenas nos casos em que a altura da superfície muda suavemente. Mudanças repentinas são processadas incorretamente e artefatos aparecem no objeto.

O mapeamento paralaxe economiza significativamente os recursos computacionais do computador, pois ao utilizar objetos analógicos com estrutura 3D igualmente detalhada, o desempenho dos adaptadores de vídeo não seria suficiente para renderizar cenas em tempo real.

O efeito é mais frequentemente usado em pavimentos de pedra, paredes, tijolos e azulejos.

Anti-aliasing

Antes do DirectX 8, o anti-aliasing em jogos era feito usando SuperSampling Anti-Aliasing (SSAA), também conhecido como Full-Scene Anti-Aliasing (FSAA). A sua utilização levou a uma diminuição significativa no desempenho, pelo que com o lançamento do DX8 foi imediatamente abandonado e substituído pelo Multisample Anti-Aliasing (MSAA). Apesar de este método ter dado resultados piores, foi muito mais produtivo que o seu antecessor. Desde então, surgiram algoritmos mais avançados, como o CSAA.

Considerando que nos últimos anos o desempenho das placas de vídeo aumentou visivelmente, tanto a AMD quanto a NVIDIA devolveram novamente o suporte à tecnologia SSAA aos seus aceleradores. Porém, ainda não será possível utilizá-lo em jogos modernos, pois o número de frames/s será muito baixo. O SSAA terá efeito apenas em projetos de anos anteriores, ou atuais, mas com configurações modestas para outros parâmetros gráficos. A AMD implementou suporte SSAA apenas para jogos DX9, mas na NVIDIA SSAA também funciona nos modos DX10 e DX11.

O princípio da suavização é muito simples. Antes de o quadro ser exibido na tela, certas informações são calculadas não em sua resolução nativa, mas em resolução ampliada e múltipla de dois. Em seguida, o resultado é reduzido ao tamanho necessário e a “escada” ao longo das bordas do objeto torna-se menos perceptível. Quanto maior a imagem original e o fator de suavização (2x, 4x, 8x, 16x, 32x), menos irregularidades haverá nos modelos. MSAA, ao contrário do FSAA, suaviza apenas as bordas dos objetos, o que economiza significativamente os recursos da placa de vídeo, porém, esta técnica pode deixar artefatos dentro dos polígonos.

Anteriormente, o Anti-Aliasing sempre reduzia significativamente o fps nos jogos, mas agora afeta apenas ligeiramente o número de quadros e às vezes não tem efeito algum.

Tesselação

Usando mosaico em um modelo de computador, o número de polígonos aumenta um número arbitrário de vezes. Para fazer isso, cada polígono é dividido em vários novos, que estão localizados aproximadamente da mesma forma que a superfície original. Este método permite aumentar facilmente os detalhes de objetos 3D simples. Ao mesmo tempo, porém, a carga do computador também aumentará e, em alguns casos, pequenos artefatos não podem ser descartados.

À primeira vista, o mosaico pode ser confundido com o mapeamento Parallax. Embora sejam efeitos completamente diferentes, já que o mosaico na verdade altera a forma geométrica de um objeto, e não apenas simula o relevo. Além disso, pode ser usado para praticamente qualquer objeto, enquanto o uso do mapeamento Parallax é muito limitado.

A tecnologia Tessellation é conhecida no cinema desde os anos 80, mas começou a ser suportada em jogos apenas recentemente, ou melhor, depois que os aceleradores gráficos finalmente atingiram o nível de desempenho necessário para poder ser executado em tempo real.

Para que o jogo use tesselação, é necessária uma placa de vídeo compatível com DirectX 11.

Sincronização vertical

V-Sync é a sincronização dos frames do jogo com a frequência de varredura vertical do monitor. Sua essência reside no fato de que um quadro de jogo totalmente calculado é exibido na tela no momento em que a imagem nele é atualizada. É importante que o próximo quadro (se já estiver pronto) também apareça nem depois nem antes do término da saída do anterior e do início do próximo.

Se a taxa de atualização do monitor for 60 Hz e a placa de vídeo tiver tempo para renderizar a cena 3D com pelo menos o mesmo número de quadros, cada atualização do monitor exibirá um novo quadro. Ou seja, em um intervalo de 16,66 ms, o usuário verá na tela uma atualização completa do cenário do jogo.

Deve ser entendido que quando a sincronização vertical está habilitada, o fps no jogo não pode exceder a frequência de varredura vertical do monitor. Se o número de frames for inferior a este valor (no nosso caso, inferior a 60 Hz), então para evitar perdas de desempenho é necessário ativar o buffer triplo, no qual os frames são calculados antecipadamente e armazenados em três buffers separados, o que permite que sejam enviados para a tela com mais frequência.

A principal tarefa da sincronização vertical é eliminar o efeito de quadro deslocado, que ocorre quando a parte inferior da tela é preenchida com um quadro e a parte superior com outro deslocado em relação ao anterior.

Pós-processamento

Este é o nome geral para todos os efeitos que são sobrepostos a um quadro pronto de uma cena 3D totalmente renderizada (em outras palavras, a uma imagem bidimensional) para melhorar a qualidade da imagem final. O pós-processamento usa pixel shaders e é usado nos casos em que efeitos adicionais exigem informações completas sobre toda a cena. Tais técnicas não podem ser aplicadas isoladamente a objetos 3D individuais sem causar o aparecimento de artefatos no quadro.

Alta faixa dinâmica (HDR)

Um efeito frequentemente usado em cenas de jogos com iluminação contrastante. Se uma área da tela estiver muito clara e outra muito escura, muitos detalhes de cada área serão perdidos e elas parecerão monótonas. O HDR adiciona mais gradação ao quadro e permite mais detalhes na cena. Para usá-lo, geralmente você precisa trabalhar com uma gama de cores mais ampla do que a precisão padrão de 24 bits pode fornecer. Os cálculos preliminares ocorrem com alta precisão (64 ou 96 bits), e somente na fase final a imagem é ajustada para 24 bits.

O HDR é frequentemente usado para perceber o efeito da adaptação da visão quando um herói nos jogos emerge de um túnel escuro para uma superfície bem iluminada.

Florescer

Bloom é frequentemente usado em conjunto com HDR e também tem um parente bastante próximo - Glow, e é por isso que essas três técnicas são frequentemente confundidas.

Bloom simula o efeito que pode ser visto ao fotografar cenas muito claras com câmeras convencionais. Na imagem resultante, a luz intensa parece ocupar mais volume do que deveria e “subir” nos objetos mesmo estando atrás deles. Ao usar o Bloom, artefatos adicionais na forma de linhas coloridas podem aparecer nas bordas dos objetos.

Grão de filme

Grão é um artefato que ocorre em TV analógica com sinal fraco, em fitas de vídeo magnéticas antigas ou fotografias (em particular, imagens digitais tiradas com pouca luz). Os jogadores muitas vezes desativam esse efeito porque ele estraga um pouco a imagem, em vez de melhorá-la. Para entender isso, você pode executar Mass Effect em cada modo. Em alguns filmes de terror, como Silent Hill, o ruído na tela, ao contrário, acrescenta atmosfera.

Desfoque de movimento

Motion Blur - o efeito de desfocar a imagem quando a câmera se move rapidamente. Pode ser utilizado com sucesso quando o cenário precisa de mais dinâmica e velocidade, por isso é especialmente procurado em jogos de corrida. Nos atiradores, o uso do desfoque nem sempre é percebido de forma inequívoca. O uso adequado do Motion Blur pode adicionar uma sensação cinematográfica ao que está acontecendo na tela.

O efeito também ajudará, se necessário, a disfarçar a baixa taxa de quadros e adicionar suavidade à jogabilidade.

SSAO

A oclusão de ambiente é uma técnica utilizada para tornar uma cena fotorrealista, criando uma iluminação mais verossímil dos objetos nela contidos, que leva em consideração a presença de outros objetos próximos com características próprias de absorção e reflexão de luz.

Screen Space Ambient Occlusion é uma versão modificada do Ambient Occlusion e também simula iluminação indireta e sombreamento. O surgimento do SSAO se deveu ao fato de que, no nível atual de desempenho da GPU, o Ambient Occlusion não poderia ser usado para renderizar cenas em tempo real. O aumento do desempenho no SSAO tem o custo de uma qualidade inferior, mas mesmo isso é suficiente para melhorar o realismo da imagem.

SSAO funciona de acordo com um esquema simplificado, mas tem muitas vantagens: o método não depende da complexidade da cena, não utiliza RAM, pode funcionar em cenas dinâmicas, não requer pré-processamento de quadros e carrega apenas o adaptador gráfico sem consumir recursos da CPU.

Sombreamento Cel

Os jogos com efeito Cel shading começaram a ser feitos em 2000 e apareceram primeiro nos consoles. Nos PCs, essa técnica se tornou verdadeiramente popular apenas alguns anos depois, após o lançamento do aclamado jogo de tiro XIII. Com a ajuda do Cel shading, cada quadro praticamente se transforma em um desenho feito à mão ou em um fragmento de desenho animado infantil.

Os quadrinhos são criados em um estilo semelhante, por isso a técnica é frequentemente usada em jogos relacionados a eles. Entre os últimos lançamentos conhecidos está o atirador Borderlands, onde o Cel shading é visível a olho nu.

As características da tecnologia são o uso de um conjunto limitado de cores, bem como a ausência de gradientes suaves. O nome do efeito vem da palavra Cel (Celulóide), ou seja, o material transparente (filme) sobre o qual são desenhados os filmes de animação.

Profundidade de campo

Profundidade de campo é a distância entre as bordas próximas e distantes do espaço dentro da qual todos os objetos estarão em foco, enquanto o resto da cena ficará desfocado.

Até certo ponto, a profundidade de campo pode ser observada simplesmente focando um objeto próximo aos seus olhos. Qualquer coisa atrás dele ficará desfocada. O oposto também é verdadeiro: se você focar em objetos distantes, tudo à sua frente ficará embaçado.

Você pode ver o efeito da profundidade de campo de forma exagerada em algumas fotografias. Este é o grau de desfoque que muitas vezes se tenta simular em cenas 3D.

Em jogos que utilizam Profundidade de campo, o jogador geralmente sente uma sensação de presença mais forte. Por exemplo, ao olhar para algum lugar através da grama ou arbustos, ele vê apenas pequenos fragmentos da cena em foco, o que cria a ilusão de presença.

Impacto no desempenho

Para descobrir como a ativação de certas opções afeta o desempenho, usamos o benchmark de jogos Heaven DX11 Benchmark 2.5. Todos os testes foram realizados em um sistema Intel Core2 Duo e6300, GeForce GTX460 com resolução de 1280x800 pixels (com exceção da sincronização vertical, onde a resolução foi de 1680x1050).

Como já mencionado, a filtragem anisotrópica praticamente não afeta o número de quadros. A diferença entre a anisotropia desativada e 16x é de apenas 2 quadros, por isso recomendamos sempre configurá-la no máximo.

O anti-aliasing no Heaven Benchmark reduziu os fps de forma mais significativa do que esperávamos, especialmente no modo 8x mais pesado. No entanto, como 2x é suficiente para melhorar visivelmente a imagem, recomendamos escolher esta opção se jogar em níveis mais altos for desconfortável.

O mosaico, ao contrário dos parâmetros anteriores, pode assumir um valor arbitrário em cada jogo individual. No Heaven Benchmark, a imagem sem ele deteriora-se significativamente e, no nível máximo, pelo contrário, torna-se um pouco irrealista. Portanto, você deve definir valores intermediários – moderados ou normais.

Foi escolhida uma resolução mais alta para sincronização vertical para que o fps não seja limitado pela taxa de atualização vertical da tela. Como esperado, o número de frames durante quase todo o teste com a sincronização ativada permaneceu firmemente em torno de 20 ou 30 fps. Isso se deve ao fato de que eles são exibidos simultaneamente com a atualização da tela, e com uma frequência de varredura de 60 Hz isso pode ser feito não a cada pulso, mas apenas a cada segundo (60/2 = 30 quadros/s) ou terceiro (60/3 = 20 quadros/s). Quando o V-Sync foi desligado, o número de quadros aumentou, mas artefatos característicos apareceram na tela. O buffer triplo não teve nenhum efeito positivo na suavidade da cena. Isso pode ser devido ao fato de não haver nenhuma opção nas configurações do driver da placa de vídeo para forçar a desativação do buffer, e a desativação normal é ignorada pelo benchmark, e ele ainda usa esta função.

Se Heaven Benchmark fosse um jogo, então nas configurações máximas (1280x800; AA - 8x; AF - 16x; Tessellation Extreme) seria desconfortável jogar, já que 24 frames claramente não são suficientes para isso. Com perda mínima de qualidade (1280×800; AA - 2x; AF - 16x, Tessellation Normal) você pode obter 45 fps mais aceitáveis.

Descrição dos algoritmos de texturização: filtragem de textura

Filtragem de textura

Recentemente, as empresas envolvidas no desenvolvimento de computação gráfica 3D têm se esforçado constantemente para aumentar o detalhe e a qualidade da imagem na renderização por computador. Novas tecnologias e arquiteturas de renderização 3D estão sendo constantemente desenvolvidas, algoritmos de compressão estão sendo aprimorados e atualizados para aumentar a largura de banda da memória, e a arquitetura da memória também está passando por mudanças. Infelizmente, a lacuna entre ideias avançadas em gráficos 3D e PCs convencionais é bastante grande: realismo em jogos modernos, etc. feito usando tecnologias desenvolvidas há 1-2 anos. Além disso, o poder dos PCs comuns é muito limitado, razão pela qual são usados ​​​​algoritmos bastante simples para jogos, que discutiremos neste artigo: isso é texturização e, com mais detalhes, filtragem de textura.

Tendo um computador ideal com desempenho muito superior ao atual, seríamos capazes de exibir uma imagem em tempo real com uma renderização bastante realista. Seria possível calcular milhões, até bilhões de pixels, e definir sua própria cor para cada um deles - neste caso, a imagem simplesmente não pode ser distinguida de um vídeo real. Mas, infelizmente, por enquanto, estes são apenas sonhos: para os computadores existentes ainda é muito difícil processar simultaneamente o desenho de objetos em movimento, etc. Além disso, ainda existe uma falta catastrófica de largura de banda de memória. Para garantir boa qualidade nas aplicações 3D, estão sendo desenvolvidas tecnologias para simplificar o processo de renderização de imagens.

Uma das tecnologias mais utilizadas que simplificam os cálculos de imagens com qualidade bastante boa é a texturização. Uma textura é uma imagem 2D aplicada a um objeto 3D ou a qualquer superfície. Tomemos como exemplo a seguinte situação: você é um desenvolvedor e deseja que o usuário veja uma parede de tijolos. Uma moldura de parede 3D é criada e você pode selecionar os tijolos separadamente. Agora tiramos uma foto 2D de um tijolo e a colocamos sobre um tijolo em uma moldura 3D e assim por diante - a parede inteira. O resultado é uma parede 3D normal, e o chip gráfico não precisa desenhar e calcular cada pixel - ele calcula as coordenadas do quadro 3D ao qual a imagem 2D está anexada.

Há mais um conceito em texturização que deve ser discutido. Ao sobrepor uma imagem 2D, ela é dividida em vários fragmentos coloridos. Isso é feito para dimensionar o objeto - a textura é bidimensional e um objeto tridimensional deve mudar ao se aproximar ou se afastar. A textura também deve mudar para manter o realismo e a qualidade. Assim, a textura é dividida em vários fragmentos coloridos, chamados texels (elementos de textura). No futuro, por exemplo, ao se aproximar de um objeto, não há necessidade de recarregar uma nova textura: os texels são retirados da textura original e ampliados. Claro, a qualidade é perdida, mas permanece em um nível bastante alto; além disso, com essa abordagem, o processador gráfico e a memória são significativamente descarregados.

Mapeamento Mip

O movimento é uma característica de todos os objetos exibidos; Mesmo que o objeto em si esteja estacionário, ele ainda muda quando o ângulo de visão do personagem muda devido ao seu movimento. Portanto, a textura colocada no objeto também deve se mover - isso acarreta algumas complicações e processamento adicional. Mas e se olharmos para um objeto de algum ângulo, por exemplo, do chão? O piso pode ocupar uma grande área e, para manter o realismo, quanto mais longe estiver de nós, menores serão os seus componentes (por exemplo, ladrilhos). Para garantir isso, a textura deve ser reduzida de uma certa forma. Infelizmente, simplesmente alterar a resolução das texturas pode levar a um efeito bastante desagradável, quando uma textura se funde visualmente com outra. Outro efeito desagradável pode ocorrer se o texel for maior que o número necessário de pixels. Isso acontece quando você olha para uma textura que está muito distante. Ambas as situações surgem ao usar o anti-aliasing tradicional. E aqui estão exemplos reais destes casos: não há

Para mitigar tais situações, foi criado o mapeamento mip. Esta tecnologia funciona de forma muito simples: a textura original é gerada em diversas situações de forma a exibir corretamente a textura em diferentes distâncias e em diferentes ângulos de visão. Ao se aproximar de um objeto, a textura é mostrada com maior resolução, e ao se afastar - com menor resolução. Assim, o mapeamento mip melhora a qualidade da imagem e reduz irregularidades. Abaixo estão as mesmas imagens, apenas com o mapeamento mip habilitado: não há imagens neste resumo.

Você notou uma melhora na qualidade? É especialmente perceptível na segunda foto com o padrão amarelo e vermelho. Observação: a qualidade não apenas das texturas distantes melhorou: as próximas também parecem muito melhores. Em geral, uma imagem com mapeamento mip parece muito melhor do que sem ele: não há inúmeras distorções e curvaturas visíveis durante a exibição normal.

Filtração

A texturização de pontos é talvez o principal tipo de texturização. Com a texturização de pontos, um fragmento separado da textura (texel) é selecionado e usado como valor de cor para pixels. O facto é que este método acarreta algum desleixo e, consequentemente, deterioração da qualidade da imagem. Tal imagem é simplesmente inaceitável segundo os padrões existentes. Abaixo está uma textura que foi processada com texturização pontual (parte inferior da imagem). A imagem mostra a degradação teórica da qualidade ao escolher um tamanho de texel muito grande.

Filtração Bilineat

Outro método de texturização é a filtragem bilinear. O princípio de funcionamento deste método de texturização é muito semelhante ao método de pontos, mas ao contrário dele, não a imagem completa, mas um bloco de 4 texels é usado para selecionar a cor dos pixels. Isso melhora a precisão na escolha das cores dos pixels e consegue uma melhor renderização de pequenos detalhes individuais na imagem.

Esta imagem mostra um exemplo de desenho de uma imagem usando filtragem bilinear e mapeamento mip.

Filtragem trilinear

A filtragem bilinear renasceu na forma de filtragem trilinear, cujo princípio de funcionamento é exatamente o mesmo, mas é utilizado um algoritmo de cálculo aprimorado, que aumenta a precisão da renderização. A filtragem trilinear, assim como a filtragem bilinear, usa blocos de 4 texels, assim como na filtragem bilinear, a imagem é normalizada, então a imagem do bloco limite de 4 texels é normalizada. O último passo é analisar o limite de ambos os blocos, corrigindo possíveis erros e inconsistências no limite desses 2 blocos. Na filtragem bilinear, é bastante comum ver linhas aparecendo nos limites dos blocos, que desaparecem ao usar a filtragem trilinear. Além disso, ao usar a filtragem trilinear, é melhor remover distorções e irregularidades durante o movimento e ao alterar o ângulo de visão. Abaixo está um diagrama de como a filtragem trilinear é usada e em ação.

Deve-se notar que alguns defeitos aparecem a uma distância considerável, mesmo quando se utiliza filtragem trilinear. Isso ocorre porque ele foi originalmente projetado para reduzir a distorção entre os níveis do mapa mip.

A imagem é obtida com altíssima qualidade apenas em ângulos de visão mais diretos, com desenho real as formas geométricas do objeto podem ser perturbadas. Veja a foto da SGI:

Filtragem anisotrópica

A forma dos objetos texturizados, tanto durante a filtragem bilinear quanto trilinear, pode ficar distorcida, porque Ambos os filtros são isotrópicos - a imagem é filtrada em uma determinada forma - na forma de um quadrado. A maioria dos objetos gerados não se enquadra nesta forma específica e imutável: para seu processamento de alta qualidade é necessário utilizar outro tipo de filtragem - anisotrópica. Anisotropia consiste em várias palavras em latim e significa literalmente "Ani" - não, "iso" - uma certa forma e "tropia" - modelo - ou seja, modelos de forma indeterminada. O nome desta tecnologia reflete a sua implementação técnica. A filtragem anisotrópica geralmente opera em pelo menos 8 texels, níveis de mapa mip em todas as direções e usa um modelo de formato predeterminado. Como resultado, o ruído e a distorção dos objetos são removidos e a imagem como um todo é de maior qualidade.

Compare duas imagens: uma usou filtragem anisotrópica de 16 texels, que eliminou distorções entre os níveis do mapa mip e ruído da imagem; a segunda imagem teve a filtragem anisotrópica desativada.

Preste atenção às longas distâncias da imagem: as diferenças entre a filtragem anisotrópica e isotrópica são óbvias. A qualidade da textura com filtragem anisotrópica permanece semelhante à original mesmo em longas distâncias; Com a filtragem isotrópica, há uma tendência de “suavizar” a imagem, resultando em perda de qualidade. A filtragem anisotrópica, assim como a filtragem trilinear, reduz a irregularidade da textura. Mas ao usar filtragem anisotrópica, a qualidade é ainda melhor, porque ele usa um número muito maior de blocos para comparação. Aqui está outro exemplo que mostra a filtragem anisotrópica em ação:

Por muito tempo, as placas gráficas de consumo não forneceram a qualidade de imagem possível com a filtragem anisotrópica. Com o advento de chips gráficos como NVIDIA GeForce2 e ATI Radeon, tornou-se possível utilizar filtragem anisotrópica, que analisa blocos de 16 texels em hardware. As placas de vídeo GeForce3 e Radeon 8500 já utilizam filtragem anisotrópica de 32 texels. A imagem abaixo mostra uma imagem próxima ao que seria produzido usando filtragem anisotrópica profissional de 64 texel:

Futuro…

Num futuro próximo, a filtragem anisotrópica será usada cada vez com mais frequência. Novas tecnologias para eliminar irregularidades e angularidades de objetos já estão sendo desenvolvidas para a próxima geração de chips gráficos. Num futuro próximo veremos imagens processadas usando blocos multitexel. Haverá placas de vídeo com suporte de hardware para filtragem anisotrópica usando 128 blocos texel. Ao mesmo tempo, a qualidade da imagem melhorará significativamente e a produtividade aumentará.

Adicionalmente:

Antialiasing e filtragem anisotrópica hoje: o quê, onde e quanto? Parte um

Na verdade, um artigo com esse título poderia começar com algum chavão como “todo usuário de computador em algum momento viu a operação de técnicas de aprimoramento de imagem 3D, como anti-aliasing ou filtragem anisotrópica”. Ou isto: “enquanto nossas naves espaciais exploram o espaço, os programadores da NVIDIA e da ATI procuram maneiras de melhorar o desempenho de técnicas conhecidas de aprimoramento de imagem”. A segunda banalidade tem muito mais chances de sobreviver no sentido de que já intriga com alguma aparência do fato de que estaremos investigando a questão de quem e como “otimizou” seus motoristas.

No entanto, provavelmente passaremos sem banalidades. Porque é muito mais interessante especular sobre o quão acessíveis as técnicas de aprimoramento de imagem se tornaram agora para o usuário comum, ou, mais corretamente, para o jogador comum. Os jogadores hoje são os consumidores mais ativos de todas as novas tecnologias e inovações em 3D. Em geral, hoje é necessário um poderoso acelerador 3D exclusivamente para jogar os jogos de computador mais recentes com poderosos mecanismos 3D que operam com shaders complexos de várias versões. Hoje em dia você não surpreenderá ninguém com um jogo com pixel shaders versão 2.0 - no mundo dos jogos essa diversão está lentamente se tornando uma ocorrência cotidiana. A maioria dos jogos ainda é lançada usando o modelo de shader 1.1 devido ao fato de que a coisa mais importante para os desenvolvedores de jogos é garantir que seu jogo funcione razoavelmente bem no hardware que a grande maioria dos jogadores possui. Fazer um motor super sofisticado agora é um grande desperdício e até um risco. Julgue por si mesmo: o desenvolvimento de um motor da classe “Doom 3” ou “Half-Life 2” (bem, vamos adicionar aqui o pioneiro dos shaders 2.0 em toda a sua glória, ideia da Crytek – “FarCry”, para obter uma verdadeira trindade onipresente) leva muito tempo, o que traz dificuldades adicionais de desenvolvimento - é necessário desenvolver o motor em um prazo tal que as inovações e desenvolvimentos originais não fiquem desatualizados durante a criação do motor.

Se você duvida que isso possa acontecer, então é completamente em vão - no caso de “Half-Life 2” tudo era exatamente assim (e “Doom 3” foi desenvolvido de olho na GeForce 3, e foi lançado quando a GeForce FX). Além disso, o desenvolvimento de motores desta classe está associado a altos custos de desenvolvimento: hoje, programadores talentosos não são baratos. E recentemente, muita atenção (ainda mais do que o necessário) tem sido dada, por assim dizer, à “política” em relação aos motores de jogo.

Sim, sim, isso mesmo, você ouviu direito, o campo 3D há muito tem sua própria política, baseada, naturalmente, nos interesses dos dois gigantes no design de processadores gráficos: ATI e NVIDIA. O duro Canadá luta contra a ensolarada Califórnia há muito tempo e até agora não há fim à vista para esse confronto, o que, é claro, só beneficia a nós, consumidores comuns. Agora não é suficiente desenvolver um motor legal - para ter sucesso, você precisa contar com o apoio da diva californiana NVIDIA ou da canadense ATI, felizmente, agora tanto a primeira quanto a segunda têm seus próprios programas de parceria para desenvolvedores de jogos. A NVIDIA chama esse programa de “A maneira como deve ser jogado”, e a ATI o chama de “Coloque-o no jogo”. Tudo é bastante eloqüente e claro: a NVIDIA diz que “você precisa jogar assim”, e não nada assim, e a ATI garante que com certeza conseguiremos tudo o que queremos no jogo em si. Bastante tentador, não é? Os motores são da classe “Doom 3” e “Half-Life 2” (no caso deste último, o motor chama-se Source, porém para facilitar a compreensão iremos chamá-lo de “Half-Life 2” para manter a associação correta) e foram inicialmente desenvolvidos em estreita cooperação com engenheiros de fabricantes de chips gráficos para que os jogos funcionaria melhor na GPU de um fabricante.

Portanto, como podemos ver, as revoluções no campo dos novos motores gráficos 3D são muito problemáticas e, portanto, essas mesmas revoluções no mundo dos motores de jogos não acontecem com muita frequência. No entanto, a qualidade da imagem precisa ser melhorada de alguma forma. Se simplesmente aumentarmos o número de polígonos no quadro, obtendo assim uma imagem visualmente mais bonita para ser percebida, então no final chegaremos ao ponto em que o acelerador não será capaz de processar a cena com um nível aceitável de taxa de quadros , mas ainda haverá algo faltando na imagem. As escadas de pixels ainda permanecerão e a qualidade das texturas não melhorará. Existem maneiras menos óbvias de melhorar a qualidade de uma imagem tridimensional em um monitor - filtragem anisotrópica e antialiasing. Essas técnicas de aprimoramento de imagem nada têm a ver diretamente com o motor 3D em si e, naturalmente, não podem deixar o motor em si mais bonito, mas podem trabalhar com texturas e imagens de tal forma que na saída, ou seja, no monitor, podemos ver uma imagem visualmente mais bonita e suave.

É no campo da filtragem anisotrópica e antialiasing que uma quantidade colossal de otimização de driver ocorre tanto por parte da NVIDIA quanto da ATI. As empresas têm abordagens e políticas diferentes em relação a essas mesmas otimizações, às vezes não totalmente justas para os usuários. Porém, nosso artigo tem como objetivo justamente entender o que há de bom e o que há de ruim nas abordagens tanto das empresas fabricantes de GPUs quanto do que pode melhorar a qualidade de imagem em jogos 3D atualmente.

O que é anti-aliasing e para que é usado?

Antes de começarmos a entrar em detalhes sobre um tema tão candente como a otimização do anti-aliasing e vários tipos de filtragem de texturas, não fará mal (e até mesmo dizer que é necessário) adquirir alguns conhecimentos teóricos sobre o assunto da nossa conversa de hoje.

Então, antialiasing – o que é e por que é necessário? Em primeiro lugar, na palavra “antialiasing” é necessário destacar a parte dela – “anti”. É muito claro que esta parte da palavra implica que o próprio fenómeno do “anti-aliasing” visa combater algo. Como você pode imaginar, no nosso caso – com “aliasing”. Portanto, neste momento é importante entendermos claramente o que é o notório “aliasing”.

Primeiro, você precisa entender claramente que a imagem que você e eu podemos ver todos os dias nas telas de nossos monitores consiste nas chamadas pequenas partículas, comumente chamadas de pixels. Uma boa analogia nesse sentido é o exemplo do papel quadriculado. A imagem no monitor é o mesmo papel xadrez, só que neste caso são muito, muito pequenos. Se disserem que a resolução da tela é 1024x768 com cores de 32 bits, isso significa que 1024 pixels cabem horizontalmente no monitor e 768 verticalmente. Além disso, cada pixel pode ser pintado com uma cor daquelas disponíveis na paleta de 32 bits. No momento, cores de 32 bits são o limite do que podemos alcançar na tela de um computador. As melhores mentes da humanidade (o mesmo Carmack) já falam sobre a necessidade de mudar para cores de 64 bits e apontam as desvantagens óbvias da paleta de 32 bits. Ao mesmo tempo, ao passar de cores de 16 bits para 32 bits, essa necessidade era claramente justificada e havia razões reais pelas quais valeria a pena mudar para 32 bits. A transição para cores de 64 bits hoje é um tanto exagerada. Assim como no caso de 16 e 32 bits, no devido tempo você terá que esperar muito tempo até que aceleradores de todos os níveis sejam capazes de processar cores de 64 bits a uma velocidade aceitável.

A grande maioria dos artigos que abordam os princípios da construção de imagens em 3D de uma forma ou de outra e onde falam sobre antialiasing estão repletos de um exemplo simples, mas ao mesmo tempo mais eficaz, que pode ser usado para entender muito bem o que é antialiasing. Veja a inscrição “Upgrade” ampliada, feita no Word e depois simplesmente ampliada no Photoshop. Não parece muito bom, não é? Nas laterais das letras você pode ver o chamado pente ou, como também é chamado, “escada”. Em essência, esse mesmo “pente” ou “escada” é um alias. Outro exemplo pode ser representado por um objeto geométrico, como uma pirâmide. O mesmo “pente” também é claramente visível nas bordas. Agora observe outra imagem da mesma pirâmide, mas com o dobro da resolução. Já parece muito melhor, e o “pente” está quase invisível. Como mencionado acima, este efeito, suavizando o “pente”, foi conseguido devido ao facto de termos aumentado a resolução em 2 vezes.

O que isto significa? Suponhamos que renderizamos uma pirâmide com resolução de 200x200 pixels (acima já esclarecemos em detalhes a questão do que são pixels e por que são necessários). Aumentamos o número de pontos na vertical e na horizontal exatamente 2 vezes, ou seja, obtivemos uma imagem com resolução de 400 pixels na vertical e 400 pixels na horizontal. Isso também significa que o número de pontos do nosso objeto que estava na cena dobrou. O que isso fez com o nosso efeito de aliasing? Obviamente, tornou-se mínimo, ou seja, suavizado - afinal, o número de pontos ao longo das bordas do objeto também dobrou. É a palavra “suavizado” que é fundamental aqui. Afinal, o anti-aliasing também é chamado de anti-aliasing, o que reflete a própria essência da tecnologia, que suaviza aquela mesma “escada” ao longo das bordas dos objetos tridimensionais.

Na verdade, depois de aumentar a resolução, a “escada” da borda da pirâmide não desapareceu - ela permanece lá como antes. Porém, pelo fato de termos aumentado a resolução (o que significa um aumento nos pixels que são gastos na exibição da pirâmide), o efeito “escada” foi suavizado devido às peculiaridades da visão humana, que não vê mais os pixels com clareza. na borda de um objeto. É absolutamente claro que se você aumentar cada vez mais a resolução, o efeito de serrilhado será observado cada vez menos. Mais precisamente, o olho humano começará a notá-lo cada vez menos, uma vez que o efeito de serrilhado em si não desaparecerá. Mas também é absolutamente claro que não será possível aumentar a resolução indefinidamente, pois os monitores, mesmo os mais modernos, possuem resoluções finitas, e não tão grandes, o que não nos permitirá aumentar constantemente o número de pontos. Simplificando, o efeito antialiasing mais simples pode ser alcançado simplesmente aumentando a resolução da tela, mas a resolução não pode aumentar indefinidamente. Parece que não há saída? Porém, na realidade foi encontrado e se baseia na mesma característica da visão humana.

Isto foi conseguido graças às transições suaves de cores na imagem. Na verdade, a melhoria visual da imagem não é feita por um aumento físico na resolução, mas sim, por assim dizer, por um aumento de cor na resolução. Neste artigo não descreveremos algoritmos para cálculo desses pontos e não nos aprofundaremos nos cálculos matemáticos, mas apenas falaremos sobre o princípio de funcionamento desse antialiasing. A escada nos limites dos objetos é visível apenas porque na maioria das vezes as bordas dos objetos tridimensionais se destacam fortemente em cores do resto da imagem e aparecem como linhas finas de um pixel. Isso pode ser compensado colocando um número de pontos com cores calculadas a partir dos valores de cores da própria borda e dos pontos próximos a essa borda. Ou seja, se a borda de um objeto for preta e o fundo for branco, o ponto extra próximo à linha preta da borda ficará cinza. Quanto mais pontos extras estiverem próximos à borda de qualquer objeto 3D, mais suaves serão as bordas e menos perceptível será a escada. Este método é chamado de antialiasing de borda. A qualidade de antialiasing, definida no driver da placa de vídeo, como: 2x, 4x, 6x, 8x significa o número de pixels adicionais colocados ao redor da linha que precisa de antialiasing.

Filtragem anisotrópica: um miniprograma educacional para iniciantes

Para entender o que é filtragem, você precisa ter alguns conhecimentos básicos. Já descobrimos que a imagem na tela é composta por vários pixels, cujo número é determinado pela resolução. Para gerar uma imagem colorida, sua placa gráfica deve detectar a cor de cada pixel. Sua cor é determinada pela sobreposição de imagens de textura em polígonos localizados no espaço tridimensional. As imagens de textura consistem em pixels, ou melhor, texels, ou seja, um texel é um pixel de uma imagem bidimensional sobreposta a uma superfície 3D. O principal dilema é este: qual texel ou texels determina a cor de um pixel na tela. Para imaginar o problema de filtragem, vamos imaginar uma imagem. Digamos que sua tela seja uma placa com muitos furos redondos, cada um deles representando um pixel. Para determinar a cor de um pixel em relação à cena tridimensional localizada atrás da placa, basta olhar através de um dos orifícios.

Agora imagine um raio de luz que passa por um dos buracos e atinge nosso polígono texturizado. Se este último estiver localizado paralelo ao orifício por onde passa o feixe de luz, o ponto de luz terá a forma de um círculo. Caso contrário, se o polígono não for paralelo ao buraco, o ponto de luz ficará distorcido e terá uma forma elíptica. Achamos que muitos leitores neste momento estão fazendo uma pergunta: “como todas essas placas, um buraco, um feixe de luz estão relacionados ao problema de determinar a cor de um pixel?” Atenção! Frase-chave: todos os polígonos localizados no ponto de luz determinam a cor do pixel. Todos os itens acima são o conhecimento básico necessário para compreender vários algoritmos de filtragem.

E agora, para que você entenda melhor por que a filtragem é necessária, vejamos os processos que ocorrem usando o exemplo do lendário “Quake 3 Arena”. Imagine uma espécie de corredor com muitos quadrados e vários enfeites (felizmente, Quake 3 Arena tem o suficiente). O ornamento no início do corredor é altamente detalhado, e mais perto do final do corredor (horizonte) os elementos do ornamento tornam-se cada vez menores, ou seja, eles são exibidos com menos pixels. Como resultado, detalhes como costuras entre os elementos do ornamento são perdidos, o que, conseqüentemente, leva a uma deterioração na qualidade da imagem.

O problema é que o driver da placa gráfica não sabe quais detalhes da textura são importantes.

Amostragem de pontos

A amostragem de pontos é a maneira mais simples de determinar a cor de um pixel. Este algoritmo é baseado em uma imagem de textura: apenas um texel é selecionado, o que está mais próximo do centro do ponto de luz, e a cor do pixel é determinada a partir dele. Não é difícil adivinhar que isso está completamente errado. Primeiro, a cor de um pixel é determinada por vários texels e selecionamos apenas um. Em segundo lugar, a forma do ponto de luz pode mudar e o algoritmo não leva isso em consideração. Mas em vão!

A principal desvantagem da amostragem em linha é o fato de que quando o polígono está localizado próximo à tela, o número de pixels será significativamente maior que o dos texels, o que fará com que a qualidade da imagem seja bastante prejudicada. O chamado efeito de bloqueio, como acreditamos, muitos poderiam observar em jogos de computador antigos, por exemplo, no mesmo lendário “Doom”.

A amostragem pontual tem uma vantagem. Devido ao fato de a determinação da cor de um pixel ser realizada utilizando apenas um texel, este método não é crítico para a largura de banda da memória, e isso automaticamente confere a este método de filtragem enormes benefícios no sentido de que poucos recursos do acelerador 3D são gastos na filtragem usando este esquema.

Filtragem Bilinear

Filtragem Bilinear – filtragem bilinear baseada no método de utilização de tecnologia de interpolação. Para determinar os texels necessários, é utilizada a forma básica do ponto de luz, ou seja, um círculo. No nosso exemplo de círculo, este último é aproximado por 4 texels. Como você pode ver, as coisas são um pouco melhores aqui do que com Point Sampling. A filtragem bilinear já utiliza 4 texels.

A imagem é de qualidade superior, não há bloqueios, mas os polígonos próximos à tela parecem borrados, e isso se deve ao fato de que a interpolação requer um número maior de texels do que os quatro disponíveis.

A imprecisão não é de forma alguma o principal problema da filtragem bilinear. O fato é que a aproximação é realizada corretamente apenas para objetos localizados paralelamente à tela ou ponto de observação, enquanto 99% dos objetos em qualquer jogo de computador estão localizados não paralelos ao ponto de observação. Disto podemos concluir que 99% dos objetos serão aproximados incorretamente. Tomemos, por exemplo, nosso círculo - o polígono está localizado não paralelo ao ponto de observação, portanto, deveríamos aproximar uma elipse, mas aproximamos um círculo, o que é extremamente incorreto. Além disso, a filtragem bilinear exige muito mais largura de banda da memória, o que, em geral, é mais que lógico, visto que a filtragem bilinear já utiliza 4 texels para determinar a cor de um pixel.

A texturização é um elemento crítico das aplicações 3D atuais e, sem ela, muitos modelos 3D perdem muito do seu apelo visual. No entanto, o processo de aplicação de texturas em superfícies não é isento de artefatos e métodos apropriados para sua supressão. No mundo dos jogos tridimensionais, termos especializados como “mapeamento mip”, “filtragem trilinear”, etc., que se referem especificamente a esses métodos, aparecem de vez em quando.

Um caso especial do efeito de serrilhado discutido anteriormente é o efeito de serrilhado de superfícies texturizadas, que, infelizmente, não pode ser removido pelos métodos de multi ou superamostragem descritos acima.

Imagine um tabuleiro de xadrez preto e branco de tamanho grande, quase infinito. Digamos que desenhemos este quadro na tela e olhemos para ele de um leve ângulo. Para áreas suficientemente distantes do tabuleiro, o tamanho das células inevitavelmente começará a diminuir para o tamanho de um pixel ou menos. Esta é a chamada redução óptica de textura (minificação). Uma “luta” começará entre os pixels de textura pela posse dos pixels da tela, o que levará a uma cintilação desagradável, que é uma das variedades do efeito de serrilhado. Aumentar a resolução da tela (real ou efetiva) ajuda apenas um pouco, pois para objetos distantes o suficiente os detalhes da textura ainda ficam menores que os pixels.

Por outro lado, as partes do tabuleiro mais próximas de nós ocupam uma grande área da tela, e você pode ver enormes pixels de textura. Isso é chamado de ampliação de textura óptica (ampliação). Embora este problema não seja tão agudo, também precisa ser tratado para reduzir o efeito negativo.

Para resolver problemas de texturização, é usada a chamada filtragem de textura. Se você observar o processo de desenho de um objeto tridimensional com uma textura sobreposta, verá que o cálculo da cor de um pixel ocorre “ao contrário” - primeiro, um pixel da tela é encontrado onde um determinado ponto do objeto será projetado e, neste ponto, todos os pixels de textura que caem dentro dela. Selecionar pixels de textura e combiná-los (calculando a média) para obter a cor final do pixel da tela é chamado de filtragem de textura.

Durante o processo de texturização, cada pixel da tela recebe uma coordenada dentro da textura, e essa coordenada não é necessariamente um número inteiro. Além disso, um pixel corresponde a uma determinada área da imagem da textura, que pode conter vários pixels da textura. Chamaremos esta área de imagem de um pixel na textura. Para as partes próximas do nosso tabuleiro, o pixel da tela torna-se significativamente menor que o pixel da textura e, por assim dizer, está localizado dentro dele (a imagem está contida dentro do pixel da textura). Para os remotos, ao contrário, cada pixel contém um grande número de pontos de textura (a imagem contém vários pontos de textura). A imagem de pixel pode ter diferentes formatos e em geral é um quadrilátero arbitrário.

Vejamos vários métodos de filtragem de textura e suas variações.

Vizinho mais próximo

Neste método, o mais simples, a cor do pixel é simplesmente escolhida para ser a cor do pixel de textura correspondente mais próximo. Este método é o mais rápido, mas também o de menor qualidade. Na verdade, este não é nem mesmo um método de filtragem especial, mas simplesmente uma forma de selecionar pelo menos algum pixel de textura que corresponda a um pixel da tela. Foi amplamente utilizado antes do advento dos aceleradores de hardware, cujo uso generalizado possibilitou a utilização de métodos melhores.

Filtragem bilinear

A filtragem bilinear encontra os quatro pixels de textura mais próximos do ponto atual na tela e a cor resultante é determinada como resultado da mistura das cores desses pixels em alguma proporção.

A filtragem do vizinho mais próximo e a filtragem bilinear funcionam muito bem quando, em primeiro lugar, o grau de redução da textura é pequeno e, em segundo lugar, quando vemos a textura em um ângulo reto, ou seja, frontalmente. Com o que isso está relacionado?

Se considerarmos, conforme descrito acima, a “imagem” de um pixel da tela na textura, então no caso de uma forte redução ela incluirá muitos pixels de textura (até todos os pixels!). Além disso, se olharmos a textura de um ângulo, esta imagem ficará bastante alongada. Em ambos os casos, os métodos descritos não funcionarão bem, pois o filtro não “capturará” os pixels de textura correspondentes.

Para resolver esses problemas, são utilizados os chamados mapeamento mip e filtragem anisotrópica.

Mapeamento Mip

Com uma redução óptica significativa, um ponto na tela pode corresponder a muitos pixels de textura. Isso significa que mesmo a implementação do melhor filtro exigirá muito tempo para calcular a média de todos os pontos. No entanto, o problema pode ser resolvido criando e armazenando versões da textura nas quais os valores são calculados antecipadamente. E na fase de renderização, procure a versão desejada da textura original do pixel e tire o valor dela.

O termo mipmap vem do latim multum in parvo – muito em pouco. Ao utilizar esta tecnologia, além da imagem da textura, a memória do acelerador gráfico armazena um conjunto de suas cópias reduzidas, sendo cada nova exatamente a metade do tamanho da anterior. Aqueles. para uma textura de tamanho 256x256, imagens de 128x128, 64x64, etc., até 1x1 são armazenadas adicionalmente.

Em seguida, um nível de mipmap apropriado é selecionado para cada pixel (quanto maior o tamanho da “imagem” do pixel na textura, menor será o mipmap). Além disso, a média dos valores no mipmap pode ser calculada bilinearmente ou usando o método do vizinho mais próximo (conforme descrito acima) e a filtragem adicional ocorre entre os níveis adjacentes do mipmap. Este tipo de filtragem é denominado trilinear. Fornece resultados de altíssima qualidade e é amplamente utilizado na prática.


Figura 9. Níveis de mapa mip

Porém, o problema com a imagem “alongada” do pixel na textura permanece. É exatamente por isso que nosso quadro parece muito confuso à distância.

Filtragem anisotrópica

A filtragem anisotrópica é um processo de filtragem de textura que leva especificamente em consideração o caso de uma imagem de pixel alongada em uma textura. Na verdade, em vez de um filtro quadrado (como na filtragem bilinear), é utilizado um alongado, que permite selecionar melhor a cor desejada para um pixel da tela. Essa filtragem é usada em conjunto com o mapeamento mip e produz resultados de altíssima qualidade. Porém, também existem desvantagens: a implementação da filtragem anisotrópica é bastante complexa e quando habilitada, a velocidade de extração cai significativamente. A filtragem anisotrópica é suportada pelas últimas gerações de GPUs NVidia e ATI. Além disso, com diferentes níveis de anisotropia - quanto maior esse nível, mais imagens de pixel “alongadas” podem ser processadas corretamente e melhor será a qualidade.

Comparação de filtros

O resultado é o seguinte: para suprimir artefatos de aliasing de textura, vários métodos de filtragem são suportados em hardware, diferindo em qualidade e velocidade. O método de filtragem mais simples é o método do vizinho mais próximo (que na verdade não combate artefatos, mas simplesmente preenche os pixels). Hoje em dia, a filtragem bilinear juntamente com o mapeamento mip ou a filtragem trilinear é a mais usada. Recentemente, as GPUs começaram a suportar o modo de filtragem da mais alta qualidade - filtragem anisotrópica.

Mapeamento de relevo

O mapeamento de relevo é um tipo de efeito gráfico especial projetado para criar a impressão de superfícies “ásperas” ou acidentadas. Recentemente, o uso do mapeamento de relevo tornou-se quase um padrão para aplicações de jogos.

A ideia principal por trás do mapeamento de relevo é usar texturas para controlar como a luz interage com a superfície de um objeto. Isso permite adicionar pequenos detalhes sem aumentar o número de triângulos. Na natureza, distinguimos pequenas superfícies irregulares pelas sombras: qualquer saliência será clara de um lado e escura do outro. Na verdade, o olho pode não ser capaz de detectar alterações na forma da superfície. Este efeito é usado na tecnologia de mapeamento de relevo. Uma ou mais texturas adicionais são aplicadas à superfície do objeto e usadas para calcular a iluminação dos pontos do objeto. Aqueles. a superfície do objeto não muda em nada, apenas é criada a ilusão de irregularidades.

Existem vários métodos de mapeamento de saliências, mas antes de examiná-los, precisamos descobrir como realmente definir saliências na superfície. Conforme mencionado acima, texturas adicionais são usadas para isso e podem ser de diferentes tipos:

Mapa normal. Neste caso, cada pixel da textura adicional armazena um vetor perpendicular à superfície (normal), codificado como uma cor. Normais são usadas para calcular a iluminação.

Mapa de deslocamento. Um mapa de deslocamento é uma textura em tons de cinza onde cada pixel armazena um deslocamento da superfície original.

Essas texturas são preparadas por designers de modelos 3D junto com geometria e texturas básicas. Existem também programas que permitem obter mapas normais ou de deslocamento automaticamente

Mapeamento de relevo pré-calculado

As texturas, que armazenarão informações sobre a superfície de um objeto, são criadas antecipadamente, antes da etapa de renderização, escurecendo alguns pontos da textura (e portanto a própria superfície) do objeto e destacando outros. A seguir, ao desenhar, é usada a textura usual.

Este método não requer nenhum truque algorítmico durante o desenho, mas, infelizmente, mudanças na iluminação das superfícies não ocorrem quando as posições das fontes de luz ou o movimento do objeto mudam. E sem isso, uma simulação verdadeiramente bem-sucedida de uma superfície irregular não pode ser criada. Métodos semelhantes são usados ​​para partes estáticas da cena, geralmente para arquitetura de níveis, etc.

Mapeamento de relevo usando relevo (mapeamento de relevo em relevo)

Esta tecnologia foi utilizada nos primeiros processadores gráficos (NVidia TNT, TNT2, GeForce). Um mapa de deslocamento é criado para o objeto. O desenho ocorre em duas etapas. Na primeira etapa, o mapa de deslocamento é adicionado a si mesmo pixel por pixel. Neste caso, a segunda cópia é deslocada uma curta distância na direção da fonte de luz. Isso produz o seguinte efeito: valores de diferença positivos são determinados por pixels iluminados, valores negativos por pixels na sombra. Esta informação é usada para alterar a cor dos pixels de textura subjacentes de acordo.

O mapeamento de relevo usando relevo não requer hardware que suporte pixel shaders, mas não funciona bem para irregularidades de superfície relativamente grandes. Além disso, os objetos nem sempre parecem convincentes; isso depende muito do ângulo em que você olha para a superfície.

Mapeamento de colisão de pixels

O mapeamento de pixels é atualmente o auge do desenvolvimento de tais tecnologias. Nesta tecnologia, tudo é calculado da forma mais honesta possível. O pixel shader recebe como entrada um mapa normal, do qual são obtidos os valores normais para cada ponto do objeto. O valor normal é então comparado com a direção da fonte de luz e o valor da cor é calculado.

Esta tecnologia é suportada em equipamentos a partir de placas de vídeo de nível GeForce2.

Assim, vimos como podemos utilizar as peculiaridades da percepção humana do mundo para melhorar a qualidade das imagens criadas pelos jogos 3D. Felizes proprietários da última geração de placas de vídeo NVidia GeForce, ATI Radeon (no entanto, e não apenas as mais recentes) podem brincar de forma independente com alguns de seus efeitos descritos, já que as configurações de de-aliasing e filtragem anisotrópica estão disponíveis nas opções do driver. Esses e outros métodos, que estão além do escopo deste artigo, são implementados com sucesso por desenvolvedores de jogos em novos produtos. Em geral, a vida melhora. Outra coisa vai acontecer!

Filtragem de textura.

A filtragem resolve o problema de determinar a cor de um pixel com base nos texels existentes de uma imagem de textura.

O método mais simples de aplicação de texturas é chamado amostragem pontual(amostragem de ponto único). Sua essência é que para cada pixel que compõe o polígono, um texel é selecionado da imagem de textura mais próxima do centro do ponto de luz. Ocorre um erro porque a cor de um pixel é determinada por vários texels, mas apenas um foi selecionado.

Este método é muito impreciso e o resultado de sua utilização é o aparecimento de irregularidades. Ou seja, sempre que os pixels são maiores em tamanho que os texels, é observado um efeito de cintilação. Este efeito ocorre se parte do polígono estiver suficientemente longe do ponto de observação para que muitos texels sejam sobrepostos no espaço ocupado por um pixel. Observe que se o polígono estiver localizado muito próximo do ponto de observação e os texels forem maiores que os pixels, outro tipo de degradação da qualidade da imagem é observado. Nesse caso, a imagem começa a parecer em blocos. Este efeito ocorre quando a textura pode ser grande o suficiente, mas a limitação na resolução de tela disponível impede que a imagem original seja representada adequadamente.

Segundo método - filtragem bilinear(Filtragem Bi-Linear) consiste na utilização de tecnologia de interpolação. Para determinar os texels que devem ser usados ​​para interpolação, é usada a forma básica do ponto de luz - um círculo. Essencialmente, um círculo é aproximado por 4 texels. A filtragem bilinear é uma técnica para eliminar distorções de imagem (filtragem), como "blocos" de texturas quando ampliadas. Ao girar ou mover lentamente um objeto (aproximando-se/afastando-se), o “salto” de pixels de um lugar para outro pode ser perceptível, ou seja, aparece bloqueio. Para evitar esse efeito, é utilizada a filtragem bilinear, que utiliza uma média ponderada do valor da cor de quatro texels adjacentes para determinar a cor de cada pixel e, como resultado, determina a cor da textura de sobreposição. A cor do pixel resultante é determinada após três operações de mistura: primeiro, as cores de dois pares de texels são misturadas e, em seguida, as duas cores resultantes são misturadas.

A principal desvantagem da filtragem bilinear é que a aproximação é realizada corretamente apenas para polígonos localizados paralelamente à tela ou ponto de observação. Se o polígono for girado em um ângulo (e isso ocorre em 99% dos casos), a aproximação errada será usada, pois uma elipse deve ser aproximada.

Erros de “aliasing de profundidade” surgem do fato de que objetos mais distantes do ponto de vista parecem menores na tela. Se um objeto se move e se afasta do ponto de visualização, a imagem da textura sobreposta ao objeto encolhido torna-se cada vez mais comprimida. Eventualmente, a imagem da textura aplicada ao objeto fica tão comprimida que ocorrem erros de renderização. Esses erros de renderização são especialmente problemáticos em animação, onde tais artefatos de movimento causam cintilação e efeitos de câmera lenta em partes da imagem que deveriam estar estacionárias e estáveis.

Os seguintes retângulos com texturização bilinear podem servir como ilustração do efeito descrito:

Arroz. 13.29. Sombreando um objeto usando o método de filtragem bilinear. O aparecimento de artefatos de "aliasing de profundidade", que resultam na fusão de vários quadrados em um.

Para evitar erros e simular o fato de que objetos distantes parecem menos detalhados do que aqueles mais próximos do ponto de observação, uma técnica conhecida como mapeamento mip. Resumindo, mip-mapping é a sobreposição de texturas com diferentes graus ou níveis de detalhe, quando, dependendo da distância ao ponto de observação, é selecionada uma textura com o detalhe desejado.

Uma textura mip (mapa mip) consiste em um conjunto de imagens pré-filtradas e dimensionadas. Em uma imagem associada a uma camada mip-map, um pixel é representado como a média de quatro pixels da camada anterior em uma resolução mais alta. Conseqüentemente, a imagem associada a cada nível de textura mip é quatro vezes menor em tamanho que o nível anterior do mapa mip.

Arroz. 13h30. Imagens associadas a cada nível do mapa mip da textura ondulada.

Da esquerda para a direita temos os níveis 0, 1, 2 do mapa mip, etc. Quanto menor a imagem fica, mais detalhes são perdidos, até perto do fim, quando nada é visível, exceto um borrão borrado de pixels cinza.

Nível de detalhe, ou simplesmente LOD, é usado para determinar qual nível de mapa mip (ou nível de detalhe) deve ser selecionado para aplicar uma textura a um objeto. LOD deve corresponder ao número de texels sobrepostos por pixel. Por exemplo, se a texturização ocorrer com uma proporção próxima de 1:1, então o LOD será 0, o que significa que será usado o nível do mapa mip com a resolução mais alta. Se 4 texels se sobrepuserem a um pixel, o LOD será 1 e o próximo nível mip com resolução mais baixa será usado. Normalmente, à medida que você se afasta do ponto de observação, o objeto que merece mais atenção tem um valor de LOD mais alto.

Embora a texturização mip resolva o problema de erros de alias de profundidade, seu uso pode fazer com que outros artefatos apareçam. À medida que o objeto se afasta cada vez mais do ponto de observação, ocorre uma transição de um nível baixo do mapa mip para um alto. Quando um objeto está em um estado de transição de um nível do mapa mip para outro, aparece um tipo especial de erro de visualização, conhecido como “mip-banding” - banding ou laminação, ou seja, limites claramente visíveis de transição de um nível do mapa mip para outro.

Arroz. 13h31. A fita retangular consiste em dois triângulos texturizados com uma imagem semelhante a uma onda, onde os artefatos de "faixas mip" são indicados por setas vermelhas.

O problema dos erros de "bandagem mip" é especialmente agudo na animação, devido ao fato de que o olho humano é muito sensível aos deslocamentos e pode facilmente perceber o local de uma transição brusca entre os níveis de filtragem ao se mover em torno de um objeto.

Filtragem trilinear(filtragem trilinear) é um terceiro método que remove artefatos de bandas mip que ocorrem quando a texturização mip é usada. Com a filtragem trilinear, para determinar a cor de um pixel, é obtido o valor médio da cor de oito texels, quatro de duas texturas adjacentes são obtidas e, como resultado de sete operações de mistura, a cor do pixel é determinada. Ao usar a filtragem trilinear, é possível exibir um objeto texturizado com transições suaves de um nível mip para o próximo, o que é conseguido determinando o LOD interpolando dois níveis adjacentes do mapa mip. Resolvendo assim a maioria dos problemas associados à texturização mip e erros devido ao cálculo incorreto da profundidade da cena ("aliasing de profundidade").

Arroz. 13h32. Mapa MIP da pirâmide

Um exemplo de uso de filtragem trilinear é fornecido abaixo. Aqui novamente é usado o mesmo retângulo, texturizado com uma imagem semelhante a uma onda, mas com transições suaves de um nível mip para o próximo devido ao uso de filtragem trilinear. Observe que não há erros de renderização perceptíveis.

Arroz. 13h33. Um retângulo texturizado com uma imagem semelhante a uma onda é renderizado na tela usando texturização mip e filtragem trilinear.

Existem várias maneiras de gerar texturas MIP. Uma maneira é simplesmente prepará-los com antecedência usando pacotes gráficos como o Adobe PhotoShop. Outra maneira é gerar texturas MIP dinamicamente, ou seja, durante a execução do programa. Texturas MIP pré-preparadas significam 30% adicionais de espaço em disco para texturas na instalação básica do jogo, mas permitem métodos mais flexíveis para controlar sua criação e permitem adicionar diferentes efeitos e detalhes adicionais a diferentes níveis de MIP.

Acontece que o mapeamento mip trilinear é o melhor que pode ser?

Claro que não. Percebe-se que o problema não está apenas na proporção dos tamanhos dos pixels e texels, mas também na forma de cada um deles (ou, para ser mais preciso, na proporção das formas).

O método de texturização mip funciona melhor para polígonos que estão diretamente face a face com o ponto de vista. No entanto, polígonos oblíquos em relação ao ponto de observação dobram a textura sobreposta de modo que diferentes tipos e áreas quadradas da imagem da textura possam ser sobrepostas aos pixels. O método de texturização mip não leva isso em consideração e o resultado é que a imagem da textura fica muito borrada, como se os texels errados tivessem sido usados. Para resolver esse problema, você precisa amostrar mais texels que compõem a textura e selecionar esses texels levando em consideração a forma "mapeada" do pixel no espaço de textura. Este método é chamado Filtragem anisotrópica("Filtragem anisotrópica"). A texturização mip normal é chamada de "isotrópica" (isotrópica ou uniforme) porque estamos sempre filtrando regiões quadradas de texels. A filtragem anisotrópica significa que a forma da região texel que usamos muda dependendo das circunstâncias.

A julgar pelas informações em fóruns e artigos na Internet, a ATI está pregando peças na filtragem de textura trilinear na nova GPU X800. No entanto, também há quem defenda ferozmente a ATi. Em geral, essas discussões nos lembram o escândalo relacionado à nVidia há um ano.

O motivo de uma discussão tão acalorada foi um artigo no site alemão Computerbase. Ele mostrou como a ATI usa filtragem de textura trilinear otimizada, muitas vezes chamada de "brilinear" devido à sua mistura de filtragem bilinear e trilinear, nas GPUs Radeon 9600 e X800. A notícia foi realmente impressionante, já que a ATI sempre falou sobre o uso de filtragem trilinear verdadeira.

Mas como é realmente a situação? Isso é uma otimização, um truque ou apenas uma solução inteligente? Para julgar, precisamos nos aprofundar na tecnologia por trás dos vários métodos de filtração. E a primeira parte do artigo será dedicada exatamente a isso, e apresentaremos algumas tecnologias de uma forma bem simplificada para caber em poucas páginas. Então, vamos dar uma olhada nas funções básicas e fundamentais da filtragem.

Haverá uma sequência? Talvez, já que a controvérsia sobre a filtragem brilinear recentemente descoberta nas placas Radeon 9600 e X800 continua. ATi deve receber crédito pelo fato de que a qualidade da imagem dos cartões não sofre visualmente devido a essa filtragem. Pelo menos não temos exemplos que sugiram o contrário. Até agora, a filtração brilinear se manifesta em condições laboratoriais criadas artificialmente. Ao mesmo tempo, o ATi não permite habilitar a filtragem trilinear completa para as placas mencionadas, seja ela adaptativa ou não. Devido à nova filtragem, os valores de desempenho nos testes não mostram todo o potencial do X800, uma vez que os valores de FPS são obtidos após otimização, cujo impacto na velocidade é difícil de avaliar. E a palavra “adaptativo” deixa um gosto amargo. A ATI não nos forneceu nenhuma informação sobre como o driver funciona e afirmou diversas vezes que a placa oferece filtragem trilinear completa. Somente após a referida revelação a ATi admitiu que a filtragem havia sido otimizada. Esperemos que não exista tal “adaptabilidade” em outros locais do driver.

No entanto, os fabricantes estão a avançar lenta mas seguramente para o ponto em que o nível de tolerância será ultrapassado. A “adaptabilidade” ou a definição do aplicativo que está sendo iniciado não permite que programas de benchmark mostrem o desempenho real da placa em jogos. A qualidade da imagem do jogo pode variar de um driver para outro. Os fabricantes são livres para se divertir com o motorista, dependendo do desempenho que o departamento de marketing necessita no momento. Pois bem, o direito do consumidor de saber o que está efectivamente a comprar já não interessa a ninguém aqui. Tudo isto é deixado para os meios de comunicação – deixe-os cumprir a sua missão educativa. E os truques de filtragem que discutimos em nosso artigo são apenas os casos mais famosos. O que mais está escondido da nossa atenção, só podemos adivinhar.

Cada fabricante decide por si mesmo qual nível de qualidade de imagem fornecerá como padrão. No entanto, os fabricantes devem documentar as otimizações que utilizam, especialmente se estiverem ocultas dos benchmarks conhecidos, como no exemplo recente da ATI. A solução é óbvia: dê a oportunidade de desligar as otimizações! Então o consumidor poderá decidir por si mesmo o que é mais importante para ele - mais FPS ou melhor qualidade. Você também não pode contar com a Microsoft como árbitro. Os testes WHQL não medem muitas coisas e podem ser facilmente contornados: você sabe o significado da palavra “responsivo”?

Otimizações de filtragem atualmente conhecidas
ATi nVidia
Trilinear
otimização
R9600
X800
GF FX5xxx
(GF 6xxx)*
Otimização angular
Filtragem anisotrópica
R9xxx
X800
GF6xxx
Adaptativo
Filtragem anisotrópica
R9xxx
X800
GF FX5xxx
GF6xxx
Otimização de palco R9xxx
X800
GF FX5xxx
Otimização de LOD R9xxx
X800(?)

Em geral, essas discussões têm seus benefícios: os compradores e, possivelmente, os clientes OEM começam a ouvir o problema. Não temos dúvidas de que a mania da otimização desenfreada continuará. No entanto, um raio de luz apareceu no reino escuro, o que foi claramente demonstrado pela nVidia com sua otimização trilinear. Esperemos por mais passos semelhantes!



Artigos aleatórios

Acima