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.
Réponses:
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 :
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:
la source
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
la source
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?
la source
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
la source