TP5: Insertion d'objets virtuels, par Louis Bourdages

Introduction et fonctionnement

Le but du TP5 est d'insérer des objets virtuels dans une photo. On prend plusieurs photos à différents niveaux d'exposition d'un plan avec une sphère métallique réfléchissante dessus, de même qu'une photo sans sphère correctement exposée.

Une fois ces étapes effectuées, le plan sur lequel on a placé la sphère est modélisé en 3D, de même que des objets virtuels. Plusieurs rendus sont générés avec la carte de radiance, puis les rendus sont combinés afin de produire une image dans laquelle les objets virtuels ont été insérés.


Implémentation

Le calcul de la fonction inverse du capteur est assez simple conceptuellement. Un examen des mathématiques impliquées nous apprend que la fonction inverse g va comme suit: g(Zij) = ln(Ei) + ln(tj) (où Z représente les valeurs des pixels, E les radiances pour chaque pixel et t le temps d'exposition pour chaque photo). On assume aussi que la double dérivée de la fonction est nulle. On peut donc bâtir un système d'équations (une équation pour chaque pixel) et résoudre le système avec la méthode des moindres carrés. On utilise les images des sphères métalliques comme source de pixels, en échantillonant régulièrement (1 pixel sur 7 en X et en Y) afin de ne pas surcharger l'ordinateur.

Une fois g connue, on peut générer une image à haute plage dynamique à partir des images des sphères métalliques. Cette image représente la carte de radiance. On passe chacune des images dans g, puis on soustrait, pour chaque image, le logarithme du temps d'exposition (ce qui les met sur un pied d'égalité, en quelque sorte). On fait ensuite la somme de toutes ces valeurs. La somme est pondérée avec la fonction W, qui vaut 0 à l'origine, croît linéairement jusqu'à 127.5 et décroît linéairement jusqu'à 255 où elle vaut encore zéro. Cette fonction permet de donner une plus grande valeur aux pixels dans le milieu de la plage de valeurs de chacune des images. En effet, comme ils sont dans la zone "confortable" du capteur, il y a moins d'erreur sur leur valeur (en particulier, il est impossible que le capteur ait saturé).


Note: cette image a été transformée avec la fonction tonemap.

La carte de radiance doit être ensuite convertie du format "image d'une sphère" vers le format "latitude-longitude". Pour ce faire, on génère deux grilles représentant les angles thêta et phi. On convertit ensuite les angles en coordonnées X,Y et Z, et on utilise ces valeurs afin de calculer la source de la lumière avec les équations de réflexion (selon les vecteurs normaux de la sphère). Il suffit ensuite d'interpoler les valeurs et le tour est joué.


Note: cette image a été transformée avec la fonction tonemap.

On modélise ensuite le plan dans un logiciel de modélisation 3D. On ajoute des objets virtuels par dessus, et on procède au rendu en utilisant la carte de radiance en mode lat-lon comme source de lumière. Plusieurs rendus sont effectués: un avec le plan et les objets, un avec le plan sans objets, et un masque représentant quels pixels appartiennent aux objets virtuels.

Les différentes images sont ensuite combinées par dessus l'arrière plan afin de créer l'image finale. Chacune contribue une chose en particulier: l'arrière-plan, les objets et les ombres et reflets sur le plan. Le processus a été illustré sous forme graphique:


Note: cette image a été transformée avec la fonction tonemap.


Résultats

Pour cette image, les objets fournis avec l'énoncé ont été utilisés. Ma partie préférée est le fait que la sphère de métal soit identique à la photo de la sphère elle-même, hormis le dragon, naturellement. Les ombres se comportent de manière très naturelle: elles sont orientées dans le bon sens. Le plan a été modélisé avec un matériau très légèrement réfléchissant, de manière similaire à la table réelle.

On peut cependant voir (en particulier dans la bouilloire) une démarcation entre une zone plus foncée et une autre plus pâle. Cela est dû au facteur c qui sert à pondérer les effets d'ombres en utilisant une plus ou moins grande proportion de l'image du plan; le mettre à une valeur plus grande que 1 a pour effet d'assombrir les objets eux-mêmes. Cela était toutefois nécessaire afin que les ombres soient assez visibles (autrement, les objets ont l'air de flotter). On peut aussi voir que le plan n'est pas aligné parfaitement avec le plan de la table: j'avais assumé qu'on ne le verrait pas et que la différence serait minime. Cette problématique sera par contre abordée dans la prochaine image.

Pour cette image, j'ai utilisé un modèle 3D d'une chèvre, un modèle 3D de mon frère qu'il a fait lui-même avec un scanner 3D et un modèle d'une plante. J'ai essayé de simuler du verre dépoli comme matériau (celui utilisé pour faire des trophés en verre, par exemple). Cela a été accompli en utilisant un shader mixte composé d'une proportion de verre de couleur verte de même qu'une proportion de matériau mat de couleur blanche (en utilisant un ratio de 1:0.004). Le moteur de rendu simule donc la réfraction et la transmission de la lumière à l'intérieur du matériau, mais limite les réflexions.

On peut encore voir sur le t-shirt une démarcation, causée par le même phénomène. On remarque de plus que le bord du plan, représenté par cette démarcation, n'est pas bien aligné avec le bord de la table; il l'était toutefois parfaitement (à toutes fins pratiques) dans Blender. Il y a donc potentiellement une différence entre le rendu et la vue de la caméra dans l'éditeur dans Blender; cette différence serait à investiguer.