# ISIM - Les textures
# Les textures
- Objectifs
- Ajouter du realisme
- Simplifier la modelisation des secenes
- Simuler l'eclairage
- Applications
- Algorithmes temps reels
- Algorithmes photorealistes
- Types:
- Textures procedurales
- Textures plaquees
- Effet de volume
- Eclairage
# Les couleurs
- Associer une couleur par face
- Effet de volume donee par l'illumination
- Gouraud
- Phong
- Associer une couleur par sommet
- interpolation
- Indiquer les proprietes des materiaux
- diffusion
- specularite
# Les textures plaquees
- "Mapper" un bitmap sur un polygone
- Realise
- Consommation memoire elevee
- Comment plaquer une texture?
- Sur un plan $\to$ facile
- Sur une surface quelconque >
- Trouver une fonction
- Plaquer la texture suivant un projection simple
- Plan
- Sphere
- Cylindre
- Cube
- ...
- *Conformal map*
- Projection:
- planar
- cylindrical
- spherical
- triplanar

- On cree un plan qu'on projette sur le theiere
- On cree un cyclindre qu'on projette sur le theiere
- On cree une sphere qu'on projette sur le theiere
Projections:
- triplanar
- On le projette en fonction de la normale du point qu'on considere
- Permet de dissocier les textures en fonction de l'orientation

:::warning
Pour un personnage (ou objet complexe), on ne trouvera pas de fonction intermediaire.
:::
Association texture $\leftrightarrow$ model
- On decoupe soi-meme sont modele
- Voir quel est le mapping entre le modele decoupe et aplatit et le bitmap qu'on veut mapper

Possible d'avoir un decoupage plus "intelligent".
- *Conformal map*

## Origine du *Bitmap*
- Image (photo)

*Est-ce qu'on peut faire des photos ou des dessins ?*
On peut peindre "comme un artiste" les surfaces 3D

- Resultat d'un rendu (*render to texture*)
- Surfaces reflechissantes

> Ca va ? Pas trop le mal de mer maintenant ?
Dans ce cas on map 6 textures sur la sphere
- Change quand on bouge la camera
- Pour le rendu final on a 6 rendus intermediaires
## "Mapper" un bitmap sur un polygone

- Interpolation dependante du $z$
- Repetition de la texture si non compris entre 0 et 1
### Textures repetitives

*Qu'est-ce qui se passe quand on veut faire un mur de brique ?*
- Motif repetitif
- On prend un motif qu'on duplique
|Avantages|Inconvenients|
|-|-|
|Economise de l'espace|Le motif peut devenir visible|

Pour reduire les inconvenients:
- Prendre des *patches* plus petits
- Prendre des motifs differents

:::warning
Ce n'est qu'une facon de repousser le probleme
:::
## Mipmap
> Si on a notre mur qu'on voit de loin, plein d'artefacts apparaissent
- Le but du MIP est d'eviter la pixelisation lorsqu'on s'eloigne d'une texture
- Le niveau de detail des textures est adapte a la distance de l'objet
- Souvant supporte nativement par les moteurs graphiques

- Lissage
- Mip mapping: niveau de detail (LOD)
- Point sampling: texel le plus proche
- Bilineaire: interpolation sur 4 texels
- Trilineaire: interpolation inter-LOD
- Anisotropique: prise en compte des effets d'angle (32 texels)

# Textures procedurales
- Texture generee
- Avantages:
- Economie de memoire
- Pas de repetition dans le motif
- Possibilite d'avoir une texture 3D
- ...
- Effets classique:
- Damier,
- Rayures,
- ...


> Je vous ai fait une espece de bronze ou je ne-sais-quoi
- Generation de bruit pour simuler l'aspect de certains elements
- Bruit structure

## Bruit de Perlin
:::info
Afin de donner une impression d'organisation, seul un sous enesemble de points est genere aleatoirement. Le reste des points es calcule par interpolation.
:::
Ajout d'autres frequences:
- $bruit(i,x)=p^{(i-1)}.bruit(2^{(i-1)},x)$
- Parametres: pas, persistance et nombre d'octaves
- Resultat:
- Somme de l'ensemble des $bruit(i,x)$

- 1 octave $p=0.5$
- On interpole (interpolation lineaire)
- On prend un autre echantillonage et on interpole avec cette autre matrice $\Leftrightarrow$ 2 tirages aleatoires donc 2$^{eme}$ octave

- 2 octaves $p=0.5$

- 5 octaves $p=0.5$

- 5 octaves $p=0.8$

- 5 octaves $p=0.2$
Applications:
- fumee
- Interpolation du balanc $\to$ noir

- ciel/nuages
- En dessous d'un certain seuil: Interpolation du gris bleu $\to$ bleu
- Au dessus d'un certain seuil: bleu

- bois
- En dessous d'un certain seuil, marron fonce
- En dessous d'un certain seuil, marron clair
- Entre les deux, interpolation

- psycho...

> A force de jouer avec les couleurs j'ai un peu craque
- marbre
- $n = 1-\sqrt{\vert\sin(2\pi v)\vert}$
- Interpolation linaire du gris vers le noir en fonction de $n$

- Generation possible en 3D

# Usage des textures
## *Billboard*
- Element toujours face a l'observateur sur lequel est plaque une texture
- Permet de simuler un objet/phenomene complique simplement a l'aide d'une texture:
- Arbre
- Feu
- ...

# Environnement
::info
On peut s'enfermer dans un objet pour avoir notre environnement
:::
- *Equirectangular*
- Une seule texture pour l'ensemble de l'environnement
- *Cubemap*
- *Skybox*
- On enferme notre personnage dans un cube
- Meme resolution pour tous les points
- Mettre 6 cameras qui prennent $90^o$ dans une direction



> In-theiere stellar
# Texture particuliere
## Objets transparents
- Rendu type *raytracing*
- Loi de Snell-Descartes
- Rendu par projection *openGL*
- Pas de deviation de rayon
- Rend tous les objets qui ne sont pas transparents
- On verrouille le z-buffer en ecriture avant de dessiner tous les objets transparents
- Objets transparents: melanger la couleur de ce qui a deja ete dessine avec l'objet transparent
# Textures
## Effet de volume
- Perturbation des normales
- *Bump mapping* (Blinn)
- Permet de faire apparaitre des variation sur la surface


> Realise avec blender
> (C'est une mure en haut a droite)
*Comment voir que c'est bien juste la perturbation de normale ?*
:::success
Si on trace les contour, on voit bien qu'ils sont lissent et qu'ils ne vont pas dans les creux de la mure.
:::

Pour aller plus loin:
- Parallax mapping
- Relief mapping
## Ameliorations
:::info
La texture permet d'ajouter du realisme et evite de modeliser les details d'une surface. Toutefois le resultat est un peu plat.

:::
Initialement, on plaque un *bitmap*

- Ne pas considerer seulement le *bitmap*
- Ajout d'informations:
### 1. Deformations locales
- Height map
- Carte d'elevation
- Normales deduites en faisant une derivee partielle
- Normal map
- Diminue le niveau de details (polygones)
- Stocke dans une image


*Bitmap*:

*Bitmap + bump mapping*:

- Tache d'illumination a disparue
### 2. Proprietes locales
Ex: specularite

*Bitmap + bump mapping +* modifications speculaires

## Conclusions
- Participe au realimse
- Permet la simplification des modeles
- Permet de simuler certains objets/phenomenes difficiles