Exemple pour de multiples projecteurs#
Cet exemple explique pas à pas comment calibrer de multiples projecteurs sur une surface relativement simple. La surface de projection est un dome incliné, vers lequel trois vidéoprojecteurs sont orientés. Le processus est le suivant :
créez un modèle 3D à basse résolution (calibrage) de l’objet,
exportez depuis blender un brouillon du fichier de configuration,
ouvrez le fichier dans Splash, calibrez les vidéoprojecteurs,
créez un modèle 3D haute résolution de la surface, qui sera utilisée pour la projection,
remplacez le modèle 3D basse résolution avec celui en haute résolution,
chargez du contenu pour le jouer sur la surface.
Pour faire ce tutoriel, vous aurez besoin de :
Splas installé sur un ordinateur
au moins deux vidéoprojecteurs connectés sur l’ordinateur
a surface de projection non plane, suffisamment simple pour permettre la création d’un modèle 3D la représentant
Créer un modèle 3D à basse résolution (calibrage) de l’objet#
Il est nécessaire d’avoir un modèle 3D à basse résolution étant donné la façon dont Splash gère le calibrage des vidéoprojecteurs. De façon générale, l’idée est de dire à Splash à quel endroit projeter un point du modèle 3D sur la surface de projection. Splash a besoin qu’au moins six points soient définis pour que le processus de calibrage puisse s’effectuer.
Le fait est qu’il est plus facile de travailler avec un modèle 3D très simple contenant uniquement les points pour lesquels nous connaissons la position exacte de la projection. Ces points peuvent être échantillonnés aux intersections des arêtes, des coutures, ou à tout autre endroit mesuré sur la surface. Un modèle 3D très élémentaire est créé en utilisant ces points et sera utilisé tout au long du processus de calibrage.
De retour à notre cas d’usage, la surface de projection étant un dôme incliné fait de fibre de verre, avec des coutures apparentes. Le modèle 3D contiendra uniquement les points visibles aux intersections de coutures. Dans ce cas, ce sera suffisant pour un calibrage satisfaisant puisque chaque vidéoprojecteur couvre une grande partie du dôme; il est possible que ce ne soit pas suffisant pour d’autres configurations. Si nous choisissons d’utiliser cinq vidéoprojecteurs au lieu de trois, il sera possiblement nécessaire de positionner des points supplémentaires sur la surface.
En dernier lieu, nous avons besoin de coordonnées de texture afin de nous permettre d’afficher une image-motif et de nous aider avec le processus de calibrage. Dans le mode modèle 3D de Blender, balancez vers le mode Édition (Edit) en appuyant sur la touche Tab, puis appuyez sur la touche ‘U’ et sélectionnez ‘Smart UV Project’. Ensuite, sortez du mode Édition en appuyant de nouveau sur la touche Tab.
Dans les sections suivantes, le terme employé pour désigné le modèle 3D à basse résolution sera le modèle de calibrage.
Créer la configuration à l’aide de l’extension Blender#
Pour ce tutoriel, nous allons créer la configuration dans Blender. Notez qu’elle pourrait très bien être créée entièrement dans Splash. Veuillez consulter l’introduction à la configuration de Splash et l’exemple avec un seul projecteur pour plus d’informations à ce sujet. La principale différence serait la nécessité de disposer de trois caméras au lieu de deux.
De retour dans Blender, maintenant que nous avons le modèle de calibrage, nous pouvons commencer la création de la configuration de base de Splash à l’intérieur du projet Blender dans lequel nous sommes. Pour cet exemple, nous considérons qu’il y a trois vidéoprojecteurs connectés aux deuxième, troisième et quatrième sorties de l’unique carte graphique. Cette première sortie est envoyée à un moniteur supplémentaire à des fins de contrôle. Toutes les sorties sont paramétrisées à 1920x1080.
L’extension Splash pour Blender est utilisée afin de créer cette configuration; l’arbre final Splash ressemble à ceci:
L’arbre doit être lu de droite à gauche. Le noeud de base est le noeud World, auquel tous les autres noeuds doivent être connectés (directement ou indirectement). Un noeud de proceseur graphique (GPU) lui est connecté, représentant la carte graphique de l’ordinateur. Dans le cas où nous avons deux cartes graphiques, nous devons créer deux noeuds de cette sorte afin d’émettre vers toutes les sorties disponibles.
La fenêtre d’interface graphique est créée dans un noeud dédié, et sera affichée sur le premier moniteur. Il y a une seule autre fenêtre, qui s’étend sur tous les vidéoprojecteurs (d’où sa taille de 3840x1080), et toutes les caméras (chacune correspondant à un vidéoprojecteur) lui sont connectées. Ceci est la mise-en-place recommandée, puisqu’elle améliore la performance. De façon générale, il est préférable de limiter le nombre de fenêtres car cela réduit le nombre de changements de contexte pour la carte graphique.
Un noeud Object est connecté à toutes les caméras et à tous les vidéo-projecteurs ciblant la même surface de projection. Ce noeud reçoit en entrée un noeud Image (qui est configuré pour utiliser l’image située à data/color_map.png
dans les sources de Splash), et un noeud Mesh qui est configuré pour utiliser les données provenant du modèle de calibrage que nous avons créé plus tôt, en entrant le nom du modèle de calibrage dans le champ Object du noeud Mesh. Notez que le paramètre “Culling” du noeud Object prend comme valeur “back”, puisque nous voulons que la projection soit à l’intérieur du dôme.
Maintenant, nous pouvons exporter la configuration de Splash en cliquant sur ‘Export configuration’ sur le noeud World, ce qui exportera tous les noeuds lui étant connectés. Nommons ce fichier de sortir configuration.json
. Le modèle de calibrage sera exporté automatiquement dans le même répertoire que le fichier de configuration, puisque son nom a été entré dans le noeud Mesh.
Calibrage des multiples vidéo-projecteurs#
Nous arrivons maintenant à la partie amusante, le calibrage des vidéo-projecteurs. Chargeons le fichier de calibrage que nous venons d’exporter, soit en exécutant Splash puis en glissant le fichier calibration.json
, ou, à partir de la ligne de commande, en passant le fichier de configuration comme option lors de l’exécution de Splash:
cd CONFIGURATION_FILE_OUTPUT_DIRECTORY
splash configuration.json
Deux fenêtres apparaîtront. L’une est l’interface graphique (GUI), et est affichée sur le moniteur; l’autre fenêtre s’étend sur tous les vidéo-projecteurs. Si ce n’est pas le cas, alors il y a un problème soit avec la configuration dans le fichier Blender, soit avec la configuration des moniteurs. Si tout fonctionne, alors vous n’avez pas besoin d’interagir avec la deuxième fenêtre, tout se déroulant dans l’interface graphique.
Informations générales au sujet du calibrage#
Sélectionner la fenêtre d’interface graphique et appuyer sur Ctrl`+`Tab: la fenêtre d’interface graphique s’affiche ! Vous pouvez trouver de l’information supplémentaire sur l’interface graphique sur la page Apprendre à connaître l’interface utilisateur. L’onglet le plus important pour le moment est nommé “Cameras”. Ouvrons-le par un clic. À partir de cet onglet, vous pouvez sélectionner n’importe laquelle des caméras définies plus tôt dans Blender. Notez que lorsqu’une caméra est sélectionnée, celle-ci est surlignée par un cadre orange, permettant de voir vers quel vidéo-projecteur est envoyée la sortie de cette caméra. Par défaut, la première caméra de la liste est sélectionnée, qui joue le rôle de caméra de survol et qui n’est pas retransmise quelque part. Sélectionner cette caméra de nouveau afin d’enlever le surlignage orange des autres caméras.
Après avoir sélectionner une caméra, déplacer le point de vue par une des actions suivantes :
clic-droit : effectuer une rotation de la vue
Shift + clic-droit : faire un panorama avec la vue
Ctrl + clic-droit: agrandir/rapetisser (zoom)
Vous pouvez aussi cacher les autres caméras afin de vous concentrer sur une ou deux caméras grâce aux options suivantes :
Hide other cameras (ou la touche H tout en survolant la vue) : cache toutes les caméras sauf celle sélectionnée
Ctrl + clic-gauche sur une caméra de la liste : cache/montre la caméra sélectionnée
Maintenant, appuyez sur Ctrl+W: ceci fait basculer la vue vers le mode en fils de fer (wireframe). Ctrl+T permet de retourner vers le mode des textures. Dans le mode fils de fer, vous pouvez voir les sommets qui seront utilisés pour le calibrage. Avant de commencer le calibrage de la première caméra, voici le déroulement du travail pour chaque caméra :
sélectionnez un sommet du maillage par un clic,
le sommet sélectionné est maintenant entouré par une petite sphère, et une croix apparaît au milieu de la vue,
déplacez la croix en faisant un clic-gauche dans la vue tout en appuyant sur Shift : ceci indique à Splash à quel endroit le sommet sélectionné doit être projeté,
la croix peut être déplacée de façon précise avec les touches-flèches,
répétez ces étapes pour les sommets suivants. Si vous sélectionnez le mauvais sommet, vous pouvez annuler la sélection en faisant un clic-gauche sur celui-ci tout en appuyant sur Ctrl,
un sommet peut être mis-à-jour en le sélectionnant de nouveau,
il est possible d’afficher toutes les croix en appuyant sur A tout en survolant la vue (ou en cliquant sur ‘*Show targets*0‘)
Dès qu’au moins six sommets ont été définis de cette façon, vous pouvez demander à Splash de calibrer la caméra : cliquez sur le bouton ‘Calibrate camera’ (ou appuyez sur C tout en survolant la vue de la caméra). Si le calibrage est possible, vous pouvez maintenant voir les sommets calibrés projetés sur leurs croix associées. Si la vue n’a pas changée, ceci signifie que le calibrage ne peut pas avoir lieu et qu’aucun des paramètres de la caméra peut faire en sorte que tous les sommets soit associés à leur croix.
Calibrage !#
Nous pouvons maintenant procéder au calibrage des trois vidéo-projecteurs. Quelques considérations générales pour commencer : la surface de projection est un dôme, ce qui signifie qu’il y a plusieurs symétries. Ceci nous permet de choisir la façon dont on souhaite commencer. Ceci ne serait évidemment pas le cas avec un objet non-symétrique, comme une pièce par exemple. Le fait d’avoir autant de symétries peut aussi être un obstacle : une fois la première caméra calibrée, il ne nous sera pas possible de calibrer la caméra suivante sans se référer à la texture. Avec un objet non-symétrique, le modèle 3D devrait être suffisant.
Retournons au calibrage de la première caméra. En suivant les étapes décrites précédemment, calibrez la première caméra en procédant à la mise en place d’au moins six points de calibrage. Ce n’est pas recommandé de faire du peaufinage pour le moment : premièrement, le modèle 3D utilisé pour le calibrage est de résolution trop basse pour pouvoir faire des tests nous informant de la qualité du calibrage qui sera fait; deuxièmement, la meilleure chose est de faire un un premier calibrage en utilisant tous les vidéo-projecteurs avant de prendre le temps de peaufiner.
Maintenant, pour la seconde caméra, nous devons la calibrer de façon à ce que la projection associée corresponde à celle de la première caméra. C’est ici que la texture de calibrage devient utile. Passez au mode texture (Ctrl + T), puis sélectionnez dans les onglets Cameras la deuxième caméra. Pour que les choses soient claires, désactivez la troisième caméra en appuyant sur Ctrl + clic-gauche sur celle-ci, dans la liste des caméras.
Dans la section caméra, déplacez la caméra (clic-droit tout en appuyant ou pas sur Shift ou Ctrl), de façon à créer une correspondance approximative avec la projection de la première caméra. Alternez entre les modes texture et fils de fer afin de déterminer la correspondance entre les deux caméras. Trouvez un sommet qui soit affiché par les deux, puis sélectionnez-le et calibrez-le. Maintenant, continuez : calibrez au moins 5 sommets supplémentaires.
Vous pouvez maintenant passer à la troisième caméra. Sélectionnez-la dans la liste des caméras : dès qu’elle sélectionnée, la visibilité de la caméra est remise à zéro pour toutes les caméras. Cachez la deuxième caméra en appuyant sur Ctrl tout en faisant un clic-gauche sur celle-ci, et calibrez la troisième caméra comme vous avez fait pour la deuxième.
La première étape de calibrage est complétée, la prochaine étape étant de vérifier le résultat. Pour ce faire, nous avons besoin d’un modèle 3D ayant une définition élevée de notre surface de projection. Sauvegardez la configuration en appuyant sur Ctrl + S.
Créer un modèle 3D à haute définition, et remplacer le modèle à basse définition#
Il y a plusieurs façons de créer un modèle 3D à haute définition d’une surface de projection. Comme nous projetons sur un dôme, nous avons simplement besoin de créer une sphère UV que nous allons sectionner en deux parties. Le seul pré-requis est que le diamètre soit précisément le même que le diamètre du modèle de calibrage. Nous devons aussi générer les coordonnées de texture. Afin de le coordonner à une projection sphérique, faites ce qui suit :
passer au mode Edit en appuyant sur la touche Tab ,
sélectionnez tous les sommets (en utilisant la touche A),
appuyez sur U, puis choisissez “Unwrap”
appuyez sur la touche Tab pour sortir du mode Edit.
Puis, nous devons exporter ce modèle 3D. Sélectionnez l’objet puis ouvrez le menu “File > Export > Wavefront (.obj)”. Comme paramètres d’exportation, saisissez les suivants :
Forward: Y forward
Up: Z up
Selection Only: true
Write Materials: false
Puis naviguez jusqu’au répertoire où le configuration.json
a été exporté, et complétez l’exportation avec un nom significatif (``dome_hires.obj``par exemple).
Retournez dans Splash. Dans l’onglet Meshes, ouvrez l’objet ‘mesh’, puis configurez le fichier source obj pour qu’il soit le fichier nouvellement exporté (soit en saisissant manuellement l’adresse du répertoire, ou en la sélectionnant à l’aide du bouton ‘…’). Sauvegardez la configuration en appuyant sur Ctrl*+*S.
Calibrage, deuxième ronde#
Nous pouvons maintenant peaufiner le calibrage. Remplacer le modèle de calibrage pour celui à haute définition a déjà bien amélioré les choses, mais les chances sont fortes qu’il reste encore du travail à faire. Il n’y a pas grand chose à apprendre ici, mais voici quelques trucs pour améliorer la correspondance des projections :
passez au mode fils de fer, puisque c’est plus facile de voir les défauts dans ce mode.
pour chaque caméra, sélectionnez les sommets existants et déplacez-les. Si possible, Splash devrait recalculer le calibrage automatiquement. Sinon, vous pouvez forcer Splash à le faire en appuyant sur Ctrl*+*C tout en survolant la vue.
s’il y a des surfaces de projection n’ayant aucun point de calibrage, ajoutez-en au moins un.
gardez la distance entre les sommets et leurs croix correspondantes aussi petite que possible. Plus grande est la distance, pire sera le calibrage d’un point de vue géométrique.
Si vous pensez que vous avez atteint la limite, alors il est temps d’utiliser des déformations. C’est habituellement le cas avec les surfaces de projection qui sont imparfaites, comme des dômes gonflables. Les capacités déformantes de Splash se trouvent sous l’onglet Warps, et fonctionne comme suit :
sélectionnez une caméra : un treillis apparaît sur celle-ci, chaque intersection étant un sommet qui peut être déplacé,
sélectionnez un sommet du treillis, et déplacez-le avec la souris ou les touches flèches : la vue est altérée de façon correspondante,
utilisez ce principe pour améliorer la correspondance entre des sections superposées de vidéoprojecteurs.
Enfin, lorsque le calibrage semble satisfaisant, nous pouvons activer le mélange des vidéo-projecteurs. Ceci est la partie facile : appuyez sur Ctrl*+*B (ou cliquez sur le bouton ‘Compute blending map’ dans l’onglet ‘Main’). N’oubliez pas de retourner au mode textures en appuyant sur Ctrl*+*T.
Téléversement de contenu vidéo#
L’étape finale consiste à remplacer la texture statique utilisée précédemment par un film. Toujours dans Splash, allez vers l’onglet Medias. À cet endroit, vous trouverez une liste des entrées possible pour votre configuration et vous pouvez les modifier. Sélectionnez le seul objet de la liste, puis changez son type de « video » à « image ». Ensuite, assignez comme valeur à l’attribut « file » le chemin complet d’un fichier vidéo.