# POGL: Second class
# Frame buffer object
![](https://i.imgur.com/HxYPpVQ.png)
![](https://i.imgur.com/LBfzkKw.png)
Quand on veut faire un rendu de l'offscreen rendering:
![](https://i.imgur.com/bIiEf61.png)
Calcul final au dernier moment
- Avantage: ce calcul n'est pas faut pour les points qui ne sont pas visibles
![](https://i.imgur.com/T7A53gr.png)
On va faire un rendu par buffer qui n'est pas visible
- un pour la couleur
- un pour la profondeur
- etc
En tout les points du quadrilateres du rendu on a les couleurs, normales, etc. et on peut en deduire les combinaisons pour le calcul effectif de l'illumination
:::warning
Les combinaisons sont calculees une seule fois pour les points visibles sur un quadrilatere
:::
> C'est utilise dans les jeux videos pour economiser du temps
## Off-screen rendering
On a besoin de pouvoir ecrire pour notre premier rendu similutanement la profondeur, couleur, etc. Pour cela on defini plusieurs variables out dans notre shader (Multi-Render target)
![](https://i.imgur.com/Bpzjhzd.png)
# Depth shadow maps
1. Avant de faire le rendu final, pour savoir quels sont les objets visibles, on fait le rendu depuis la source lumineuse ![](https://i.imgur.com/Dl5WDbI.png)
2. Faire le rendu en tenant compte de parties visibles ou pas depuis la source lumineuse
## Initialise *FBO*
![](https://i.imgur.com/FlT5R26.png)
## Rendu depuis la source lumineuse
![](https://i.imgur.com/euMih06.png)
## Rendu depuis la camera
![](https://i.imgur.com/G7hMbXF.png)
## Vertex shader
![](https://i.imgur.com/nR95DKT.png)
## Fragment shader
![](https://i.imgur.com/N0AlAv8.png)
## Resultats
![](https://i.imgur.com/O4PESdq.png)
On a le z-buffer depuis la source lumineuse
![](https://i.imgur.com/SJxyWHd.png)
> On s'attendait a un super resultat mais la partie pas a l'ombre a mal rendue
*Pourquoi ?*
Quand on fait le rendu, on discretise la scene: peut-etre que quand on verifie un pixel on est trop a droite ou trop a gauche, donc des pixels sont consideres a l'ombre alors qui ne le sont pas.
### Solution: ajout d'un biais
![](https://i.imgur.com/8qgYiRi.png)
:::warning
Ce biais n'est pas facile a fixer car depend de notre scene, sa taille, la taille des objets, etc.
:::
![](https://i.imgur.com/NSaX7iG.png)
> Le lapin profite du soleil avant d'avoir trop chaud
# Second depth shadow map
:::info
Faire le rendu de la scene depuis la lumiere en regardant les faces arrieres des objets
![](https://i.imgur.com/d7vJmDW.png)
:::
> On inverse le backface culling
:::success
On n'a plus besoin du biais
:::
> Le biais est toutefois plus facile a mettre
## Resultats
![](https://i.imgur.com/yUUn9xV.png)
> Il n'y a ni anti-aliasing, ni ombres douces
On n'a plus d'artefacts et on a un rendu temps reel qui fonctionne tres bien.
Pour aller plus loin:
- `sampler2DShadow`/`textureProj()`
- soft shadow map
- etc.
# Rendu final
## Frame buffer objects
On a plusieurs images, a t-1, t et t+1 (par exemple)
- Rendu d'une position dans une texture/un render buffer
- Accumulation dans une texutre (Type `float` sinon les valeurs sont *clampees*) ![](https://i.imgur.com/9hc3D0b.png)
- Copies dans l'image finale
Nous en train de courir vers le lapin, ca donne : ![](https://i.imgur.com/HzQ5d4w.png)
> Au lieu de faire un rendu, on en fait 3
## Post processing
On a un quadrilatere affiche dont on peut modifier la texture comme on souhaite.
### Rendu dans une texture
On deforme l'image
![](https://i.imgur.com/Bs9a2p2.png)
> Notre lapin a trouve des champignons, les a mange mais c'etait des champignons hallucinogenes
# OpenGL
## *Object Picking*
:::info
L'idee: on va faire un rendu intermediaire off-screen, on associe a chaque objet un **identificateurs** dans les FBOs
:::
## Le brouillard
![](https://i.imgur.com/i2YsFIQ.png)
:::info
**Objectif**
Modifier la couleur en fonction de la distance
- choisir la fonction
:::
![](https://i.imgur.com/ZHuXLq2.png)
![](https://i.imgur.com/93OJZuH.png)
> On retrouve notre lapin perdu dans le brouillard
## Moteur de particules
Systemes a base de particules
- Permet de modeliser des elements difficiles a modeliser avec des solides classiques ou des surfaces
- feu
- fumee
- etc
Fonctionnement
- Caracteristiques
- position
- couleur
- taille
- forme
- ...
- Lois
- creation
- destruction
- Regles (Evolution)
- Modifications des caracteristiques
### Le feu
Utilisation de particules
- Creation
- Plusieurs centaines
- Apparaissent dans une zone precise
- Avec une couleur proche du blanc
- Forme
- Point
- Sphere
- Evolution
- Changement de couleur
- Deplacement vers le haut avec perturbations
- Destruction
- Atteint la couleur noir
Evolution: changement de couleur
![](https://i.imgur.com/5g4i3fg.png)
Resultat:
![](https://i.imgur.com/K6WZ6rZ.png)
Si on est flemmards:
- utilisation d'un billboard
- Affichage d'un feu en 2D
### Etinceles/feu d'artifice/explosion
Resultat:
![](https://i.imgur.com/bRfnlXj.png)
C'est les memes regles que pour le feu
![](https://i.imgur.com/gvotV1O.png)
![](https://i.imgur.com/BzTVnde.jpg)
On fait des bulles qui grossissent de plus en plus
![](https://i.imgur.com/oahoC2A.png)
## Billboard
Utilisation d'un Billboard
## Conclusion
Les effets intermediares qu'on peut faire pour le rendu final.