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.