Textures stochastiques procédurales dans Unity

Avez-vous déjà essayé d'utiliser des textures en mosaïque pour couvrir de grandes surfaces ou ajouter des détails à petite échelle à vos maillages ? Si c'est le cas, vous êtes probablement familier avec le modèle de répétition visible qui apparaît rapidement avec des valeurs de tuilage plus élevées. Chez Unity Labs, nous avons développé une nouvelle technique de texturation qui évite ce problème, la texturation stochastique procédurale.
Les textures tuilables sont un outil utile pour ajouter des détails à vos scènes 3D. Cependant, lorsque vous souhaitez texturer de grandes zones ou obtenir des surfaces très détaillées à l'aide de textures et de cartes de détails, les motifs de tuilage deviennent visibles. Cet effet est illustré dans la partie gauche de l'image suivante. En règle générale, la réduction des motifs de répétition nécessite des textures plus grandes ou la dissimulation de la répétition visible par des objets supplémentaires. Dans cet article de blog, nous proposons un plugin qui résout ce problème pour les textures aux apparences stochastiques, telles que la rouille, la mousse, l'écorce, etc. Son impact est illustré dans la partie droite de l'image suivante.

Téléchargez le plugin ici.
Étant donné une texture d'entrée, le plugin génère de manière procédurale une texture infinie qui correspond à l'apparence de l'entrée. Pour ce faire, nous nous appuyons sur une fonction de mélange de textures de pointe qui opère sur une version modifiée de la texture d'entrée, ce qui ne nécessite que trois échantillons de texture par fragment, et en récupérant une petite table de consultation. Puisque le plugin évite la nécessité d'un carrelage, il permet de couvrir de grandes surfaces avec des textures plus petites et des niveaux de détail plus élevés sans artefacts de répétition.
Le plugin fournit une variante du shader Standard, qui est inclus dans un package Unity. Une fois le paquet importé, sélectionnez le shader StandardStochastic pour votre matériau. L'interface est la même que celle du shader Standard, avec l'ajout de deux nouveaux contrôles en haut, correspondant aux deux étapes de configuration requises :


Le menu Stochastic Inputs vous permet de spécifier sur quelles textures d'entrée vous souhaitez activer notre technique (elle peut être réglée sur Everything, ou sur des textures spécifiques, par exemple l'albédo et/ou la carte normale).
Le bouton Appliquer pré-calcule les données pour les entrées stochastiques sélectionnées et met à jour le matériel, terminant ainsi le processus. Pour chaque texture d'entrée, cette étape génère deux textures intermédiaires situées dans le même dossier.
Quelques remarques supplémentaires :
- Étant donné que les textures intermédiaires existantes sont chargées lorsqu'elles sautent des temps de génération, toute modification de la texture originale nécessite de les supprimer toutes les deux avant d'appuyer à nouveau sur le bouton "Appliquer" pour forcer leur régénération.
- Lorsque l'on passe de l'ombrage standard à l'ombrage stochastique standard, les paramètres sont transférés dans les deux sens.
- Un nuanceur StandardStochastic (configuration spéculaire) est également fourni pour les matériaux utilisant le flux de travail spéculaire.
Les exemples suivants montrent que le prototype fonctionne avec différents matériaux en utilisant des textures d'entrée de petite taille (256²).



Cette technique n'est compatible qu'avec les textures stochastiques et quasi-stochastiques pouvant être mises en carreaux, telles que les textures ressemblant à du bruit aléatoire lorsqu'elles sont observées de loin et les matériaux d'apparence typiquement naturelle sans formes géométriques précises.

Il s'agit d'un prototype de recherche ; il ne fait pas l'objet d'un développement actif. En tant que tel, nous ne garantissons pas la maintenance ou l'assistance, mais n'hésitez pas à poser des questions et à faire part de vos commentaires sur ce fil de discussion du forum Unity. Nous travaillons actuellement sur une implémentation de ShaderGraph pour les shaders personnalisés et la compatibilité avec les nouveaux pipelines de rendu. Surveillez les mises à jour sur le fil de discussion du forum !
Curieux de savoir comment fonctionne le plugin ? Consultez nos deux documents de recherche récemment publiés sur le sujet, sur lesquels notre plugin s'appuie :
- Papier : Bruit By-Example haute performance utilisant un opérateur de mélange préservant l'histogramme - Eric Heitz et Fabrice Neyret, HPG 2018
- Chapitre technique : Textures stochastiques procédurales par pavage et mélange - Thomas Deliot et Eric Heitz, GPU Zen 2
- Consultez nos autres travaux de recherche sur le site Unity : Publications de Unity Labs
Le code livré avec le plugin comporte des commentaires faisant référence à des sections spécifiques du chapitre technique.
