Archives pour la catégorie Lighttwist

Desktop multi-projecteur simple

Voici une nouvelle façon simple de créer un desktop (bureau) haute résolution sous Linux avec plusieurs projecteurs.  Vous n’avez besoin que de deux outils façiles à utiliser:

lt-align: L’outil d’alignement de projecteurs LightTwist est une interface simple qui permet à l’usager de spécifier une surface de projection unique à partir de plusieurs projecteurs qui se recouvrent entre eux.

lt-compiz-plugin: Un plugin pour compiz 0.9 qui déforme la sortie de chaque projecteur en utilisant les cartes de déformation générées par lt-align. pour produire un espace de projection haute résolution.

Lire la suite

Libre Graphics Meeting (LGM 2011)

Le prochain Libre Graphics Meeting 2011 aura lieu les 10-13 mai.

Nous présenterons une démonstration d’un nouveau plugin compiz « Lighttwist » qui permet d’augmenter significativement la résolution de l’affichage Linux par l’usage de projecteurs multiples. L’alignement est simple et précis, et le « edge-blending » automatique. Le code sera GPL et rendu disponible le jour de la présentation à LGM.

 

 

Lighttwist v1.0 : Architecture du lecteur média

Guide du développeur : Chapitre 3

lighttwist-projection

control
ltjoystick.cpp: envoie à pd par pdSend une matrice 4×4 qui représente la position de la caméra contrôlée par la manette de contrôle (voir prepare_info()). Le calcul du mouvement de caméra à partir des données de la manette se fait dans JoystickFlightManipulator::calcMovement().

precrop
La vidéo est coupée en morceaux. Le ltplayer ne charge que les morceaux nécessaires au projecteur correspondant. De trop gros morceaux risquent de dépasser de façon significative la partie requise de la vidéo créant ainsi un décodage superflu. De trop petits morceaux mènent à une trop grande quantité de décodages.

interface
lighttwist.cpp: démarre et arrête les modules de contrôle externe, qjackctl (si spécifié), le lecteur média de contrôle et les lecteurs sur les ordinateurs de projection (player-master et player-slave respectivement) et la lecture de fichiers de montage. Voir:
stop_joystick_ctrl()
start_joystick_ctrl()
stop_player_master()
start_player_master()
stop_player_slave(int i)
start_player_slave(int i)
stop_jack()
start_jack()
play_playlist()
stop_playlist()

La gestion de processus à distance à partir de l’ordinateur de contrôle (comme dans le cas du lecteur média sur les ordinateurs de projection (player-slave) exécuté sur les ordinateurs de projection) se fait à l’aide du module remote.

remote

