Compartilhar via


Filtragem de textura com mapas MIP

Um mipmap é uma sequência de texturas, cada uma das quais é uma representação de resolução progressivamente mais baixa da mesma imagem. A altura e a largura de cada imagem, ou nível, no mipmap são uma potência de dois menor que o nível anterior. Os mipmaps não precisam ser quadrados.

Uma imagem mipmap de alta resolução é usada para objetos próximos ao usuário. Imagens de resolução mais baixa são usadas à medida que o objeto aparece mais distante. O mipmapping melhora a qualidade das texturas renderizadas às custas do uso de mais memória.

O Direct3D representa mipmaps como uma cadeia de superfícies anexadas. A textura de resolução mais alta está no início da cadeia e tem o próximo nível do mipmap como anexo. Por sua vez, esse nível tem um anexo que é o próximo nível no mipmap e assim por diante, até o nível de resolução mais baixo do mipmap.

As ilustrações a seguir mostram um exemplo desses níveis. As texturas de bitmap representam um sinal em um contêiner em um jogo 3D em primeira pessoa. Quando criada como um mipmap, a textura de resolução mais alta é a primeira no conjunto. Cada textura sucessiva no conjunto de mipmap é menor em altura e largura por uma potência de 2. Nesse caso, o mipmap de resolução máxima é de 256 pixels por 256 pixels. A próxima, a textura é 128x128. A última textura da cadeia é 64x64.

Este sinal tem uma distância máxima a partir da qual é visível. Se o usuário começar longe do sinal, o jogo exibirá a menor textura na cadeia de mipmap, que neste caso a textura 64x64.

Ilustração de uma textura 64x64 de um sinal de perigo

À medida que o usuário move o ponto de vista para mais perto do sinal, texturas de resolução progressivamente mais alta na cadeia de mipmap são usadas. A resolução na ilustração a seguir é 128x128.

Ilustração de uma textura 128x128 de um sinal de perigo

A textura de resolução mais alta é usada quando o ponto de vista do usuário está na distância mínima permitida do sinal, conforme mostrado na ilustração a seguir.

Ilustração de uma textura 256x256 de um sinal de perigo

Essa é uma maneira mais eficiente de simular a perspectiva das texturas. Em vez de renderizar uma única textura em muitas resoluções, é mais rápido usar várias texturas em resoluções variadas.

O Direct3D pode avaliar qual textura em um conjunto de mipmap é a resolução mais próxima da saída desejada e pode mapear pixels em seu espaço texel. Se a resolução da imagem final estiver entre as resoluções das texturas no conjunto de mipmaps, o Direct3D poderá examinar texels em ambos os mipmaps e mesclar seus valores de cor.

Para usar mipmaps, seu aplicativo deve criar um conjunto de mipmaps. Os aplicativos aplicam mipmaps selecionando o conjunto de mipmap como a primeira textura no conjunto de texturas atuais. Consulte Mesclagem de texturas.

Em seguida, seu aplicativo deve definir o método de filtragem que o Direct3D usa para exemplos de texels. O método mais rápido de filtragem de mipmap é fazer com que o Direct3D selecione o texel mais próximo. Use o D3DTEXF_POINT valor enumerado para selecionar isso. O Direct3D pode produzir melhores resultados de filtragem se o aplicativo usar o valor enumerado D3DTEXF_LINEAR. Isso seleciona o mipmap mais próximo e, em seguida, calcula uma média ponderada dos texels ao redor do local na textura para a qual o pixel atual é mapeado.

As texturas de mipmap são usadas em cenas 3D para diminuir o tempo necessário para renderizar uma cena. Eles também melhoram o realismo da cena. No entanto, eles geralmente requerem grandes quantidades de memória.

Observação Cada superfície em uma cadeia de mipmap tem dimensões que são metade da superfície anterior na cadeia. Se o mipmap de nível superior tiver dimensões de 256x128, as dimensões do mipmap de segundo nível serão 128x64, o terceiro nível será 64x32 e assim por diante, até 1x1. Você não pode solicitar um número de níveis de mipmap em Levels que fariam com que a largura ou a altura de qualquer mipmap na cadeia fosse menor que 1. No caso simples de uma superfície mipmap de nível superior 4x2, o valor máximo permitido para Levels é três. As dimensões de nível superior são 4x2, as dimensões de segundo nível são 2x1 e as dimensões do terceiro nível são 1x1. Um valor maior que 3 em Níveis resulta em um valor fracionário na altura do mipmap de segundo nível e, portanto, não é permitido.

 

O Direct3D pode executar automaticamente a filtragem de textura mipmap. Os aplicativos podem percorrer manualmente uma cadeia de mipmap para carregar dados de bitmap em cada superfície da cadeia. Muitas vezes, essa é a única razão para atravessar a cadeia. A geração automática de mipmaps no momento da criação da textura aproveita a filtragem de hardware porque o mipmap reside na memória de vídeo.

Filtragem de textura