Dans ce laboratoire, il faut insérer des objets virtuelles de manière réaliste grâce à une carte de radiance capturée à l'aide d'une sphère métallique. Dans les prochaines sections, nous décrivons les différentes étapes de la méthode et nous montrons nos résultats.
La première étape est de prendre des photos d'une sphère métallique à plusieurs expositions. L'appareil dont nous disposons était capable de prendre une série de trois photos à différentes expositions . Ainsi, les étapes sont les suivantes :
Nous prenons trois photos pour chaque carte de radiance HDR voulue. Voici un exemple par scène :
Scène1 | |
---|---|
Scène2 |
Nous rognons chacune des trois photos pour ne garder qu'une zone rectangulaire autour des sphères métalliques.
Nous alignons les sphères en maximisant la corrélation croisée normalisée pour avoir le chevauchement qui nous semble optimal. Nous obtenons les résultats suivants :
Exposition basse | Exposition centrale | Exposition haute | |
---|---|---|---|
Scène1 | |||
Scène2 |
Ensuite, pour composer les trois images en carte de radiance HDR, nous utilisons la méthode décrite dans l'article Debevec 1997. Ainsi, en posant que est l'intensité d'un pixel dans l'image de temps d'exposition , que est la radiance au pixel et que est une fonction inconnue, nous pouvons développer la formule suivante :
Posant que :
Puisque nous avons et , nous pouvons bâtir un système d'équations pour trouver les valeurs de à partir d'un sous-ensemble de pixels dans l'image.
Comme il est conseillé dans l'article Debevec 1997, nous utilisons une régularisation pour s'assurer que la fonction trouvée soit lisse. Nous n'avons qu'à miniser la dérivée seconde de la fonction . Pour se faire, nous introduisons un nouveau paramètre pour contrôler la régularisation.
Comme l'article Debevec 1997 le propose également, nous utilisons une fonction de poids pour pondéré l'importante des pixels. La formule du poids pour une valeur de pixel est la suivante :
Nous pouvons ainsi construire un gros système d'équation pour pixels échantillonnés et le résoudre avec la méthode des moindres carrées. Il est à noter que nous centrons la solution en fixant la valeur de pixel 128 dans le système d'équation. Voici un exemple avec 3 pixels (intensité : , exposition : ) pour les besoins de la démonstration :
En résolvant le système d'équation, nous trouvons . Voici les résultats des courbes de obtenues avec les scènes choisies, pour les trois canaux de couleurs et avec un échantillon de pixels et un :
Scène1 | Scène2 | |
---|---|---|
Canal rouge | ||
Canal vert | ||
Canal bleu |
Discussion : Même si nous voyons un peu de défauts dans les courbes de la scène 2, le résultat est impressionnant et nous voyons que dans l'ensemble, la contrainte supplémentaire de lissage fonctionne.
Finalement, nous pouvons assembler l'information de en une courbe de radiance avec l'équation suivante, tirée de l'article Debevec 1997 . est le nombre de photos, ici 3:
Le résultat, enregistré en HDR, peut être lu avec un logiciel comme LuminanceHDR. Nous obtenons les résultats suivants :
Scène1 | |
---|---|
Scène2 |
Dans cette partie, il faut préparer la scène au rendu avec Blender. Il suffit de placer les plans virtuels en accord avec la perspective des plans réels. Une fois que c'est fait, il faut placer les objets sur ce plan et lancer le rendu. Voici des exemples pour les deux scènes. Dans la première scène, nous avons essayé plusieurs matériaux. Nous en parlons brièvement dans la discussion de la prochaine section. Dans la deuxième scène, nous avons mis une texture de lune (source) pour la sphère et nous avons utilisé un plan miroir supplémentaire (Glossy BRDF) pour modéliser l'effet du vrai miroir.
Scène1 | |
---|---|
Scène2 |
La dernière étape consiste à fusionner le rendu, l'image de fond et les ombres pour composer l'image finale . Pour ce faire, nous avons besoin du rendu de tous les objets , de la scène sans objet , du masque des objets , ainsi que de l'image de fond . Nous utilisons la formule simple de l'article Debevec 1998 avec un paramètre pour contrôler la force des ombres :
Scène1, exposition
Génération HDR : code/hdr.py o 30.0 scene1
Composition : python code/composition.py 3.0 scene1
R | |
---|---|
E | |
M | |
I |
Discussion : Mis-à-part les bords du plan que nous avons eu bien du mal à supprimer, le résultat est impréssionnant. Certains objets sont plus réalistes que d'autres, comme le lapin et le singe, tandis que d'autre semble vraiment virtuelles, comme la teillère. Or, nous ne croyons pas à la teillère principalement à cause du modèle 3D imparfait. Les ombres sont très bonnes et nous trompent un peu. Il est intéressant de voir que nous sommes même capable d'avoir une ombre de couleur pour un objet transparent et coloré comme le lapin.
code/hdr.py o 30.0 scene2
python code/composition.py 0.7 scene2
R | |
---|---|
E | |
M | |
I |
Discussion : Le résultat est vraiment impresionnant. Non-seulement les ombres sont bien modélisées sur la main, mais nous pouvons voir la réplique de l'objet et de l'ombre dans le miroir à une position réaliste. Pour avoir un meilleur résultat dans le miroir, nous avons utilisé deux astuces. Nous avons ajouté une sphère pour le masque à la position trouvée grâce au rendu 3D. Ainsi, nous obtenons les ombres grâce au rendu et une lune parfaite grâce au masque augmentée. Puisque le focus était à l'avant plan dans l'image originale, nous avons aussi ajouté un peu de flou gaussien () sur la lune du miroir pour rendre le montage plus crédible.