Blender logoJ'ai eu besoin de visualiser des surfaces naturelles (bois, champs) dans une vidéo prise par un drone afin de se faire une idée de leur étendue. Au départ je pensais le faire avec Kdenlive mais l'application Blender est la plus adaptée pour cette tâche avec son outil "Motion Tracking".
Site officiel : https://www.blender.org/
Je détaille ici le process permettant d'incruster une objet avec Blender 4.0 car c'est celui dont j'aurai besoin pour afficher mes surfaces.
J'ai laissé volontairement l'interface en anglais pour qu'on ait les termes exacts des différents paramètres qu'on retrouve majoritairement sur Internet.

Sources intéressantes :

blender tracking 01

 

I- Espace de travail "Motion tracking" dans Blender

  1. Ouvrir Blender normalement.
  2. Appuyer sur "+" (Add Workspace) en bout de ligne des menus en haut vers la droite.
  3. Choisir "VFX" -> "Motion Tracking".

 

II- Importation et réglages de la vidéo

  1. On clique sur le bouton "Open" vers le milieu de l'écran et on choisit la vidéo qui apparaît sur l'écran (1). Dans l'exemple retenu, la vidéo fait 25 Mo.
  2. On regarde les caractéristiques de cette vidéo (résolution et le nombre d'images par seconde "fps") (2) :

  3. Il faut que Blender adopte le même "fps" (ici 30) en le réglant via l'onglet dans le colonne de droite en forme de Polaroïd, "Output properties" (3) et le paramètre "Frame Rate" (4) :


  4. Dans les outils de tracking (colonne de gauche), on coupe les images qui ne nous intéressent pas en cliquant sur le bouton "Set Scene Frames" (5). Sur notre vidéo, on s'arrête à l'image 140 (6) :


  5. Pour une utilisation plus confortable, on clique sur le bouton "Prefetch" (7) : ça permet de pré-charger les images de la vidéo en mémoire.

III- Placement des marqueurs nécessaires pour le motion tracking

  1. On va maintenant demander à Blender de détecter automatiquement les points de tracking (markers) pour le mouvement de caméra, en appuyant sur le bouton "Detect Features" (8). Il est alors possible de modifier la détection, via le menu éphémère déroulant "Detect Features" (9) qui apparaît en bas à gauche :

    Remarque : Si les marqueurs ont été désélectionnés, on peut tous les sélectionner en appuyant sur la touche "A". Pour sélectionner des points dans une zone rectangulaire, on appuie sur la touche "B" et on trace un cadre les englobant.

  2. Pour déterminer le tracking de ces nouveaux marqueurs sélectionnés, on clique sur l'icône ci-dessous (ou raccourci Ctrl+T) (10) :
    blender tracking 06
    Il est aussi possible de passer par le menu "Track" → "Track Motion" → "Forwards" (10)
    blender tracking 06bis

  3. Selon les résultats obtenus et si la détection des mouvements n'est pas convaincante, il est possible de paramétrer le tracking via la partie "Tracking Settings" :
    blender tracking 07
    - On peut agrandir la taille du marqueur avec "Pattern Size".

    - On peut aussi élargir la zone de recherche avec "Search Size".

    - On peut aussi choisir le modèle de mouvement "Motion Model" pour s'approcher d'un prédéfini : Perspective, Affine, Location Rotation and Scale, Location and Rotation, Location and Scale, Location.

    - On peut aussi cocher les cases "Prepass" et "Normalize".


  4. Selon les résultats, il sera peut-être nécessaire d'avoir davantage de marqueurs ou d'en supprimer certains qui "décrochent" (ne suivent plus le mouvement). Pour cela, on peut s'aider du graphe en bas et repérer les points qui s'écartent trop, sont isolés des autres et qui forment des pics.

  5. Voici une vidéo d'un exemple de déplacements concluants :

IV- Déplacement de la caméra et positionnement des repères pour Blender

  1. Maintenant on se met sur l'onglet "Solve" (11). On indique le n° d'image finale "Keyframe B" qui dans mon cas est 140 et on coche pour "Refine" "Focal Length" (12). On clique ensuite sur le bouton "Solve Camera Motion" (13) :
    blender tracking 08Remarque : il est aussi possible de le faire via le menu "Track" → "Solve Camera Motion".

  2.  Blender affiche en haut à droite, l'indicateur "Solve error" (14) qui dans l'idéal doit être inférieur à 1 :
    blender tracking 09

    Si ce n'est pas le cas, un message d'avertissement s'affichera et il faudra alors appuyer sur le bouton "Clean Tracks", mettre le paramètre "Retroprojection Error" à 1 (ou moins) et appuyer sur le bouton "Filter Tracks". On supprime alors les marqueurs sélectionnés en appuyant sur la touche "X".

  3. On fait défiler le contenu de l'onglet "Solve" vers le bas et on clique sur les boutons "Set as Background" (15) ce qui fait apparaitre la vidéo sur la scène en haut sur le côté droit :
    blender tracking 10

  4. On appuie ensuite sur le bouton "Setup Tracking Scene" (15) qui font apparaître les points de tracking sur la scène. On voit d'ailleurs une nouvelle entrée "background" (16) dans Scene Collection :
    blender tracking 11

  5. Il est possible qu'il faille redimentionner et le Cube et le Ground. Pour cela, on sélectionne l'objet à redimentionner (17) et on clique sur l'icône "Scale" (18) et on ajuste les dimensions :
    blender tracking 12

  6. Dans la vidéo ci-dessous montrant le résultat, on voit que les marqueurs suivent bien la caméra. Par contre, il reste maintenant à aligner l'objet Blender, ici le cube, avec la vidéo :

  7. Il faut orienter l'objet en plaçant différents repères. On va d'abord placer le sol. Pour cela, il faut choisir 3 marqueurs (19) qui le détermineront, puis toujours dans l'onglet "Solve", dans la partie "Orientation", cliquer sur le bouton "Floor" (20) :
    blender tracking 13
  8.  On fait la même chose pour placer l'origine sur un marqueur via le bouton "Set Origin" (20).
  9.  Il faudra probablement remonter le cube pour le faire reposer au niveau du sol. Pour cela, sur la scène (ou le layout), on le sélectionne (21) et on le déplace à l'aide de l'icône "Move" (22) :blender tracking 14


  10.  Pour obtenir l'ombre du cube :blender tracking 15

    - On déplace l'objet "Ground" de la collection "background" dans la collection "foreground".

    - On choisit le mode d'affichage "Rendered" (23).

    - On sélectionne l'objet "Ground" (24).

    - On clique sur l'onglet "Render" (25).

    - On choisit "Cycles" (26) pour "Render Engine".

    - Puis dans la partie "Film" on coche la case "Transparent" (27).











  11. On peut aussi déplacer la lumière "Light" via le workspace "Layout" afin que l'éclairage soit le même que sur la vidéo.

  12. On peut aussi modifier l'aspect du cube. Pour cela :
    blender tracking 16
    - On sélectionne le cube (28).

    - On va sur l'onglet "Material" (29).

    - Et on utilise les paramètres dans la partie "Surface" (30).



 

V- Génération du rendu final

Attention car cela prend ÉNORMÉMENT de temps de calcul car cela se fait image par image, à la fois pour l'objet et pour l'arrière plan !!!  Dans mon exemple, cela prend environ 1 minute et 30 secondes par image : comme il y en a 140, cela prend 3,5 heures ... pour 5 secondes de vidéo finale pour un fichier de 4,5 Mo (ce qui est très léger par contre).

  1.  Pour générer le rendu final :
    - On va sur l'onglet "Output" (31).blender tracking 17

    - Dans la partie "Output" (32), pour le paramètre "File Format", on choisit "FFmpeg Video" (33). Ce qui donnera un fichier vidéo au format .mkv.

    - On indique le dossier et le nom de fichier sous lequel sera enregistré le rendu (34).

    - Puis on va dans le menu principal "Render" et on choisit "Render Animation" (ou raccourci Ctrl+F12).

 
Voici le résultat final :

VI- Tracer des surfaces avec l'outil Grease Pencil

Une fois le motion tracking réalisé, il ne reste plus qu'à tracer les surfaces avec l'outil Grease Pencil.

Dans le 3D Viewport (Layout), on ajoute un nouvel objet vierge (blank) Grease Pencil et on passe en mode "Draw Mode" en vue caméra (Pavé numérique 0).