Textures procédurales et normal mapping¶
Caution
Obtenir de bons résultats avec de la génération de texture procédurale peut être difficile sans de bonnes bases de math et une bonne dose d’imagination. Générer procéduralement des normales est tout aussi difficile.
Textures procédurales¶
Au lieu d’assigner une couleur par objet, il est possible de calculer la couleur d’un point en fonction de sa position dans l’espace, et même de la normale à la surface !
struct vec3 procedural_texture(struct vec3 position, struct vec3 normal)
Une texture procédurale est donc calculée à la demande, par une fonction.
Il existe une immense variété de méthodes de génération de textures, qui peuvent être composées pour aboutir au résultat escompté. Certaines fonctionnent en 2d, et il faut alors les appliquer sur une surface 3d, alors que d’autres sont capables de travailler directement en 3d.
La plus connue et populaire est certainement le bruit de perlin, mais d’autres alternatives existent. Je vous conseille fortement le site d’Inigo Quilez, qui parle entre autres merveilles de génération procédurale de textures: https://iquilezles.org/www/index.htm (cherchez procedural noises).
Cet article en particulier devrait vous intéresser : https://iquilezles.org/www/setarticles/warp/warp.htm
Normales procédurales¶
En plus de générer une couleur procéduralement pour chaque point, il est également possible de générer une normale.
Deux écoles d’opposent :
la normale peut être calculée analytiquement, en même temps que votre texture procédurale
elle peut également être approximée numériquement, en évaluant plusieurs fois tout ou partie de votre fonction de texture
Il y a une distinction à faire entre la dérivée d’une fonction de bruit, et la dérivée de la surface sur laquelle on applique cette texture de bruit.
En pratique, les deux peuvent être complètement indépendant, et il peut être préférable d’appliquer une perturbation de normale indépendante de la texture.
Normal mapping¶
Attention, le normal mapping est un peu plus lourd en math que la simple application de texture, car il faut effectuer une rotation dans l’espace du vecteur normal de la texture pour l’appliquer sur la face, qui a sa propre normale.
Je ne saurais faire concurence à cet excellent tutoriel, si vous souhaitez vous aventurer dans ce domaine : https://learnopengl.com/Advanced-Lighting/Normal-Mapping
UV Mapping¶
Au lieu de générer une texture dynamiquement avec du code, en fonction du point et de la normale d’intersection, il est également possible d’appliquer une texture 2D sur un objet 3D.
L’UV mapping est une technique omniprésente dans l’industrie, qui permet de faire correspondre à un point sur une surface un point dans une texture.
Cette technique est relativement difficile à mettre en œuvre pour un projet court, à cause de la logistique relativement compliquée du chargement d’image et de modèles, mais mérite tout de même d’être mentionnée.