TP5: Insertion d'objets virtuels

Par Mathieu Garon

Introduction

Plusieurs techniques permettent d'utiliser des images pour modifier d'autres images. Par contre, travailler en deux dimensions peut s'avérer difficile pour modéliser un monde en trois dimensions. L'insertion d'objets virtuels permet de modéliser un monde en trois dimensions pour intégrer à une scène un objet complètement virtuel. Le rapport suivant décrit comment modéliser la lumière du vrai monde, pour ensuite la transposer dans un monde virtuel. Finalement, la composition de l'objet 3D dans la scène sera présentée.

Approche

Capture de radiance du monde réel

Pour capturer la lumière, une technique populaire consiste à placer une sphère miroir dans la scène. La sphère réfléchit les rayons de lumières provenant du monde vers la caméra, et connaissant les principes de réflexions il est possible de calculer la provenance de chacun des rayons de lumières. Pour ce faire, il est nécessaire de construire une carte de la lumière que les logiciels de rendu populaires sont en mesure de pouvoir lire. Dans le cas présent, la représentation equirectangulaire est utilisée.

Transformation panoramique


En premier lieu, il est nécessaire d'avoir une image de la sphère d'une résolution convenable (ex 300x300). L'objectif est de générer une image contenant l'intensité de chaque pixel en fonction des coordonnées sphériques de la sphère. Pour ce faire, une image est créée avec l'axe des x en fonction phi avec une largeur de 2pi et l'axe des y correspond à thêta. Ensuite, puisque tous les coordonnés recherchés sont établis, il est nécessaire de les transférer en cartésien avec les formules suivantes:

X = sin(thetas).*cos(phis)
Y = cos(thetas)
Z = -sin(thetas).*sin(phis)

Les coordonnées trouvées sont les vecteurs des rayons provenant du monde sur la sphère. En estimant que les rayons projetés sur la caméra sont orthographiques, il suffit de connaitre la normale sur la sphère de chacun des rayons pour avoir la position du pixel ayant réfléchi le rayon. En définissant un cercle unitaire représenté dans l'image ayant pour centre l'origine, et en définissant que le vecteur d'observation est à (0, 0, 1), nous pouvons calculé le rayon en fonction de la normale :

R = 2*dot(N, V)N - V

De cette fonction, trois équations sont établies soit:

Rx = 2*Nz * Nx
Ry = 2*Nz * Ny
Rz = 2*Nz^2 - 1

Sachant que Nx et Ny correspondent directement à la position sur la sphère avec la projection orthographique de la caméra, il suffit de résoudre le système d'équations pour avoir le résultat suivant:



Capture de la radiance HDR

Pour avoir le maximum d'informations provenant de la sphère, celle-ci doit être mesurée en haute plage dynamique. Sachant que les caméras modernes capturent les images avec 8 bits d'informations par pixels, il est nécessaire de prendre plusieurs images avec des informations différentes de la scène. Par exemple, la vitesse de fermeture de la l'appareil peut être modifié pour capturer les informations de haute intensité lumineuse. Il est donc nécessaire de prendre plusieurs photos de la même scène avec des vitesses de fermeture de l'iris ayant un intervalle quelconque.

Pour mapper les pixels en fonction de la radiance, il faut trouver la fonction g() telle que défini dans l'article de Devebec. Comme le démontre l'article, la fonction dépend du temps d'exposition et de la radiance et se base sur le fait que la scène est statique, donc que la radiance des pixels est toujours la même. Deux concepts importants doivent être implantés, il est nécessaire d'accorder moins d'importance aux valeurs de pixels aux extrémités (0 et 255) et de lisser la fonction pour avoir de meilleurs résultats. Veuillez vous référer à l'article pour les détails d'implantation.

Un point considérablement important à considérer est la gestion des trois canaux de couleurs, un algorithme de balance des blancs peu s'avérer une bonne solution, bien que, tel que présenté dans les sections suivantes, peu ne pas être une solution viable. Ne pas balancer les canaux ne donnera pas un résultat satisfaisant puisque l'information de l'intensité est perdue indépendamment dans chacun d'eux.

