TP5: HDR et insertion d'objets virtuels

Le but de ce projet est de vous familiariser avec les images à haute plage dynamique (High Dynamic Range ou HDR), l'éclairage à base d'images (Image Based Lighting ou IBL), et de leurs applications. À la fin de ce travail, vous serez en mesure de créer des images HDR à partir d'ensembles d'images à plage dynamique faible (Low Dynamic Range ou LDR) et, aussi, d'ajouter des objets 3D dans les photos en utilisant des techniques d'éclairage à base d'images.

Partie 1: Capturer

On capture les scènes plusieurs fois avec différents temps d'expositions. On ajoute une sphère métallique qui nous permettra de capter toute la lumière dans la scène à l'endroit précis où elle est située. Dans la prochaine étape, nous combinerons les images pour avoir une plus grande plage dynamique de la luminance de la scène.

Partie 2: HDR

Les images conventionnelles utilisent 8 bits par canal de couleur (3x8bits dans RGB) pour stocker la valeur de chaque pixel. Le problème avec cette représentation, c'est que le point le plus brillant ne peut être que 255 fois plus brillant que le point le moins brillant. Cette représentation est très loin de la réalité et est malheureusement dans tous les appareils photo grand public. Pour ajouter à la complexité, les appareils photo n'ont pas une réponse linéaire au facteur de luminance afin de donner des photos plus attirantes à l'oeil.

Avant de combiner nos images avec différentes expositions, il donc faut trouver la fonction de réponse de l'appareil utilisé. On peut l'estimer avec un système d'équations matriciel. On utilise une méthode proposée par Paul Ernest Debevec. Estimer pour tous les pixels d'une image serait trop long, on prend donc quelques centaines de points au hasard pour notre système matriciel. On peut ensuite combiner les images en prenant les pixels qui ne sont ni surexposés (= à 255) ni sous-exposés (= à 0) et appliquer la fonction pour rectifier la courbe.

Puisque que j'ai eu une certaine difficulté à construire par moi même l'image HDR de la sphère, je me suis rabattu sur les fonctions de MergeDebevec inclut dans opencv.

Partie 3: Rendu

Combiner les images

Un truc pour obtenir un bon résultat malgré le fait que Blender ne gère pas la transparence est d'utiliser un mask et une version vide empty seulement avec la surface sur laquelle notre objet repose dans l'image. L'image de fond img et l'image contenant notre objet virtuel et la surface objects. On utilise une valeur c pour changer la force de l'ombrage sans faire un nouveau rendu dans Blender.

c = 2
composite = mask * objects + (1 - mask) * img + (1 - mask) * (objects - empty) * c
        

Résultats

La météo n'était pas de mon côté cette semaine, l'éclairage naturel laisse à désirer. La lampe utilise un fini métallisé très réflectif, on peut d'ailleurs voir que la lampe se réfléchit sur elle même à sa base. On peut voir aussi les éléments de la pièce dans la réflexion, comme le bureau en bois dans la première partie du bras de la lampe. Le dragon utilise un fini mat, on peut voir que c'est la lumière de la fenêtre située derrière lui qui est la source lumineuse dominante.

*Source modèle 3D utilisé pour la lampe

©Jean-Daniel Pearson