PILLOBOLUS

Michel Bret & Marie-Hélène Tramus

décembre 2019



Certains liens ne seront pas actifs s´il n´y a pas de connexion internet.

Principe
Interaction
Capteurs
Menu
Modifications
Raccourcis clavier
Options
Programme
Dysfonctionnements





























Principe

Construction interactive d´un pillobolus sur une idée de Marie-Hélène Tramus sur le système
anyflo de Michel Bret version 19.12

Plusieurs nivaux de contrôle:
interaction
construction des mouvements
call back USER
construction des corps: modifier les fonctions build_*.

Plusieurs types de capteurs:
mouse
camera



























Interaction

Lancement
Mode click
Paramètres
Fonction USER

Lancement

Cliquer sur:
pillobus_body.js: no illum.
pillobus_shadow.js: ombres.
pillobus_self.js: automappe.
pillobus_test.js: test.
USER.js: utilise la fonction USER.
pillobus_body_PARAM1.js: exemple de fichier PARAM1 personnalisé (modifier ce fichier).
pillobus_camera: en mode caméra (en développement).
Enfoncer la touche : (deux points) pour avoir les menus.

Mode click

Un corps s´affiche, cliquer sur lui: un nouveau corps ancré au point du premier corps le plus proche du point cliqué est généré, et ainsi de suite (jusqu´à Nb_Body[1] corps), le processus est alors réinitialisé.
À chaque clic des trajectoires dynamiques de forces de rotation (couples) ainsi que des trajectoires d´interpolation (par rotations) des axes sont générés. La liste de description de ces trajectoires sont dans des mémoires initialisées dans la fonction build_MOVE().
Remarque
Enfoncer la touche j pour réinitialiser.

Paramètres

Pour accéder aux menus enfoncer la touche : (deux points).
Remarque :
Il faut quitter ce mode (en enfonçant de nouveau la touche : ou en cliquant sur CLICK) pour retrouver le mode click.
Le menu PARAM permet de modifier et sauver les paramètres.

Fonction USER

La fonction env/USER() est un acll back exécutée à chaque image si USER est actif.



























Capteurs

Mouse
Camera

MOUSE

Par défaut la vitesse de déplacement de la souris est utilisée pour générer des couples de forces.

CAMERA

cam: la vitesse de déplacement de l´image de la caméra dans une grille est utilisée pour générer des couples de forces appliquées aux jambes, aux bras et au torse du premier corps..
Le menu DISPL (touche D) visualise la caméra.
pillobolus_camera.js lance: anyflo.exe pour la fonction pillobolus("cam") en mode caméra et le driver WWebCam.exe
Placer l´image de la caméra dans le coin haut gauche de l´écran, enfoncer la touche D ce qui a pour effet d´afficher l´image de la caméra, déplacer cette image de façon à y voir l´imlage donnée par la caméra. Orienter alors la caméra de façon à ce que le spectateur y figure en pied, coupé à hauteur des coudes.
Ce driver, trèsimple, ne suppose aucun dispositif particulier, il capte l´image de la caméra et l´envoie, via une mémoire partagée, à anyflo qui en analyse la dérivée première.

Remarque:
pour le moment une fenêtre de dialogue Windows s´affiche, il faut cliquer sur OK (ce qui est du à une incompatibilité de VisualC++.6.0 avec le système actuel).

Réglage de la caméra
N'importe quelle web cam convient.
Après avoir lancé pillobolus_camera.js
Lancer une webcam et amener son image en haut et à gauche.
Enfoncer la touche D, une fenêtre apparait en bas et à gauche de lécran.
Redimensionner et déplacer l´image de la caméra de façon à ce qu´elle apparaisse dans la fenêtre.
Placer le spectateur de façon à ce qu´il apparaisse en pied dans cette image.
Lui faire lever le bras gauche, puis le bras droite, puis pivoter et se baisser, si les réglages sont corrects le personnage doit en faire autant.
Laisser le spectateur libre de ses mouvements et expérimenter l´interaction.
En amenant le spot d´un laser de pointage sur ce personnages il peut construire un pillobolus dynamique de complexité arbitraire.

