Que sont les textures 3D?

31

Google m'a échoué, je n'ai rien trouvé d'information. Alors peut-être que GameDev peut :).

  • Que sont les textures 3D?
  • Quand sont-ils utilisés?
  • Coûts de performance?
  • Comment sont-ils stockés?

J'ai beaucoup d'idées vagues, mais pas de définition «définitive».

Toute référence à des exemples ou à des didacticiels est appréciée, en particulier dans le rendu de systèmes de particules via des textures 3D.

caviar décéléré
la source
Je ne suis pas sûr que ce que vous demandez soit une chose. Vous voulez dire la cartographie normale et en relief pour simuler la variation de surface sur des zones "plates"?
coderanger
2
Je pense que ce qu'il veut dire ressemble plus à GL_TEXTURE_3D, etc.
Luker
1
Consultez également cette question: comment fonctionne le mappage de texture UVW? (et ses réponses).
George Duckett

Réponses:

34

La texture 3D fonctionne comme une texture régulière. Mais c'est vraiment en 3D. Les textures 2D ont des coords UV, la 3D a UVW (vous avez dû les utiliser correctement). Les coords de texture sont des cubes unitaires (0 - 1, 0 - 1, 0 - 1).

Utilisation possible :

  • effets volumétriques dans les jeux (feu, fumée, rayons lumineux, brouillard réaliste)
  • mise en cache de la lumière pour un éclairage global en temps réel ( CryEngine par exemple)
  • scientifique (IRM, tomodensitométrie sont enregistrés en volumes)

Performance :
Identique à la texture régulière - super rapide (accès à la mémoire le plus rapide en GPU). Mis en cache pour les threads et optimisé pour la situation où les threads proches (pixel shaders) recherchent des valeurs proches.

Peut être lu comme un échantillonnage linéaire ou utilisé (interpolation tri-linéaire native. Interpolation bi-linéaire Eq dans une texture 2D).

Ils sont stockés en mémoire comme un tableau de textures 2D.

Cartographie par mip sur la texture 3D:
entrez la description de l'image ici

Notabene
la source
14

Les textures 3D ou «textures de volume» sont une série de textures normales disposées en tranches, comme un jeu de cartes. Ceux-ci sont utilisés dans le rendu volumétrique qui prend souvent des données du monde réel telles que les scans CT, puis les manipule. Dans les jeux et les graphiques, c'est parfois pour des effets volumétriques comme la fumée où vous échangez la flexibilité d'un système de particules pour le coût fixe et le calcul facile (et facilement parallélisable) d'une texture de volume. Il est vraiment facile dans une texture de volume de trouver les voisins les plus proches, mais cela peut être un problème, c'est un système de particules plus traditionnel composé de points lâches.

En outre, certains objets complexes bénéficient de l'utilisation de textures de volume, telles que l'herbe:

La fumée de Nvidia dans une boîte en est un excellent exemple:

http://www.youtube.com/watch?v=9AS4xV-CK14

De plus, le rendu de la diffusion de la lumière est plus facile lorsque vous avez un volume à rendre

Luther
la source
7

Outre les réponses existantes, j'aime la façon dont les textures 3D peuvent également être créées de manière procédurale (en fait, cela a plus de sens qu'une texture procédurale 2D), comme le bruit et les fractales qui fourniront de bons détails de texture non déformés à toutes les surfaces d'angle sans avoir pour sélectionner un modèle de projection (UV, planaire, cylindrique, sphérique, etc.).

Au lieu d'échantillonner une couche bitmap dans l'espace 3D, vous obtenez une valeur distincte pour chaque point dans l'espace 3D avec un algorithme de base - ce qui vous donne essentiellement une résolution de texture infinie et aucun problème avec les textures étirées sur des polygones inclinés. Ce sont des "textures" 3D ou plutôt un ombrage de surface pour moi ^^

En fait, je suis assez fatigué de tout le tabac à priser de texture bitmap dans le développement de jeux, quand je veux salir un vaisseau spatial, je veux appliquer quelques couches de formules de bruit et ne pas avoir à peindre un bitmap à résolution limitée. Un vieux buff 3D peut rêver, non;)

En ce moment, la pré-cuisson de ces douces solutions de surface de film 3D oldschool en couleurs, bitmaps UV normales et spéculaires est à peu près le seul plaisir que j'obtiens et cela semble ennuyeusement limité. La scène de démonstration (comme toujours) a tendance à (pré) générer des textures procédurales pour la 3D en temps réel, mais il est difficile de trouver de bons outils pour prendre en charge ce flux de travail de la conception à l'exécution. La plupart des approches procédurales des développeurs de jeux semblent concerner la génération de maillages. Vous vous demandez combien le pipeline de shaders à l'aide d'une carte de profondeur / rendu différé pourrait gérer les algues de bruit 3D oldschool?

... plutôt que d'essayer de comprendre comment mapper une image de texture de manière paramétrique sur la surface de votre forme, la nature volumétrique des textures basées sur le bruit vous permet simplement de les évaluer aux emplacements (x, y, z) de votre pixel shader. De cette façon, vous découpez efficacement votre texture dans un matériau solide, ce qui est souvent beaucoup plus simple que d'essayer d'élaborer un mappage paramétrique raisonnable sans distorsion.

Ces types de textures procédurales volumétriques basées sur le bruit sont depuis longtemps les piliers des longs métrages, où les shaders ne nécessitent pas de performances en temps réel ... tous les films à effets spéciaux utilisent aujourd'hui massivement les shaders procéduraux basés sur le bruit ... sur l'utilisation extensive de la fonction de bruit dans les pixel shaders écrits dans des langages tels que Pixar's RenderMan. Avec une bonne implémentation de la fonction de bruit disponible pour une utilisation en temps réel dans les GPU, j'ai hâte de voir certaines des idées visuelles passionnantes des longs métrages incorporées dans la prochaine génération de divertissement interactif sur le bureau et la console. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html

Oskar Duveborn
la source
Lecture très intéressante! J'ai du mal à visualiser ce que vous voulez dire dans votre deuxième paragraphe.
deceleratedcaviar
Je pourrais peut-être faire un diagramme. Ce que je veux dire, c'est qu'au lieu d'échantillonner un bitmap, la couleur (ou tout ce que vous recherchez) est simplement décidée par un algorithme de bruit à la place. De cette façon, il n'y a pas d'interpolation entre les pixels bitmap nécessaires (car vous ne devez pas échantillonner sur une position de pixel 1x1 parfaite) et la résolution devient en théorie infinie. C'est un peu comme calculer réellement l'intérêt pour un taux d'intérêt spécifique au lieu d'utiliser une table de recherche pré-calculée où il y a certaines étapes / intervalles (= résolution bitmap).
Oskar Duveborn
Après avoir lu l'intégralité de l'article référencé. J'ai une bien meilleure compréhension, mais je pense que ref. les images bénéficieraient aux deux parties: l'incertain et le tl; dr. :)
deceleratedcaviar
0

Les motifs de texture 3D sont appliqués aux voxels d'un corps volumétrique de la même manière que les motifs de texture 2D sont appliqués aux pixels d'un polygone 2D. Voici un exemple de texture volumétrique 3D en JavaScript (nécessite WebGL):

http://kirox.de/test/Surface.html

appuyez sur [v], faites pivoter le corps et modifiez le dégradé de la texture générée avec la molette de la souris

huître
la source