L’apposition de texture virtuelle (Streaming Virtual Texturing) (SVT) est un autre moyen de charger des textures dans votre projet à partir du disque. La SVT présente plusieurs avantages, ainsi que certains inconvénients, par rapport au chargement dynamique de texture basé sur le mip existant dans l'Unreal Engine.
Le chargement dynamique de texture basé sur le mip classique effectue une analyse hors ligne de l'utilisation de l’UV de matériau, puis au moment de l'exécution, il décide quels niveaux de Mip d'une texture charger en fonction de la visibilité et de la distance de l'objet. Ce processus peut s'avérer contraignant, car les données de chargement dynamique prises en compte sont les niveaux de mip de la texture complète.
Lors de l'utilisation de textures à haute résolution, le chargement d'un niveau de mip plus élevé d'une texture peut potentiellement entraîner un surcoût important en matière de performance et d’utilisation de mémoire. De plus, le processeur prend des décisions de chargement dynamique de texture basé sur le mip en utilisant la visibilité et l'élimination des objets basées sur le processeur.
La visibilité est plus conservatrice, ce qui signifie que votre système est plus susceptible de charger quelque chose que non, pour éviter qu'un objet n'apparaisse. Ainsi, si même une petite partie de l’objet est visible, l’objet entier est considéré comme étant visible. L'objet chargé, y compris toute texture associée qui peut être nécessaire pour le chargement.
En revanche, le système d’apposition de texture virtuelle ne charge que les parties des textures dont l'UE a besoin pour qu'elle soit visible. Il le fait en divisant tous les niveaux de mip en carrés de petite taille fixe. Le processeur graphique détermine lesquels des carrés visibles sont accessibles par tous les pixels visibles à l'écran. Cela signifie que lorsque l'UE considère qu'un objet est visible, cela est communiqué au CPU qui charge les carrés requis dans un cache de mémoire de GPU. Quelle que soit la taille de la texture, la taille de carré fixe des SVT ne prend en compte que celles qui sont visibles. Le processeur graphique du carré calcule la visibilité à l'aide de tampons de profondeur standard, ce qui fait que les requêtes de SVT ne se produisent que pour les parties visibles qui affectent les pixels.
Activer l’apposition de texture virtuelle
Dans les paramètres du projet sous Moteur > Rendu > Textures virtuelles, cochez la case à côté de Activer la prise en charge de texture virtuelle**.
Cliquez sur l'image pour l'afficher en taille réelle.
Dans la catégorie Éditeur > Importation de texture > Textures virtuelles dans les paramètres du projet, vous pouvez spécifier une taille de texture minimale à prendre en compte pour les textures nouvellement importées pour la SVT. Si une texture respecte cette taille minimale, le paramètre Chargement dynamique de texture virtuelle est activé automatiquement pour cette ressource de texture.
Pour plus d'informations sur ces paramètres, consultez la page Référence d’apposition de texture virtuelle.
Conversion de textures et de matériaux
L'activation de l’apposition de texture virtuelle pour votre projet signifie que les textures et les matériaux nécessitent une certaine configuration pour fonctionner correctement ; la texture doit activer la prise en charge du Chargement dynamique de texture virtuelle, et les échantillons de texture du matériau doivent utiliser un type d'échantillonneur Virtuel au lieu d'un type non virtuel.
Choisissez parmi les options ci-dessous pour configurer correctement vos textures et vos matériaux à utiliser avec la SVT.
Option de menu de conversion
-
Sélectionnez n'importe quelle ressource de texture dans le navigateur de contenu que vous souhaitez convertir pour utiliser la SVT.
-
Faites un clic droit pour ouvrir le menu contextuel et sélectionnez Convertir en texture virtuelle.
Cette option de menu permet également de convertir une texture virtuelle en une texture normale.
-
La fenêtre Convertir en répertorie toutes les textures que vous avez sélectionnées et tout matériau qui y fait référence.
-
Cliquez sur Ok pour démarrer le processus de conversion.
Lors du processus de conversion, les ressources de texture auront le paramètre Chargement dynamique de texture virtuelle activé pour elles dans leurs paramètres d'éditeur de texture. Les matériaux qui font référence aux textures sélectionnées convertissent les nœuds Texture Sample pour utiliser le type d'échantillonneur Virtuel au lieu du type d'échantillonneur non virtuel.
Conversion manuelle
- Ouvrez l’éditeur de texture d’une ressource de texture donnée en double-cliquant dessus dans le navigateur de contenu.
-
Dans le panneau Détails sous Texture, activez Chargement dynamique de texture virtuelle.
L'activation de cette option sans utiliser l'option de menu de conversion ci-dessus invalide immédiatement tout matériau existant qui fait référence à une texture convertie. Vous devez ouvrir tout matériau faisant référence à la texture incriminée et définir le nœud Texture Sample pour utiliser le bon type d'échantillonneur Virtuel. Par exemple, une texture virtuelle doit utiliser un type d'échantillonneur de couleur virtuelle au lieu de couleur.
Lorsque vous rencontrez un nœud Texture Sample qui n'utilise pas le type d'échantillonneur approprié, l’UE affiche un message d'erreur dans le panneau Statistiques et en bas du nœud, comme ceci :
- Le message d'erreur identifie le mauvais type d’échantillonneur pour l'expression VT Texture Sample assignée.
- Remplacez le type d’échantillonneur de Texture Sample par un échantillonneur de type Virtuel.
- L’expression VT Texture Sample effectue un rendu correct, indiqué par le "VT" dans le coin inférieur droit de l'expression.
Lors de l'ajout d'une texture virtuelle à un graphique de matériau, l'UE assigne automatiquement le type d’échantillonneur virtuel. Cependant, si vous créez l'expression d’un paramètre d'échantillon de texture (Texture Sample Parameter) que vous pouvez utiliser dans des instances de matériau, gardez à le matériau de base applique le type d’échantillonneur Virtuel à toutes les instances enfants. N'oubliez pas que vous ne pouvez pas assigner une texture virtuelle à un créneau de paramètre de texture qui n'est pas déjà de type Virtuel dans le matériau de base.
Prise en charge d'UDIM
U-Dimension (ou "UDIM") est une convention d'affectation de noms de texture qui permet de mapper plusieurs images de texture à diverses régions d’UV sur un modèle de maillage statique ou de maillage squelettique. Lors de l'utilisation de la convention d'affectation de noms d'UDIM, l'UE importe des groupes de fichiers images sous la forme d’une ressource unique de texture virtuelle.
La prise en charge de l’apposition de texture virtuelle pour les UDIM est bénéfique pour plusieurs raisons :
- Elle fonctionne avec de nombreuses textures distinctes et plus petites au lieu de textures extrêmement grandes.
- Chaque image UDIM peut avoir une résolution différente permettant d’utiliser des textures virtuelles ayant une densité de pixels non uniforme.
Par exemple, si vous importez une texture virtuelle UDIM composée de quatre fichiers images (deux textures de 2048x2048 et deux textures de 128x128) disposés selon un schéma 2x2, la texture virtuelle échantillonne de manière logique ces images comme une seule texture de 4098x4098. L'UE étire les images plus petites de 128x128 pour remplir la même zone que les images plus grandes de 2048x2048 sans que l'utilisation du disque ou de la mémoire d'exécution soit affectée. Le remplissage d’une résolution de texture de 2048x2048 par des textures plus petites de 128x128 ne consomme aucune mémoire dans ce cas.
Pour plus d'informations sur les flux de travail UDIM, consultez le tutoriel Flux de travail UDIM de The Foundry.
Commencez à utiliser des textures UDIM avec l’apposition de texture virtuelle dans vos propres projets grâce à cette convention d'affectation de noms :
BaseName.####.[Prise en charge de format d'image]
Exemple :
SMaTexture.1001.png
Lorsque l'UE importe une image correspondant à cette convention d'affectation de noms, il analyse le dossier source pour rechercher toute image supplémentaire correspondant au même BaseName suivi d'un numéro de coordonnées différent. Pour chaque image localisée, le numéro à quatre chiffres définit l'emplacement où l'UE doit mapper l'image. L'importation de textures classiques réalise un mappage dans les UV de maillage dans la plage de 0 à 1 ; cependant, l'image UDIM réalise un mappage dans un espace d’UV compris entre 0 et 1 basé sur ses coordonnées d'UV définies.
Lors de l'importation, les textures UDIM sont retournées verticalement, car les coordonnées dans le coin supérieur gauche sont (0,0) lors de l'échantillonnage des UV dans l’Unreal Engine. Les UV des maillages qui utilisent les textures UDIM sont également ajustés lors de l'importation pour fonctionner correctement avec l'orientation de la texture UDIM importée. Ainsi, une fois importés dans le moteur, les UV pour l'échantillonnage des UV comme la texture ci-dessus dans un matériau ressembleraient à ce qui suit :
Performances et coût
Mesurez les performances et le coût de l’apposition de texture virtuelle dans votre projet en utilisant les sections ci-dessous :
Statistiques d’apposition de texture virtuelle
Ouvrez la console à l’aide de la touche backtick (`) et saisissez les commandes suivantes pour activer leurs informations de statistiques :
Utilisez stat virtualtexturing pour afficher les détails sur le coût de la scène d’apposition de texture virtuelle en millisecondes (ms) et les compteurs des tableaux de pages.
Utilisez stat virtualtexturememory pour afficher les compteurs de mémoire pertinents liés à l'utilisation de l’apposition de texture virtuelle dans la scène actuelle.
Visualisation de l’apposition de texture virtuelle de chargement dynamique
Utilisez la commande de console r.VT.Borders 1 pour afficher une grille de visualisation de mip sur des matériaux utilisant des textures virtuelles de chargement dynamique.
Utilisez r.VT.Borders 0 pour masquer la grille lorsque vous n'en avez plus besoin.
Recherches de matériaux et piles
L'échantillonnage d'une texture virtuelle dans vos matériaux est plus coûteux que celui d'une texture traditionnelle. Vous pouvez répartir le coût de l’apposition de texture virtuelle en deux catégories :
- Les recherches se produisent pour chaque texture virtuelle échantillonnée par votre projet dans le graphique de matériau.
- Les piles combinent les textures virtuelles lorsque votre projet utilise les mêmes UV et la même source d'échantillonneur.
Les textures virtuelles sont toujours plus coûteuses que l’échantillon de textures traditionnelles. Il y aura toujours au moins deux récupérations de texture et quelques instructions mathématiques. Cependant, une partie de ce coût est amortie en combinant les piles (jusqu'à 8) pour les échantillons de texture VT qui utilisent les mêmes UV et la même source d’échantillonneur.
Dans ce simple exemple de matériau, l'UE échantillonne deux expressions d'échantillon de texture VT en utilisant les UV par défaut. Une recherche de texture virtuelle est ajoutée pour chaque recherche de cet échantillon de texture et, étant donné que les deux utilisent un seul UV, elles sont combinées en une seule pile de textures virtuelles :
Cependant, si votre projet utilise des UV différents, le coût augmente avec deux récupérations de pile de textures virtuelles :
Le premier exemple utilise un total de trois récupérations de textures : deux recherches et une pile. Étant donné que les échantillons de VT utilisent les mêmes UV, l'UE combine leurs piles pour économiser une récupération de texture. Dans le deuxième exemple, il y a un total de quatre récupérations de textures : deux recherches et deux piles. Les échantillons de texture VT utilisent des UV différents pour la couleur de base et les échantillons de texture de normale, ce qui signifie qu'ils ne peuvent pas être combinés en une seule pile.
Notes supplémentaires sur les matériaux
- L'UE divise les textures virtuelles de chargement dynamique en carrés de taille fixe pour chaque texture, quelle que soit leur taille. Il limite également le mip de résolution minimale par la taille du carré. Dans de nombreux cas, cela ne pose pas de problème, mais les textures très bruitées ou très détaillées peuvent présenter des effets de crénelage ou de moiré en raison de l'absence de mips de faible résolution. Gardez à l’esprit que cela entraîne également des coûts potentiels en termes de performances du processeur graphique, même si cela peut être difficile à mesurer dans la pratique.
Limites
En général, les textures virtuelles sont interchangeables avec les textures normales, à l'exception du fait qu'il existe certaines limitations et des coûts supplémentaires :
- Les dimensions des textures doivent être une puissance de 2, mais l'UE n'exige pas qu'elles soient carrées par nature. Cependant, elles utilisent la mémoire de manière plus efficace dans l’implémentation actuelle.
- La prise en charge du filtrage trilinéaire entre les mips se fait de manière stochastique. Lorsqu'on utilise l'anticrénelage temporel (TAA), il est presque impossible de le distinguer d'un filtrage trilinéaire classique, mais il peut introduire un bruit visible dans certains cas.
- L'UE limite la prise en charge du filtrage anisotrope par la taille du paramètre Bordure du carré. La valeur par défaut de 4 permet un filtrage anisotrope inférieur au filtrage classique pour les textures, mais l'augmentation de cette valeur augmente l'utilisation de la mémoire.
- Le chargement dynamique de VT est réactif par nature, ce qui signifie que le CPU ne sait pas qu'il doit charger un carré de VT donné tant qu'il n’a pas été requis par une image rendue. Ainsi, lorsque la caméra se déplace dans la scène, il peut y avoir des incrustations visibles, en particulier lorsque des carrés de VT de plus haute résolution sont chargés.