Menu

F=p;

HEL
DOC
BODY
MOVE
PARAM
COL
ILLUM
EXT
FOG
CLICK
INV
SELF
AUT
BACK
USER
CAM
SPE
CURS
MOU
VAR
DISPL
CODE
INI
EXI

HEL

Aide. :

DOC

Ce fichier.

BODY

Paramètres des corps.

TEST

Permet de modifier le corps, se lance avec pillobolus_test.js..

MOVE

Paramètres des mouvements.
num: teste le mouvement numéro num.

HEL

aide

STAND

immobile, permet de tester les désignnations et les constructions des corps.

RAND

choix aléatoire des mouvements.

LINEAR

variation linéaire des mouvements.

CONSTANT

mouvement constant.

PARAM

Échelles
HEL
MIROR
READ0
READ
WRITE
GENERATE

Start=25: attente de 1 seconde du lancement de WebCam.exe.

Échelles

Des échelles permettent de modifier les paramètres:
dila thorax leg arm: dilatation globale, du thorax, des jambes et des bras.
tran y: monter ou descendre les corps.
foc: change la focale, par exemple foc=1.5 diminue la taille des corps pour permettre d´empiler de nombreus corps.
ext,coe: coefficients d´extension.
spring rote, visc: couples des ressorts.
radius, curs: curseur en mode caméra.
ni: durée des trajectoires.
var: durée de changement de mouvement (si VAR est actif.
period: période d´affichage (1: lent, 50: rapide).
force,max,visc,stright: force, maximum et viscosité des mouvements, coefficient de redressements.
coe arm left right, thorax: coefficients des bras et du thorax.
limit speed: vitesse limite des rotations.
dist: distance minimum des clicks.
memory>b>: lissage des saisies.
k_anc: 0 (jambe droite ancrée immobile), 1 (mobile).
stand: stand by (0: immobile, 1: mobile).
roty: amplitude des rotations aléatoires en y des corps.
inertia: inertie.
bend: angle de courbure.
bend2: vagues.
num: numéro du mouvement en mode MOVE..

HEL

Aide;

HEL

Miroir ou frontal.

MIROR

bascule miroir/vidéo.

READ0

Lit le fichier PARAM0 des paramètres par défaut.

READ

Lit le fichier PARAM des paramètres courants.

WRITE

Sauve les paramètres courants. dans le fichier PARAM

GENERATE

Génère et sauve les dichiers *.js.

COL

Des échelles permettent de choisir les couleurs des corps et du fond:
body r v b: couleur des corps.
back r v b: couleur du fond.
rand: couleur aléatoire autour de r,g,b.

Si INV est actif:
body inv r v b: couleur des corps.
back inv r v b: couleur du fond.

ILLUM

yes/no illum.

EXT

yes/no ext.

FOG

yes/no fog.

CLICK

Revient au mode click (comme :).

INV

Inverse le fond noit/blanc.

SELF

Automappe, if faut activer ILLUM.

AUT

yes/no ajustement automatique de la capture caméra.

BACK

Variation de la couleur du fond.

USER

exécute la fonction env/USER.func qui fait varier sinusoidalement la courbure entre 0 et 4.
On peut écrire autant de fonctions user que l´on veut, par exemple la fonction env/USER1.func se lance par le fichier USER1.js dans lequel figure l´option use=USER&USER1, la fonction USER1 varie la longueur des jambes du premier corps entre .5 et 1.5, les 2 fonctions USER et USER1 seront exécutées simultanément. env/USER2.func qui fait varier la courbure en fonction d´un angle.

SPE

yes/no speed.

CAM

yes/no camera.

CURS

yes/no cursor: si la caméra est active un curseur suit les déplacements d´un spot dirigé vers la caméra et fait pousser un novveau corps sur un corps intercepté.

MOU

yes/no mouse.

VAR

Variation automatique des paramètres.

DISPL

Si un capteur est de type caméra, visualise:
l´image de la caméra, la placer de façon à voir le spectateur en pied,
l´image de la grille d´analyse,
échelles:
displ: dimension des images affichées,
coe: coefficient multiplicateur de la caméra,
dim: dimension de la grille d´analyse.
curs: taille de la mémoire de lissage des coordonnées du curseur,
radius: taille du curseur (passée au device 2).
coe: luminance de l´image de la caméra (passée au device 2).

CODE

yes/no live code: écrire une ligne de code après ;lt; suivi de ENTER.

INI

Initialisation<.

EXI

exit.



























Modifications

Corps
Mouvements
Tester des mouvements
Rotations
Couleurs
Dynamique

Corps

Cliquersur PARAM et changer:
dila: dilatation globale.
thorax: dilatation globale.
leg: dilatation des jambes.
arm: dilatation des bras.
Des modifications plus fines nécessitent de changer le code des fonctions:
build_Thorax(), anc_Thorax()
.
build_Leg(), anc_Leg().
build_Arm(), anc_Arm().

Mouvements

Dans la fonction build_MOVE()
/* Movements description */
/* ===================== */
Name_Mov,="nnn"; nom du mouvement.
s=string(nb);nb++; numéro du mouvement.

memory("thorax",s)=a1,a2,...; liste des angles du thorax.
memory("left_leg",s)=a1,a2,...; liste des angles de la jambe gauche.
memory("right_leg",s)=a1,a2,...; liste des angles de la jambe droite.
memory("left_arm",s)=a1,a2,...; liste des angles du bras gauche.
memory("right_arm",s)=a1,a2,...; liste des angles du bras droit.

memory("axis_thorax",s)=x1,y1,z1, x2,y2,z2,... liste des axes du thorax.
memory("axis_left_leg",s)=x1,y1,z1, x2,y2,z2,... liste des axes de la jambe gauche.
memory("axis_right_leg",s)=x1,y1,z1, x2,y2,z2,... liste des axes de la jambe droite.
memory("axis_left_arm",s)=x1,y1,z1, x2,y2,z2,... liste des axes du bras gauche.
memory("axisright_arm",s)=x1,y1,z1, x2,y2,z2,... liste des axes du bras droit.

Si une mémoire contient la chaine "rand" au lieu d´une liste de nombres, la trajectoire correspondante sera générée aléatoirement à chacun de ses appels.

Il suffid de modifier ces listes.

Tester des mouvements

Cliquer sur MOVE.
Cliquer sur num: numéro du mouvement à tester, qui est joué.
Changer les paramètres de la dynamique:
    ni: durée des mouvements.
    force: coefficient de la force des couples écercés sur les articulations, permet de contrôler la force des mouvements.
    visc: viscosité, permet de ralentir ou accélérer les mouvements.

Rotations

Modifier la fonction body_roty.
Les rotations en y sont aléatoires d´amplitude Roty[2] modifiable dans PARAM (body roty).

Couleurs

Couleur de base Col_Body=1,.4,.2;
Les couleurs des corps sont calculées dans la fonction set_col_Body().
en fonction (). numéro du corps dans Nb_Body[0].

Dynamique

Les mouvements sont génér&eacite;s par
traj(ni)force(...)rota(...)vol(id)period(-1)abc;
Les paramètres sont mofifiables dans PARAM:

force et viscosité sont modifiables dans
L´inertie qui est gérée dans la fonction inertia() du fichier pillobolus.func
Les limit speed rota permettent ´éviter une explosion des rotations cumulées.
roty: rotation en y des corps.
bend: courbure.
bend2: vagues.

Driver

La taille de l´image captée dim1 et l´originr x,y peuvent être modifiées dans le fichhei WrbCam.js:
WshShell.Run("WebCam.exe dim1 128 x y");



























Raccourcis clavier

A AUT.
B BACK.
C CAMERA.
D DISPL.
E EXT.
F FOG.
I ILLUM.
M MOUSE.
S SPE.
c CURS.
h aide.
i INV.
j INI.
m MIROR.
p: affiche les paramètres.
       validations des menus (vert: ON, blanc: OFF).
       Nombre de leaders
       Nombre de corps
       Nom du mouvement courant
q quitte.
s SELF.
u USER.
v VAR. : cache les menus.

Options

aut: AUT.
bac: BACK.
ben=b1,b2: fait Bend[2]=b1, Bend2[2]=b2.
cam: camera.
cur: cursor.
colcon: couleur constante.
colran=c: couleur d´aléatoire c.
dis: displ camera image.
ext: EXT.
ext=)e,c: coefficiets d´extension.
eye: lance interaction("totsy_eye") permettant de changer l´poeil à la souris.
foc=f: modifie la focale.
fogyes fogf:
ill: ILLUM.
inv: INV.
mou: fait Mouse=.005: rotation en y du premier corps= Mouse*(speed mouse).
mou=m: fait Mouse=m.
sel: SELF.
set: appelle la fonction set_PARAM() d´initialisation des paramètrespar défaut, ce qui permet de changer le fichier PARAM en cliquant sur PARAM->WRITE (ceci ne doit être fait que si on ajoute de nouvaux paramètres, il faudra alors modifier aussi les fichier PARAMn.
spe: active le mode speed SPE.
sta: STAND.
use: USER.
use=nnn: la fonction USER est nnnuse=USER&USER1: les 2 fonctions USER et USER1 seront exécutées.
var: VAR.
: inhibe les clics.

Programme

Driver de la caméra
Corps
Forces
Mouvements

Driver de la caméra

La capture de l´image de la caméra utilise un driver écrit en C.

Corps

Nb_Body[0]=numéro du derniere corps cliqué.
Nb_Body_Max: nombre maximum de corps.
Click:
       v=numéro du volume cliqué
       s=numéro du sommet cliqué sur ce volume
Un corps cliqué contient la propriété meta=D taille de ce corps, le corsp généré prend la taille .75*D et sa propriété meta=.75*D. Le premier corps a la propriété meta=D0.

Nx,Ny: nombre de sections en x et en y.

Camera: 0 (no camera), 1 (yes camera).

D: dimension de base.
Dila: taille des corps.
Dila_Thorax: taille du thorax.
Dila_Leg: taille des jambes.
Dila_Arm: taille des bras.
K_Thorax: rayon du thorax.
K_Leg: rayon des jambes.
K_Arm: rayon des bras.

Limit_Speed: limit speed rota.


Mouse: 0 (no mouse), 1 (yes mouse).

Period: période d´affichage.

Type: type de variation des mouvements:
       RAND: aléatoire
       LINE: linéaire
       CONS: constant

Forces

Force: force rota.
Visc=viscosité.
Stif: raiduer des ressorts Visc_Spr
: viscosité des ressorts
Force_Straight: force de redressement.
Vist_Straight: viscosité de redressement.
Coe_Min1,Coe_Min2: forces minimum pour normal et speed. Bend, Bend2: angle de courbure.


K_Anc: coefficient de rotation des jambes droites (ancrées).

Mouvements


Nb_Move: nombre de mouvements.
Nb_Vol: nombre de volumes.
Ni: durée des trajectoires.
Ni_VAR: durée de changement des mouvements.

Dysfonctionnements

Caméra

Caméra

Il faut une webcam dont on peut changer la taille et la position.
Il faut modifier interactivement à la souris ces paramètres de façon à amener l´image de la caméra à recouvrir exactement l´image de celle-ci dans le programme (qui apparait en bas et à gauche de l´écran.
Il faut placer le spectateur de façon à ce qu´il (ou elle) apparaisse en pied et coupé au viveau des épaules.

Il se peut que plusieurs drivers de la caméra tournent en même temps (ce qui produit des interférences): les stopper tous et relancer pillobolus.