---
# System prepended metadata

title: Synthèse d'image (temps réel)
tags: [' ISIM', Image]

---

---
title: Synthèse d'image (temps réel)
date: 10-02-2020
tags: Image, ISIM
---

# [ISIM] Synthèse d'image (temps réel)

Principe général:
* modélisation des objets dans un repère local
* modélisation des objets dans un repère global
* projection de la scène sur le plan image

Plusieurs problèmes:
* savoir si un polygone est visible ou pas
* objets cachés ou partiellement cachés ?
* objets hors champs ou partiellement hors du champs

Pour déterminer les faces non visibles, on peut le faire en fonction de la normale, qui indique l'orientation du polygone dans l'espace. Si le produit scalaire entre le vecteur normal à la surface et le vecteur de l'axe optique est positif, bye bye le polygone.

Pour déterminer les objets partiellement cachés, on trie les objets par rapport à la distance à la caméra. On commence ensuite par le premier, puis le second, ... Pour chacun, on ne calcule que pour les pixels qui n'ont pas été remplis par un précédent objet.

## BSP

Pour pouvoir trier correctement les objets (problèmes relativement complexes, les surfaces peuvent se "chevaucher"), on peut utiliser un arbre BSP (Binary Space Partitionning Tree). La construction est loin d'être évidente:
* doit être reconstruite à chaque changement de point de vue
* l'arbre doit être équilibré
* si on équilibre trop l'arbre, il va falloir "couper" les polygones (intersections), et celui-ci va croître

## Z-Buffer

Technique plus simple pour déterminer les objets cachés: **z-buffer**. Au lieu de simplement retenir que l'on a "peint" un pixel, et ne pas le repeindre, on stocke aussi l'information de la profondeur, et on change sa valeur si la nouvelle profondeur est inférieur.
Cet algorithme est beaucoup plus simple, mais moins efficace que le BSP.
Pose aussi des problèmes de précisions: si deux objets sont très proches, les problèmes d'arrondis sur les flottants peuvent poser des problèmes de rendu.

**Objets transparents** Pour gérer les objets transparents, on "mixe" la couleur contenu dans le z-buffer, mais on ne met pas à jour la profondeur afin de permettre aux objets derrières de s'afficher.
