Rendu textures procedurales

De Ensiwiki
Aller à : navigation, rechercher

Contexte :

Le texturage, défini largement comme l’application de détails aux objets 3D, est une étape incontournable vers le réalisme et l’immersion dans les mondes virtuels.


Nous distinguons deux familles de techniques principales, les textures images et les textures procédurales.


Les textures images sont générées par des logiciels tiers, permettant des résultats complexes et réalistes. L’accès à ces images par l’application 3D se fait très rapidement, c’est pourquoi cette solution reste appréciée des moteurs temps réels. Par contre, l’espace de stockage nécessaire est important, les textures sont statiques dans le temps, elles présentent un aspect pixelisé quand la caméra se rapproche et sont limitées à une faible région de l’espace.


Les textures procédurales sont obtenues par combinaisons de fonctions mathématiques de paramètres de l’objet (par exemple la position des sommets). Leur édition en est plus complexe et leur évaluation plus longue, mais elles ne sont pas limitées dans l’espace et occupent généralement très peu de place en mémoire. Elles ont aussi l’avantage d’avoir d’autres paramètres que les coordonnées spatiales, et peu donc varier dans le temps.


Copyright Allegorithmic
Copyright Allegorithmic

Objectifs :

Un outil commercial, Substance, développé par Allegorithmic [1], a eu un succès international en cherchant à mélanger le meilleur des deux mondes: un format de textures procédurales, rastérisées au moment du chargement par l’application. En s’inspirant de cet outil, nous voudrions intégrer une pipeline de textures procédurales dans Expressive, un logiciel développé dans notre équipe. Cette pipeline aurait l’avantage sur les logiciels commerciaux de disposer de formats libres et bien connus à travers le langage de shading GLSL.

Travail demandé:

Le projet se découpe en différentes étapes:

- Automatisation de la rastérisation de shaders GLSL dans des textures, de manière optimisée en fonction des caractéristiques des maillages.

- Généralisation de la rastérisation à des textures multi échelles, pour garder cet avantage propre aux textures procédurales.

- Construction d’une stratégie de rendu (mélange de rasterisation et de procédural) lorsque ces textures sont paramêtrées, par exemple pour des textures annimées.

- Génération de cartes UV pour les objets associés à des textures procédurales 3D. Ce dernier point est plus compliqué. Pour le résoudre, nous considérerons d’une part des textures volumétriques, pour lesquelles les coordonnées UV n’ont pas besoin d’être continues. Leur génération correspond à un problème d’optimisation, et peut s’effectuer sur un maillage quelconque. Nous construirons d’autre part des des textures surfaciques en les appliquant à des surfaces implicites.

- Enfin, le projet peut se compléter en proposant un outil d’édition locale des textures en peignant directement sur les objets.

Références

[1] Allegorithmic (https://www.allegorithmic.com/)