Comment fonctionne Megatexture?

21

J'ai pensé à développer un petit moteur non seulement pour développer de petits jeux expérimentaux, mais aussi pour servir de base pour tester diverses techniques de rendu et des choses comme ça. En ce moment, j'ai beaucoup réfléchi à la façon de gérer les textures et je suis tombé sur la megatexture, mais c'est quelque chose qui est un peu déroutant. On parle beaucoup de ce que c'est mieux que l'approche traditionnelle d'avoir un tas de textures autour et de les charger selon les besoins, mais comment megatexture évite-t-il cela, j'ai lu qu'ils utilisent le streaming et vous pouvez simplement diffuser des bits et morceaux par opposition à charger chaque texture individuellement, mais comment cela offre-t-il de meilleures performances, et n'est-ce pas juste une autre forme de labourage?

Comment échantillonner une telle texture dans un shader, en diffusons-nous une partie en mémoire, puis travaillons-nous dessus. J'ai vu les dernières vidéos de Rage et la texture a l'air super, mais est-ce juste le résultat de grands artistes ou la technologie entre-t-elle en jeu?

Pour résumer, comment ça marche, pourquoi est-ce génial et comment pourrais-je faire quelque chose de similaire.

Daemoniorum
la source

Réponses:

15

L'idée de base des méga textures est l'utilisation d'un atlas de texture où vous emballez toutes vos différentes textures en une grande et utilisez des UV pour indexer cette image. Une bonne heuristique est nécessaire pour savoir quelle partie de la texture vous devez diffuser à partir du disque en fonction de ce que vous voyez à l'écran. L'avantage est que vous pouvez avoir des textures complètement uniques dans le monde du jeu et ne conserver que les données visibles dans la RAM. Un bon système de streaming et de mise en cache est nécessaire pour rendre cela abordable.

Je recommande de parcourir le matériel de cette page pour des informations plus détaillées sur une approche: http://silverspaceship.com/src/svt/

Flawe
la source
4

Vérifiez le clipmapping pour l'implémentation matérielle SGI préexistante.

Plus récemment, Megatexture est utilisé comme nom pr pour Sparse Virtual Texturing (SVT)

SVT restitue une vue de caméra à petite résolution, en notant quelle texture et mipmap seront nécessaires. Ensuite, une routine CPU émet des charges sur le système de disque pour mettre ces morceaux de texture / mip en mémoire (sinon en mémoire), puis le morceau de texture chargé est placé dans une section d'un grand atlas de texture (généralement en morceaux de 128x128, par exemple)

Au fur et à mesure que des morceaux de texture sont introduits, une texture de redirection (une carte de page virtuelle) est mise à jour qui prend les textures requises par un modèle et le redirige vers la partie particulière de la grande texture où elle est réellement stockée.

DeanoC
la source
Cela explique pas mal. Je me demandais, s'il n'y avait que du streaming en cours, comment ils ont réussi à diffuser des morceaux de cette texture massive, sur un disque dur ou un disque assez rapidement pour être utile, l'atlas intermédiaire répond très bien. De plus, je peux maintenant voir pourquoi la mémoire est plus efficace que les méthodes traditionnelles. Je vais regarder pour plus de détails sur SVT (le lien de Flawe semble être un bon point de départ pour cela)
Daemoniorum
1

Vous pouvez considérer Megatexture comme une sorte de texture "en streaming". Une image de texture massive et entièrement détaillée (simplement) qui est lue car des sections de celle-ci doivent être affichées. Je suis sûr qu'il y a beaucoup plus que cela, comme le LOD / mipmapping, le chargement et la gestion des ressources parmi les choses évidentes.

Wikipedia a un article dessus.

Nick Bedford
la source
2
J'ai déjà lu l'article, mais c'est un peu léger sur les détails. C'est un peu difficile d'obtenir des détails réels sur cette technique. J'aimerais que ID en fasse un papier ...
Daemoniorum