Rendu et composition

Lorsque l'image hdr est générée, l'utilisation d'un logiciel comme blender permet de placer des éléments 3D dans un monde virtuel. L'utilisation de la carte equirectangulaire générée précédemment permet de spécifier au logiciel comment projeter les rayons lumineux sur les objets de la scène. Il est donc très important de placer la caméra du monde virtuel approximativement au même endroit que la vraie caméra par rapport à la sphère, sinon l'éclairage n'aura pas l'orientation souhaitée. Ensuite, une scène virtuelle doit être construite à l'endroit ou les ombres seront projetées. En effet, pour simuler les effets d'ombrages, le logiciel de rendu doit connaitre sa position et sa forme, si cette étape est mal appliquée, l'absence d'ombre ou la distorsion de celle-ci va automatiquement enlever le réalisme de la scène final. De plus, l'ajustement de l'intensité de l'illumination de la scène est important puisque nécessairement, elle va affecter le réalisme de la scène. Il s'agit d'un paramètre qui sera estimé à l'oeil dans le cadre de ce projet. Les trois images suivantes sont générées dans le but d'effectuer la composition dans l'image finale, il s'agit des objets avec la reconstruction de la scène, de la reconstruction de la scène sans les objets, et du masque des objets sans la reconstruction de la scène.



Le masque permet d'ajouter seulement les objets, alors que la scène vide permet de calculer les ombrages générés par les objets. La formule suivante est utilisée pour la composition:

composite = mask*scene + ~mask*image - ~mask*(scene - objets)

Résultats

Dans le cadre du projet, trois rendus ont été faits dans le but de tester différents cas. Le premier était simplement un test de rendu avec l'objet cochon trouver sur internet avec les données du TP. Le deuxième est un rendu avec deux sources lumineuses. L'emphase est mise sur le réalisme de la scène en fonction des couleurs de l'éclairage. Comme décrit plus bas, les couleurs chaudes proviennent de la balance des blancs de la caméra, et celle-ci doit être transmisse sur le modèle 3D. Finalement, la photo avec la table est un test avec une géométrie de la scène plus compliqué, et avec deux sources de lumière de couleur différentes, soit le ciel bleu provenant d'une fenêtre qui ne fait pas partie de l'image, et une lampe incandescente. Le résultat est moins réaliste que les autres, les ombres ne sont pas bien définis comme le lit, ce qui insère un doute rapidement chez le spectateur. De plus, les pattes de la tablette ne semble pas être illuminé parfaitement. Leurs clartés provients probablement d'un mauvais positionnement de la caméra virtuel. Le fait que l'ombre du lit n'est pas projeté sur la table est un autre facteur de l'irréalisme de la scène.

Crédits supplémentaires?

Le résultat avec le cochon à susciter beaucoup d'intérêt dans les réseaux sociaux. En effet, pour tester le réalisme de l'image, celle-ci a été publiée en affirmant qu'un vrai cochon avait été acheté. Après plusieurs commentaires comme "Wow trop Cute!!", ou "Je veux venir le garder" il a été nécessaire de dire qu'il s'agissait d'un subterfuge. L'image a été générer dans le but de faire accroire au père d'une amie qui était partie à l'extérieur pour une semaine que le cochonnet avait été acheté durant son absence, dès qu'il a eu accès à un téléphone il a appelé la mère en demandant : "Là.. Le cochon que ta fille a acheté.. C'est vraiment acheté ou c'est juste temporaire?.."

Problèmes rencontrés

Dans la scène du petit cochon devant le foyer, un problème considérable est survenu : la balance des blancs entre la caméra et la photo hdr de la sphère ne correspondait pas. L'image suivante présente le rendu avec la balance des blancs (grey world) et avec la rectification.



Pour contrer cela, la valeur moyenne des canaux a été modifiée manuellement pour se rapprocher de la sphère originale. Il serait intéressant d'automatiser le calcul en fonction des images originales.