Filtragem bilinear de textura
A filtragem bilinear calcula a média ponderada dos 4 texels mais próximos do ponto de amostragem. Essa abordagem de filtragem é mais precisa e comum do que a filtragem de ponto mais próximo. Essa abordagem é eficiente porque é implementada em hardware gráfico moderno.
Exemplo
As texturas são sempre endereçadas linearmente de (0.0, 0.0) no canto superior esquerdo a (1.0, 1.0) no canto inferior direito. O endereçamento linear de uma textura é mostrado na ilustração a seguir.
As texturas geralmente são representadas como se fossem compostas de blocos sólidos de cor, mas na verdade é mais correto pensar em texturas da mesma forma que você deve pensar na exibição raster: Cada texel é definido no centro exato de uma célula de grade, conforme mostrado na ilustração a seguir.
Se você perguntar ao amostrador de textura a cor dessa textura nas coordenadas UV (0,375, 0,375), obterá vermelho sólido (255, 0, 0). Isso faz sentido porque o centro da célula texel vermelha está em UV (0,375, 0,375). E se você perguntar ao amostrador a cor da textura em UV (0,25, 0,25)? Isso não é tão fácil, porque o ponto em UV (0,25, 0,25) está no canto exato de 4 texels.
O esquema mais simples é simplesmente fazer com que o amostrador retorne a cor do texel mais próximo; isso é chamado de filtragem de ponto (consulte Amostragem de ponto mais próximo) e geralmente é indesejável devido a resultados granulados ou em blocos. A amostragem de ponto de nossa textura em UV (0,25, 0,25) mostra outro problema sutil com a filtragem do ponto mais próximo: há quatro texels equidistantes do ponto de amostragem, portanto, não há um único texel mais próximo. Um desses quatro texels será escolhido como a cor retornada, mas a seleção depende de como a coordenada é arredondada, o que pode introduzir artefatos de rasgo (consulte o artigo Amostragem de ponto mais próximo no SDK).
Um esquema de filtragem um pouco mais preciso e mais comum é calcular a média ponderada dos 4 texels mais próximos do ponto de amostragem; isso é chamado de filtragem bilinear. O custo computacional extra para filtragem bilinear geralmente é insignificante porque essa rotina é implementada em hardware gráfico moderno. Aqui estão as cores que obtemos em alguns pontos de amostra diferentes usando filtragem bilinear:
UV: (0.5, 0.5)
Esse ponto está na fronteira exata entre os texels vermelho, verde, azul e branco. A cor que o sampler retorna é cinza:
0.25 * (255, 0, 0)
0.25 * (0, 255, 0)
0.25 * (0, 0, 255)
## + 0.25 * (255, 255, 255)
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)
Esse ponto está no ponto médio da fronteira entre texels vermelho e verde. A cor que o amostrador retorna é cinza-amarela (observe que as contribuições dos texels azul e branco são dimensionadas para 0):
0.5 * (255, 0, 0)
0.5 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)
Este é o endereço do texel vermelho, que é a cor retornada (todos os outros texels no cálculo de filtragem são ponderados como 0):
1.0 * (255, 0, 0)
0.0 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (255, 0, 0)
Compare esses cálculos com a ilustração a seguir, que mostra o que acontece se o cálculo de filtragem bilinear for executado em cada endereço de textura na textura 4x4.
Tópicos relacionados