A filtragem anisotrópica "mantém a nitidez de uma textura normalmente perdida pelas tentativas da textura do mapa MIP de evitar aliases". O artigo da Wikipedia fornece dicas sobre como pode ser implementado ("sondar a textura (...) para qualquer orientação da anisotropia"), mas não me parece muito claro.
Parece haver várias implementações, conforme sugerido pelos testes ilustrados nas notas da apresentação Modelos aproximados para renderização com base física :
Quais são os cálculos concretos realizados pelas GPUs (modernas) para escolher o nível MIP correto ao usar a filtragem anisotrópica?
texture
gpu
algorithm
implementation
limpe
fonte
fonte
GL_EXT_texture_filter_anisotropic
é muito detalhada. Talvez isso ajude você a entender melhor o processo.Respostas:
O hardware de filtragem de textura coleta várias amostras dos vários níveis do mipmap (a quantidade máxima de amostras é indicada pelo nível de filtragem anisotrópica, embora a quantidade exata de amostras colhidas em uma determinada operação de filtragem dependa da proporção entre os derivados no fragmento. ) Se você projetar o cone visualizando uma superfície em um ângulo oblíquo no espaço da textura, isso resultará em aproximadamente uma projeção de forma oval, mais alongada para ângulos mais oblíquos. Amostras extras são coletadas ao longo do eixo deste oval (dos níveis corretos de mip, para aproveitar a pré-filtragem que eles oferecem) e combinadas para fornecer uma amostra de textura mais nítida.
Outra técnica conhecida como rip-mapping (mencionada no artigo da Wikipedia sobre Mipmapping), que não écomumente encontrado em GPUs contemporâneas, usa pré-filtragem de texturas. Ao contrário dos mips, a textura não é reduzida em escala uniforme, mas usando várias proporções altura-largura (até uma proporção dependente do nível de filtragem anisotrópico escolhido). A variante - ou talvez duas variantes, se usar filtragem trilinear - da textura é então escolhida com base no ângulo da superfície para minimizar a distorção. Os valores de pixel são buscados usando técnicas de filtragem padrão (bilinear ou trilinear). Os mapas de rasgo não são usados em nenhum hardware que eu conheço devido ao seu tamanho proibitivo: enquanto os mipmaps usam armazenamento adicional de 33%, os ripmaps usam 300%. Isso pode ser verificado observando que os requisitos de uso de textura não aumentam ao usar o AF, apenas a largura de banda.
Para uma leitura mais aprofundada, convém dar uma olhada na especificação para a extensão OpenGL EXT_texture_filter_anisotropic . Ele detalha as fórmulas usadas para calcular amostras e como combiná-las ao usar a filtragem anisotrópica.
fonte
Os requisitos da API podem ser encontrados em qualquer uma das especificações ou extensões. Aqui está um: https://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt
Todos os fornecedores de GPU provavelmente se desviam das especificações porque a qualidade de AF costumava fazer parte de muitos parâmetros de referência. E as implementações atuais continuarão evoluindo à medida que novas cargas de trabalho enfatizam as aproximações existentes. Infelizmente, para saber exatamente o que faz, você precisará fazer parte de uma das empresas. Mas você pode avaliar o espectro de possibilidades nos seguintes documentos, listados em ordem crescente de qualidade e custo de implementação:
Citando as especificações:
fonte