Envoi (remote.c) et réception (ltremote.c) de commandes à partir de l’ordinateur de contrôle vers les ordinateurs de projection. Ce mode de fonctionnement est présentement désactivé et a été remplacé par des commandes SSH. Pour le réactiver, il suffit de définir REMOTERUN dans remote.c (#define REMOTERUN).

player-master/default
pd charge la patch playlist_player.pd, qui décode et joue un fichier de montage (playlist *.pll), les sons, et synchonise la vidéo avec le son. Cette patch contient trois points de contrôle réseau:

  • le contrôle principal (encadré en rouge sur la figure ci-dessous) démarre la lecture des fichiers de montage par le port #define PD_MAIN_CTRL_PORT 10010;
  • le contrôle playlist (encadré en vert) décode un fichier de montage, reçoit les données des modules externes par le port #define PD_PLAYLIST_PORT 10020, calcule la position des sons et envoie les commandes appropriées vers les lecteurs média sur tous les ordinateurs de projection;
  • le contrôle sonore (encadré en bleu) décode les sons suivant les commandes reçues au port #define PD_SND_CHANNELS_PORT 10030.

lighttwist-pd

ch_grp.pd: gère un groupe de 16 sons
ch_ctrl.pd: contrôle le flux sonore vers les 8 haut-parleurs.
ch_env.pd: calcule l’enveloppe sonore (le volume) d’un son vers chacun des haut-parleurs.
ch_dist.pd: calcule la distance d’un son à un haut-parleur.
ch_weight.pd: calcul le facteur qui contrôle le volume pour chaque haut-parleur.
ch_norm.pd: calcule un chiffre allant linéairement de 1 (pour une distance de 0) à 0 (pour une distance égale ou plus grande au rayon d’action d’un son).

Opérations mathématiques: divide.pd, times.pd, plus.pd, minus.pd.

output~.pd:

La patch playlist décode les fichiers de montages et envoie les commandes qui y sont associées:
playlist_patch.c:
playlist.c:
playlist_parse.c:
playlist_parse.h:

player-slave/default
ltplayer.cpp: la fonction process_cmd reçoit les commandes de pd.
ltlayer.cpp:
deform_3d.glsl:
deform_video.glsl:
lt3dlayer.cpp:
lt3dlayer.h:
ltmulti3dlayer.cpp:
lttiledvideolayer.cpp:
lttileinfo.cpp:
ltvideocontroller.cpp:
ltvideotexture.cpp:
stereo_rotate_vert.glsl:

Lighttwist v1.0 : Fichiers et principales fonctions reliés à la calibration des projecteurs

Guide du développeur : Chapitre 2

lighttwist-scan

La calibration Lighttwist fait la correspondance entre l’écran du point de vue d’une caméra et les projecteurs à l’aide d’un mapping UV défini par l’utilisateur.

2.1 Résumé des différentes étapes de calibration des projecteurs

L’onglet Scan de l’interface usager affiche, en mode avancé, les étapes de calibration:
Capture: capture d’images lors de la projection de lumière structurée, de tons de gris ou de couleurs;
Map UV: définition du mapping UV entre l’écran et le canevas de l’artiste;
Cam->Proj: correspondance entre la caméra et les projecteurs;
Lissage: lissage des correspondances caméra/projecteurs;
Gamma: estimation des coefficients gamma;
Dégradé: calcul du dégradé optimal au niveau du chevauchement entre des projecteurs adjacents dans l’image caméra;
UV->Proj: transposition du mapping UV ainsi que du dégradé vers l’image des projecteurs.

Deux autres étapes sont exécutées automatiquement entre la Capture et le mapping UV, soit Select (le calcul des intensités minimales et maximales observées) et Sum (la somme des intensités maximales pour tous les projecteurs).

Dans le fichier interface/lighttwist.cpp, ces opérations sont contrôlées par les fonctions: do_stl (la projection des motifs), do_grab (la prise d’image par la caméra), do_select, do_sum, do_uvmap, do_cam2proj, do_smooth, do_gamma, do_blend, do_uv2proj.

Les applications externes nécessaires à la calibration des projecteurs sont situées dans le répertoire src/scan: ltstl, ltselect, ltsum, ltcam2proj, ltsmooth-homography, ltgamma, ltblend-diffuse, ltuv2proj.

Le diagramme suivant montre tout le processus de la calibration des projecteurs avec les fichiers d’entrée et de sortie pour chacune des étapes. Pour une meilleure qualité d’image, visualiser le diagramme dans une fenêtre séparée.

lighttwist-calibration

2.2 Description détaillée des différentes étapes de calibration des projecteurs

2.2.1 La projection lors de la capture (scan/ltstlc.pp)

La calibration géométrique des projecteurs se fait par la projection de motifs de lumière structurée composés de lignes horizontales et verticales de façon à ce que chaque pixel d’un projecteur soit identifié uniquement par une séquence binaire (les lignes blanches représentent le bit 1, et les lignes noires, le bit 0). Le motif le plus précis change d’intensité à chaque ligne/colonne, et le motif le moins précis est composé de deux lignes/colonnes, une noire et une blanche. En pratique, la résolution d’un projecteur n’est pas une puissance de 2, et certaines séquences binaires ne sont pas projetées. À noter que l’inverse de chaque motif est aussi projeté. L’identification des bits se fera (voir ltcam2proj.c) en détectant les passages noir-blanc et blanc-noir dans un motif et son inverse, et non par l’intensité absolue dans un seul motif. Le nombre de motifs dépend de la résolution d’un projecteur. Pour un projecteur HD 1920×1080, 11 bits sont nécessaires horizontalement et verticalement (2^11>=1920, 2^11>=1080). Ainsi, (11+11)*2=44 motifs sont projetés.

La calibration gamma projette 20 images en ton de gris, allant de noir à blanc (l’intensité augmente de façon constante).

La calibration des couleurs projette les 24 couleurs d’un MacBeth ColorChecker standard.

2.2.2 La prise d’images par la caméra (interface/lighttwist.cpp::do_grab())

2.2.3 scan/ltselect.c

2.2.4 scan/ltsum.c

2.2.5 interface/lighttwist.cpp::do_uvmap()

2.2.6 scan/ltcam2proj.c

2.2.7 scan/ltsmooth-homography.c

2.2.8 scan/ltgamma.c

2.2.9 scan/ltblend-diffuse.c

2.2.10 scan/ltuv2proj.c

2.3 Description des différents formats d’encodage

2.3.1 Le mapping UV et la déformation de l’image d’un projecteur (LUT)

Soit des coordonnées UV, de (0,0)->(1,1), qui représentent une vidéo d’un artiste. Lighttwist vise à calculer pour chaque projecteur une LUT (LookUp Table) donnant une correspondance entre chaque pixel du projecteur et la vidéo.

La sauvegarde d’une LUT se fait par la fonction imguConvertFromComplexUV() qui transforme les coordonnées UV en image PNG 16-bit de 2 canaux. La tranformation inverse, par imguConvertToComplexUV(), est possible par la sauvegarde d’information texte supplémentaire (FMIN_U, FMAX_U, FMIN_V, FMAX_V) dans le format PNG.

Lighttwist v1.0 : Arborescence du code source

Guide du développeur : Chapitre 1

Ce chapitre suppose que Lighttwist et ses dépendances BMC et IMGU ont été téléchargés dans les répertoires ~/svn3d/lighttwist, ~/svn3d/bmc et ~/svn3d/imgu respectivement, tel que décrit au chapitre 3 du guide de l’utilisateur.

1.1 Le code source de Lighttwis: un aperçu

Le code source de Lighttwist, contenu dans le répertoire ~/svn3d/lighttwist/src/, est divisé en 8 sous-répertoires.

control : modules de contrôle externe du lecteur média (manette de contrôle joystick par exemple).
interface : interface usager Lighttwist écrite à l’aide de la librairie FLTK.
player-master/default : lecture des fichiers de montage et synchronisation des événements qui y sont spécifiés; lecture des sons; réception des messages des modules externes et transmission, au besoin, vers le lecteur média (module player-slave). Puredata (en abrégé pd) est un langage de programmation graphique pour la création musicale et multimédia en temps réel.
player-slave/default : lecture sur les ordinateurs de projection des scènes 3d, images et vidéos sous commandement du module pd situé sur l’ordinateur de contrôle.
precrop : prépare les vidéos pour une lecture temps réel en les coupant en morceaux.
remote : gère le démarrage et l’arrêt de divers processus sur les ordinateurs de projection.
scan : opérations reliées à la calibration des projecteurs.
utils : fichiers utiles à diverses opérations.

1.2 La librarie BMC

Permet de gérer des communications réseaux. Lighttwist utilise une communication TCP Client/Serveur (voir l’exemple ~/svn3d/bmc/testtcp.c) et Multicast (voir l’exemple ~/svn3d/bmc/testbmc.c).

1.3 La librarie IMGU

Permet de gérer des images 8 ou 16 bit de type PNG, JPG et PGM/PPM. La commande ~/svn3d/imgu/doxygen permet de générer la documentation IMGU.

Permet aussi des opérations matricielles (voir ~/svn3d/imgu/src/matrixmath.c)

Lighttwist v1.0: Guide du développeur

Lighttwist v1.0

Guide du développeur

Mars 2010

Copyright

@Copyright 2004-2008 Université de Montréal, Laboratoire Vision3D

Sébastien Roy (roys@iro.umontreal.ca)
Vincent Chapdelaine-Couture (chapdelv@iro.umontreal.ca)
Louis Bouchard (lwi.bouchard@gmail.com)
Jean-Philippe Tardif
Patrick Holloway
Nicolas Martin
Vlad Lazar
Jamil Draréni
Marc-Antoine Drouin

@Copyright 2005-2007 Société des arts technologiques

Lighttwist is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Lighttwist is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Lighttwist. If not, see http://www.gnu.org/licenses/.

INTRODUCTION

Ce guide s’adresse aux développeurs qui désirent comprendre le code source et l’architecture Lighttwist. Il est divisé en trois chapitres : le premier présente la structure générale des répertoires et fichiers du code source ; le deuxième décrit la calibration des projecteurs ; le troisième présente l’architecture du lecteur média distribué sur les ordinateurs de projection et les modes de contrôles externes.

Chapitre 1 Arborescence du code source

Chapitre 2 Fichiers et principales fonctions reliés à la calibration des projecteurs

Chapitre 3 Architecture du lecteur média

Trans-porteurs Ecotopia-Utopia : Vernissage


Vous êtes cordialement invité au vernissage de l’exposition

Trans-porteurs Ecotopia-Utopia

au Centre d’exposition de l’Université de Montréal

du 16 septembre au 25 octobre 2009
vernissage le mardi, 15 septembre 2009 à 18h


Trans-porteurs Ecotopia-Utopia

ecotopiaUtopia

Installation  -  7 œuvres en médias numériques

réalisées par l’équipe du
medialabAU
Irena Latek, direction du projet, Lysiane Bouchard, Martin Bourgault, Marlène Bourque,
Alain Carle, Fannie Duguay-Lefebvre, Mickaël Durand, Hicham El Fakir, Alan Knight,
Elise Lacoursière Bourget, Michel Lefebvre, Anouck Lemarquis, Etienne Ostiguy

Projections et spatialisations sonores avec Lighttwist, Laboratoire Vision3D,
Université de Montréal, Sébastien Roy, directeur, Vincent Chapdelaine-Couture, doctorant

Commissaires Irena Latek, Fannie Duguay-Lefebvre

Le Centre d’exposition de l’Université de Montréal est situé dans le pavillon de la Faculté
de l’aménagement, au 2940, chemin de la Côte Sainte-Catherine,
local 0056,
(Métro Université de Montréal). Il est ouvert au public les mardis, mercredis, jeudis et
dimanches de 12 h à 18 h. L’entrée est gratuite.

www.medialabAU.umontreal.ca
j