Como o Megatexture funciona?

21

Estive pensando em desenvolver um pequeno mecanismo não apenas para desenvolver pequenos jogos experimentais, mas também para servir de base para testar várias técnicas de renderização e coisas assim. No momento, tenho pensado muito em como lidar com texturas e tropeçou na megatextura, mas isso é algo um pouco intrigante. Muito se fala sobre ser melhor do que a abordagem tradicional de ter um monte de texturas e carregá-las conforme necessário, mas como a megatextura evita isso, eu li que elas usam streaming e você pode apenas transmitir bits e partes dela, em vez de carregar cada textura individualmente, mas como isso oferece melhor desempenho e essa não é apenas outra forma de cultivar?

Como amostramos essa textura quando em um sombreador, transmitimos parte dela para a memória e depois trabalhamos nela. Eu vi os vídeos mais recentes de Rage e a textura parecem ótimos, mas é apenas o resultado de grandes artistas ou a tecnologia entra em cena.

Resumindo, como funciona, por que é ótimo e como eu poderia fazer algo semelhante.

Daemoniorum
fonte

Respostas:

15

A idéia básica das mega texturas é o uso de um atlas de textura, no qual você agrupa todas as suas diferentes texturas em uma grande e usa UVs para indexar nesta imagem. São necessárias boas heurísticas para saber qual parte da textura você precisa transmitir do disco com base no que você vê na tela. A vantagem é que você pode ter texturas completamente únicas em todo o mundo do jogo e manter apenas os dados visíveis na RAM. É necessário um bom sistema de streaming e cache para tornar isso acessível.

Recomendo consultar o material desta página para obter informações mais detalhadas sobre uma abordagem: http://silverspaceship.com/src/svt/

Flawe
fonte
4

Verifique o clipmapping para a implementação de hardware SGI preexistente.

Mais recentemente, o Megatexture está sendo usado como um nome pr para Sparse Virtual Texturing (SVT)

O SVT renderiza uma visualização de câmera de pequena resolução, observando qual textura e mapa mip serão necessários. Em seguida, uma rotina de CPU emite carregamentos no sistema de disco para trazer esses fragmentos de textura / mip para a memória (se não estiver na memória) e, em seguida, o fragmento de textura carregado é colocado em uma seção de um atlas de textura grande (geralmente em pedaços, por exemplo, 128x128)

À medida que os pedaços de textura são trazidos, uma textura de redirecionamento (um mapa de página virtual) é atualizada, que pega as texturas exigidas pelos modelos e a redireciona para a parte específica da textura grande onde está realmente armazenada.

DeanoC
fonte
Isso explica um pouco. Fiquei me perguntando, se havia apenas streaming acontecendo, como eles conseguiram transmitir pedaços dessa textura maciça, em um HDD ou em um disco rápido o suficiente para ser útil, o atlas intermediário responde isso muito bem. Agora também posso ver por que é mais eficiente em termos de memória que os métodos tradicionais. Eu vou olhar ao redor para obter mais detalhes sobre SVT (de Flawe ligação parece um bom ponto de partida para que a partir de)
Daemoniorum
1

Você pode pensar no Megatexture como uma textura de "streaming". Uma imagem de textura maciça e totalmente detalhada (simplificando) que é lida como seções dela precisa ser exibida. Tenho certeza de que há muito mais do que isso, como LOD / mipmapping, carregamento e gerenciamento de recursos entre as coisas óbvias.

A Wikipedia possui um artigo .

Nick Bedford
fonte
2
Eu li o artigo antes, mas é um pouco de luz sobre os detalhes. É um pouco difícil obter detalhes reais sobre essa técnica. Gostaria que o ID fizesse um papel ...
Daemoniorum 22/07/10