J'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.
Voir aussi cet article sur Blender qui complète celui-ci : [Blender] Aide-mémoire et astuces
Sources intéressantes :
- Tutoriels courts en français (idéal pour commencer) :
- En anglais : https://www.youtube.com/watch?v=vB07Bws8bmY
I- Espace de travail "Motion tracking" dans Blender
- Ouvrir Blender normalement.
- Appuyer sur "+" (Add Workspace) en bout de ligne des menus en haut vers la droite.
- Choisir "VFX" -> "Motion Tracking".
II- Importation et réglages de la vidéo
- 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.
- On regarde les caractéristiques de cette vidéo (résolution et le nombre d'images par seconde "fps") (2) :
- 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) :
- 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) :
- 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
- 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. - 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) :
Il est aussi possible de passer par le menu "Track" → "Track Motion" → "Forwards" (10) : - 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" :
- 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". - 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.
- 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
- 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) :
Remarque : il est aussi possible de le faire via le menu "Track" → "Solve Camera Motion".
- Blender affiche en haut à droite, l'indicateur "Solve error" (14) qui dans l'idéal doit être inférieur à 1 :
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". - 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 :
- 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 :
- 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 :
- 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 :
- 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) :
- On fait la même chose pour placer l'origine sur un marqueur via le bouton "Set Origin" (20).
- 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) :
- Pour obtenir l'ombre du cube :
- 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). -
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.
On peut aussi modifier l'aspect du cube. Pour cela :
- 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- CAS PARTICULIER POUR UN TRAVELLING LONG
Dans le cas où l'on a une vidéo avec un long panoramique et des points de repères qui rentrent ou sortent du champ visuel (cas de ma vidéo avec un drone), il va falloir "découper" la vidéo en différentes parties pour placer des nouveaux points de tracking. Pour mon exemple (vidéo avec 749 frames), j'ai dû faire 3 placements automatiques de marqueurs pour le motion track comme on le voit dans cette capture du dopesheet :
Après le "Solve Camera Motion", voici ci-dessous le graph correspondant au tracking des 3 parties de la vidéo avec un Solve error de 0.44 px (ce qui est est plus que satisfaisant) :
VI- Tracer des traits avec l'outil Grease Pencil
Pour mon projet dans lequel je voulais représenter des surfaces boisées, une fois le motion tracking réalisé, j'ai utilisé l'outil Grease Pencil qui est vraiment très intéressant.
Dans le 3D Viewport (Layout), avec le raccourci MAJ + A, on ajoute un nouvel objet Grease Pencil vierge (blank) et on passe en mode "Draw Mode" en vue caméra (Pavé numérique 0) avec lequel on va pouvoir dessiner.
Pour modifier le dessin, il faudra passer en mode "Edit Mode" avec la touche TAB et sélectionner les points à déplacer/modifier :
- Touche G pour déplacer.
- Touche E pour extruder, c'est-à-dire rajouter un point à la suite.
- Touche F pour fermer la surface entre le premier et le dernier point.
- Pour tracer des arrondis, utiliser le bouton "Curve Editing".
Attention : Si le rendu couleur du tracé est trop foncé, il faut désactiver la lumière pour le grease pencil (voir capture ci-contre) en décochant la case "Use Lights" :
Pour pouvoir avoir l'arrière-plan et les tracés de grease pencil, dans l'onglet "View Layer", il est nécessaire dans la partie "Passes" → "Data" de cocher "Combined" et "Z" :
VI- 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).
- Pour se faire une idée du rendu final, le mieux est de commencer à générer une seule image de rendu. Cela permet de vérifier que la sortie est correcte, notamment au niveau des couleurs.
On se place sur un frame intéressant et on appuie sur la touche F12 (ou via le menu "Render" → "Render Image")
Si cela est satisfaisant on peut alors se lancer dans la génération de toutes les images. -
À conseiller : Pour générer le rendu final, en créant des fichiers image par image (un fichier par frame) :
Source :
- https://docs.blender.org/manual/fr/latest/render/output/animation.html
- https://www.youtube.com/watch?v=rIVkxVgkZM8
Il est aussi possible de reprendre la création des frames en indiquant le premier et le dernier à générer.
- On va sur l'onglet "Output" (31).
- Dans la partie "Output" (32), pour le paramètre "File Format", on choisit "PNG" ou "JPG" (33).
- 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).
- Ensuite on utilisera l'éditeur vidéo dans Blender pour créer la vidéo en cliquant sur "+" (Add Workspace) en bout de ligne des menus en haut vers la droite → "Video Editing" → "Video Editing".
Tutoriel vidéo : https://www.youtube.com/watch?v=q9VtDzPt8KE&t=55s
-
Déconseillé : Pour générer le rendu final directement en un fichier vidéo mkv :
Avec cette méthode, il n'est pas possible de se mettre en pause pour reprendre plus tard, ce qui est d'autant plus génant que c'est vraiment très long à traiter et qu'un plantage ne pourra pas être réparé (la vidéo sera quand même visible jusqu'au plantage) .
- On va sur l'onglet "Output" (31).
- 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 ou .mp4 selon les options choisies.
- 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 (sans l'utilisation du Grease Pencil) :
Voici une autre vidéo entièrement obtenue avec Blender, avec cette fois-ci l'utilisation du Grease Pencil : Remarques :
- Les 25 secondes ont demandées plus de 12h de traitement dans Blender avec le rendu conseillé image par image.
- Cette vidéo aurait mérité un alignement plus précis mais s'agissant d'une première ce n'est pas si mal 😉.
- Ensuite, il ne resterait plus qu'à la traiter avec Kdenlive pour lui rajouter un commentaire audio, des sous-titres, une légende.