TP5: Insertion d'objets virtuels

Capturer la carte de radiance en haute plage dynamique

À cette étape, on doit d'abord collecter des données pour ensuite pouvoir créer cette carte de radiance. On prend d'abord plusieurs photos de notre scène contenant une boule sphérique miroir avec des expositions différentes. Ici, j'ai utilisé le mode "auto exposure bracketing" qui permet de faire cela automatiquement. J'ai aussi utilisé un trépied question de ne pas trop bouger. L'ISO était à 100 pour minimiser le grain. Les temps d'exposition dans l'ordre sont : 1.6, 6, 1 et 1/4, 1, 1/15 secondes.


Sans oublier de prendre une photo de la scène sans notre boule métallique.

Puis, on rogne nos images autour des sphères pour obtenir un résultat semblable à ceux-ci:

On peut maintenant construire une carte de radiance HDR à partir de nos différentes expositions LDR. On peut résoudre g dans l'équation suivante en supposant que g est lisse et que le temps d'exposition de chaque image nous donne de l'informations sur certains pixels seulement (ceux qui sont bien éclairés à cette exposition):

g(Zij) = ln(Ei) + ln(tj)

On utilise une fonction qui donne un poids plus important lorsque les pixels sont au centre de la plage (0 à 255). C'est ce qui permet d'utiliser seulement les pixels qui sont "beaux" à une exposition particulière. Finalement, l'équation suivante nous permet de trouver la valeur HDR de chaque pixel (en fait le log) :

où w est notre fonction de poids, g la courbe trouvée auparavant, delta t le temps d'exposition et Z les images. Plus particulièrement, le w utilisé est une fonction "triangle", c'est-à-dire une droite qui augmente jusqu'à la moitié de la plage et qui décroît ensuite.

Appliquer une transformation panoramique à cette image

Maintenant qu'on a cette image HDR de notre sphère, il ne reste qu'à la transformer en carte de latitude-longitude pour pouvoir l'importer dans Blender (le logiciel de rendu 3D que nous utiliserons après). Pour ce faire, on crée une image finale qui est de la même hauteur, mais deux fois plus large. Puis, pour chaque pixel de cette image vide, on trouve l'endroit correspondant dans notre image de sphère et on interpole. Pour ce faire, on se crée d'abord une meshgrid de theta et phi (sachant que leur variation est de 0 à pi et de 0 à 2pi). Puis, on calcul les coordonnées x, y, z correspondant à chaque theta/phi dans l'espace 3D. Finalement, on converti en coordonnées images 2D. Les résultats sont les suivants:

Effectuer le rendu d'objets artificiels dans une photo en utilisant cette carte de radiance panoramique

La dernière étape mais non la moindre: insérer les objets! On commence par modéliser la scène en insérant notre photo de scène vide comme arrière plan. On doit modéliser au moins le plan sur lequel on veut insérer des objets. On fait cela en entrant environ les mesures de la scène et les propriétés de la caméra (i.e. longueur focal). Puis, on s'amuse à bouger notre plan avec des rotations, ajustements de taille et des translations. Par la suite, on ajoute les objets en les positionnant en trois dimensions sur notre plan. Ensuite, on ajoute notre carte latitude/longitude HDR comme éclairage de la scène. Maintenant, on ajoute nos objets et prenant bien soin de les aligner sur notre plan. Un fois toutes ces étapes réalisées, on peut faire "RENDER" et regarder nos modèles apparaître sous nos yeux ébahis. Voici les résultats:

Bien évidemment, ce n'est pas terminé! On doit faire la même chose mais en retirant les objets, puis faire un masque qui nous permettra d'aller chercher seulement les objets de notre modélisation. Voici les scènes sans objet et nos masques :

Pour terminer, on effectue une composition par rendu différentiel. Cela est fait en appliquant une simple équation sur chaque pixel:

composite = M.*R + (1-M).*I + (1-M).*(R-E).*c

où M est le masque, R le rendu, E le rendu sans objet et c une constante qui module l'ajout des effets d'illuminations des objets insérés. Voici mes deux résultats finaux, le premier contenant les mêmes objets que l'exemple fourni avec les mêmes matériaux et le deuxième contenant plusieurs modèles trouvés sur internet avec une texture de vitre teintée noire et une texture qui représente de la porcelaine blanche (surface diffuse).

Je trouve les résultats assez bien réussis, malgré les quelques détails qui peuvent nous accrocher l'oeil.

Dans le premier résultat, la photo était prise d'assez près ce qui offrait peu d'espace pour ajouter les objets près de l'endroit où la sphère était positionnée. Ainsi, les objets plus loin du centre de la tuile semblent mal éclairés considérant l'éclairage des tuiles. Particulièrement la théière, qui est trop foncée si l'on se fie au fond qui contient un reflet assez pâle. Il faut aussi mentionner que seulement la tuile noir a été modélisée et que les tuiles plus pâles autour auraient pu affecter le rendu en réalité. En effet, dans le lapin on devrait probablement retrouver des reflets pâles de couleur peau (couleur des tuiles pâles).

Pour ce qui est du deuxième résultat, les ombres sont assez bien réussies. Si les modèles 3D avaient été un peu plus réalistes et que j'avais un peu baissé l'éclairage lors du rendu, je crois qu'on aurait pu être confondu. L'éclairage semble trop fort surtout sur les tasses. Cependant, pour obtenir une image avec autant de pixel, le rendu a pris quelques heures à être calculé et je n'avais pas le temps ou la patience de recommencer en cette merveilleuse fin de session.

Frédéric Boutin