PILOBOLUS VIRTUELS
Michel Bret & Marie-Hélène Tramus
février 2020
|
Certains liens ne seront pas actifs s´il n´y a pas de connexion internet.
Pilobolus Virtuel est un remake réalisé par Michel Bret de l'installation Corps & Graphie (1997) de Marie-Hélène Tramus (écrite en langage anyflo). Le spectateur construit de manière interactive un pilobolus (clin d’œil à la compagnie de danse éponyme), c'est-à-dire un arbre de corps dansants. Cette installation propose donc au spectateur de devenir un chorégraphe en composant, à partir de plusieurs corps de danseurs virtuels en mouvement, une sorte d'organisme végétal vivant se mouvant en temps réel. Il clique n'importe où sur un corps virtuel et un nouveau corps « pousse » à cet endroit, et ainsi de suite en cliquant plusieurs fois.
Principe
Origine
Reprise de l´installation Corps & graphie de
Marie-Hélène Tramus (écrite en
langage anyflo 1997) construisant interactivement des
pilobolus virtuels: cliquer sur un corps fait apparaitre d'autres corps définissant ainsi
une arborescence de corps dynamiques évoluant au
grès du capteur incitant le spectateur à danser
interactivement.
Images
Contrôle
interaction
call back USER
construction des corps: modifier les fonctions build_*.
Interaction
Lancement
Cliquer sur:
pilobus_mouse.js: souris.
pilobus_camera.js: caméra.
USER.js: utilise la fonction USER.
Enfoncer la touche : (deux points) pour avoir les
menus.
Au lancement les paramètres par défaut
sont lus dans fichier PARAM, certains
paramètres peuvent être modifiés par les
options.
Mode click
Un corps s´affiche, cliquer sur lui: une chaine de
Generate[2] corps (option gen)
ancrés au point du premier corps le plus proche du point
cliqué est générée, et ainsi de suite
(jusqu´à Nb_Body_Max[2] corps, modifiable
sur DISPL->max), le processus est
alors réinitialisé. La focale est calculée
en fonction du nombre de corps nb par:
f=1+(Nb_Body[0]-1)/30;traj(25)foc(1,f)view(1)abs;
À 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, la
focale est réinitialisée à 1.
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.func est un
call back exécutée à chaque image si
USER est actif.
env/USER.func, env/USER1.func, env/USER2.func,
env/USER3.func sont différents exemples.
Construction des mouvements
Syntaxe
Dans la fonction build_MOVE()
set_name_move("nnn");
nom du mouvement.
s=string(nb);nb++; numéro du corps.
Period,=p: p=-1 (aller retour), p=1 (période).
Bend_Thorax,=bd;Bend_Leg,=bd;Bend_Arm,=bd; bend des items pour ce mouvement.
À chaque item (thorax, left_leg, right_leg, left_arm,
right_arm) sont associées des mémoires de noms
item_transf_s contenant les paramètres des
trajectoires associées.
La durée d´une trajectoire peut être
spécifiés;e par memory(item_transf_ni)=k; cette
durée sera alots k*Ni[2], ce qui permet
d´affecter des durées à chaque item d´
un mouvement. En changeant ni dans MOVE les durées
de toutes les trajectoires seront modifiées globalement.
Exemple:
memory(thorax_roty0_ni)=.5; le thorax tourne 2 fois plus
vite en y.
Mouvements dynamiques
memory("item_rota",s)=a1,a2,...;
liste des angles.
les vitesses de cestrajectoires associées sont de type
traj(ni)force(...)rota(a1,a2,...)vol(item)period(per)abs
Exemples:
memory("thorax_rota",s)=.25*PI,-.3*PI,.25µpi;
liste des angles de la trajectoire dynamique du thorax.
Trajectoires de bend:
w=adjust(Ni[2])format(1)line(0,4,0);
définit une ligne de ni valeurs passant par 0,4 et 0
memory("Bend_Arm")=0,1,Ni[2],w;
définit une mémoire comportant un compteur, un incrémet de compteur, ni et la ligne.
Méme chose pour Bend_Thorax et Bend_Leg.
mouvements cinématiques
memory("item_rotx",s)=a1,a2,...; liste des angles en x.
memory("item_roty",s)=a1,a2,...;
liste des angles en y.
memory("item_rotz",s)=a1,a2,...;
liste des angles en z.
memory("item_axis",s)=x1,y1,z1, x2,y2,z2,...;
liste des axes.
memory("right_leg_roty",s)=0,2*PI; trajectoire
cinématique roty de tout le corps (car right_leg est le
leader de ce corps).
Mouvements aléatoires
Si le nom d´une mémoire se termione par
"_rand", la
trajectoire correspondante sera générée
aléatoirement à chacun de ses appels.
Exemples:
memory("thorax_rota_rand",s)=a11,a12, a21,a22,...;
des trajectoires dynamiques d´angles a1=rand2f
(a11,a12),
a2=rand2f(a21,a22),... seront générées
à chaque appel.
Pratiquement Il suffit de modifier ces listes.
Remarque:
Toute les combinaisons de ces options sont possibles pour
tous les items d´un même corps.
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.
Capteurs
Mouse
Raccourcis clavier M.
Par défaut la vitesse de déplacement de la souris
est utilisée pour générer des couples de
forces.
Pour générer des chaines de corps changer
gen.
Régler la sensibilité de la souris avec coe
Caméra
Raccourcis clavier C.
displ: changer la taille de l´image affichée.
eps: changer la rotation en y (eps petit roty grand).
gen: générer des chaines de corps.
coe: changer la sensibilité de la caméra (augmenter pour un éclairement faible),
peut être forcé dans pilobolus_camera.js
par l´option cam=c.
Si g est actif
max g: seuil de
déclenchement de la désignation.
cpt: compteur permettant de ralentir cet effet.
down: coefficient de plier.
max: nombre maximum de corps.
Option
cam: les déplacements de l´image de la caméra dans une grille
sont utilisées 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.
pilobolus_camera.js lance:
anyflo.exe pour la fonction
pilobolus("cam") en mode caméra et le driver
WebCam.exe
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, en mode
yes speed la
dérivée première (vitesse) est
envoyée.
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 sur fond uniforme (pas
d´objet trop clair).
Après avoir lancé
pilobolus_camera.js
Lancer une webcam et amener son image à
gauche.
En mode
no speed (enfoncer la touche
S), enfoncer la touche
D ce qui a pour effet d´afficher l´image de la
caméra dans une petite fenêtre en bas et à
gauche de l´écran.
Redimensionner et déplacer l´image de la
caméra de façon à ce qu´elle
couvre exactement la petite fenêtre. Orienter alors la caméra de façon
à ce que le spectateur y figure en pied, les mains au
milieu.
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, sinon modifier les paramètres
eps
(diminuer pour augmenter le déclenchement de la
rotation en y) et
coe (augmenter pour
augmenter la sensibilité).
br>Ne pas oublier d´enfoncer la touche
>S pour
revenir en mode speed.
Laisser le spectateur libre de ses mouvements et
expérimenter l´interaction.
En mode
curseur et en amenant le spot
d´un laser de pointage sur un personnage on peut
construire un pilobolus dynamique de complexité
limitée à Nb_Body_Max.
Remarque:
en image étendue l´image de la webcam peut
être déplacée dans la fenêtre
caché et l´image d´anyflo peut alors
être affichée plein écran.
Fichier de lancement
Dans le fichier
pilobolus_camera.js:
WshShell.Run("anyflo.exe lan=\"pilobolus((\\\"cam=2,256,128;mir;ill;inv;spe;aut;dis\\\"))\" orx=425")
2: coefficient multiplicateur de la luminance de
l´image transmise (sensibilité de la
cameéra).
256 est la taille de l´image captée.
128 est la taille de l´image transmise.
mir pour effet miroir.
ill pour yes illum.
inv pour
INV. (qui
spe pour
SPE.
aut pour
AUT.
dis pour
DISPL.
en image étendue ne pas mettre
orx=425 (qui
laisse une marge à gauche pour afficher l´image
de la caméra).
Menu
HEL
---->
Aide.
:
DOC
---->
Ce fichier.
BODY
HEL
Aide
SCAL
Échelles des paramètres:
dila thorax leg arm: dilatations.
tran y: placement du leader en y.
ext coe flag: extension.
spring rota visc: ressorts.
bend:courbure globale.
bend2:courbure locale.
TEST
Permet de modifier le corps.
MOVE
Paramètres des mouvements.
num: teste le mouvement numéro
num.
HEL
aide
STAND
immobile, permet de tester
les désignations et les constructions des corps.
RAND
choix aléatoire des mouvements.
LINEAR
variation linéaire des mouvements.
CONSTANT
mouvement constant.
PARAM
HEL
Aide.
Échelles
Des échelles permettent de modifier les paramètres
(enfocer la touche
i pour une meilleure visibilité
), après avoir modifier des paramètres cliquer sur
WRITE pour les conserver:
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 nombreux corps.
ext,coe: coefficients d´extension.
spring rota, visc: couples des ressorts.
period: période d´affichage (1: lent, 50: rapide).
force,min,max,visc,stright: force, minimum, 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: lissage des saisies.
stand: stand by (0: immobile, 1: mobile).
roty: amplitude des rotations en y du premier corps.
roty2: amplitude des rotations en y des autres corps.
down: amplitude de plier du premier corps
inertia: inertie.
bend: angle de courbure.
bend2: vagues.
curs,radius curseur.
num: numéro du mouvement en mode
MOVE.
eps réglage du déclenchement de la rotation en y du premier corps (petit +, grand -).
coe
gen
CURS
Si g est actif modifier:
g max=Max_g[2]: seuil de
génération des corps.
En mode
curseur:
modifier les limites des
couleurs du curseur, ou choisir ces limites
red,gre,blu,whi.
memory curs: lissage du curseur.
dila curs: permet d´ajuster les
déplacement du curseur.
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
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 (raccourcis clavier
I).
EXT
yes/no ext (raccourcis clavier
E).
FOG
yes/no fog (raccourcis clavier
F).
CLICK
Revient au mode
click
(raccourcis clavier
:).
INV
Inverse le fond noir/blanc (raccourcis clavier i).
SELF
(raccourcis clavier s)
Automappe, if faut activer ILLUM.
AUT
Raccourcis clavier A.
yes/no ajustement automatique de la capture caméra, en mode DISPL la ligne verticale verte doit
rester au milieu lorsque le spectateur se déplace
(raccourcis clavier A).
BACK
Raccourcis clavier B.
Variation de la couleur du fond (raccourcis clavier B).
USER
Raccourcis clavier u.
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 camera (raccourcis clavier S).
MOU
yes/no mouse (raccourcis clavier M).
VAR
Variation automatique des paramètres.
DISPL
Raccourcls clavier D.
gen: nombre de corps générés en chaine.
max: nombre maximum de corps.
again: nombre maximum de cliques avant que l
dynamique ne soit rendue active.
Si le capteur est mouse:
coe: coefficient de la souris.
Si le capteur est caméra:
visualise l´image de la caméra, la placer de
façon à voir le spectateur en pied,
des segments représentant les variations des
vitesses des CG des fenêtres d´analyse,
échelles:
displ: dimension de l´image affichée,
eps
gen: nombre de corps générés
cam: coefficient multiplicateur de la
luminance de la caméra.
down: coefficient de pliure des thorax.
CODE
yes/no live code: écrire une ligne de code après < suivi de ENTER.
Exemple hors capteurs:
traj(50)force(1,0,0,1,0,0)rota(0,PI)vol(Right_Arm)period(1)abs
INI
Initialisation (raccourcis clavier j), la dynamique
est désactivée jusqu´à ce que
again corps aient été cliqué
(accessible en mode DISPL), ce qui
permet de désigner tranquillement quelques corps).
EXI
exit (raccourcis clavier q).
Modifications
Corps
Cliquer sur PARAM et changer:
dila: dilatation globale.
thorax: dilatation du thorax.
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().
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 du numéro du corps dans Nb_Body[0].
Dynamique
Les mouvements dynamiques sont
générés par
traj(ni)force(...)rota(...)vol(id)period(-1)abs;
Les paramètres sont modifiables dans
PARAM:
force et viscosité sont modifiables dans
L´inertie qui est gérée dans la
fonction inertia()
du fichier
pilobolus.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 WebCam.js:
WshShell.Run("WebCam.exe dim1 128 x y");
Raccourcis clavier
A AUT.
B BACK.
C CAMERA.
D DISPL.
E EXT.
F FOG.
G génèrate 1/4 corps si click;
I ILLUM.
M MOUSE.
S SPE.
a period(25) INI.
: yes/no affiche les menus.
Raccourcis clavier webcam:
c 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 nouveau corps sur un corps
intercepté.
e: Clique gauche: modifie l´oeil.
g yes/no génération automatique des
corps en fonction des variations du capteur.
h aide.
i INV.
j INI.
m yes/no miroir
p: affiche les paramètres.
validations des menus (vert: ON, blanc: OFF).
q stop programme.
s yes/no self (automapping).
u yes/no call back USER.
v yes/no variation des mouvements.
: yes/no cache les menus.
w: sauve l´image sous le nom Axxxx.bmp,
xxxx est automatiquement incrémenté.
webcam:
Options
aut: yes AUT.
aut=a: a=1 yes AUT, a=-1 no AUTO.
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.
eps=erotationen y du leader absolu Lead.
ext=e,c: coefficiets d´extension.
eye: lance interaction("roty_eye")
permettant de changer l´poeil à la souris.
foc=f: modifie la focale.
fog yes fog.
g: génération automatique des corps.
gen=n: génère n corps si click.
Ce nombre est dans Generate[2] editable on scale gen of menu .
ill: ILLUM.
inv: INV.
mir=1: yes mirror, -1 no mirror (by default).
mou: does Mouse=.005: y rotation of first body=
Mouse*(speed mouse).
mou=m: does Mouse=m.
mou;wri: press w allowing
to save an
image under name VP0001.bmp.
mou;wri=n: press wkey allowing,to save
an image under name VPn.bmp.
nbi: number of saved images (250 by
default).
per(p): period(p) (25 by default).
sel: SELF.
set: call reset function
set_PARAM() of parametres by defaulT
which allows changing file PARAM by
clicking on
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.
wri: nom des images sauvées.
: inhibe les clics.
Programme
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.
[Min,Max] intervalle des mij.
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.
Mouvements
Nb_Move: nombre de mouvements.
Nb_Vol: nombre de volumes.
Ni: durée des trajectoires.
Ni_VAR: durée de changement des mouvements.
Mémoires
Foction pilobolus.func:
memory("Mouse_m0")ini(6);
lissage 0 souris
memory("Mouse_m1")ini(6);
lissage 1 souris
memory("m0")ini(6);
lissage 0 caméra
memory("m1")ini(6);
lissage 1 caméra
memory("ax0")ini(6);
lissage x0 caméra
memory("ax1")ini(6);
lissage x1 caméra
memory("back_r")ini(6);
lissage rouge back
memory("back_g")ini(6);
lissage vert back
memory("back_b")ini(6);
lissage bleu back
memory("down")ini(2);
lissage baisser
Mémoires de webcam.func
Picking
La désignation se fait (en mode souris) en cliquant
sur un corps, ou (en mode curseur) en dirigeant le spot sur un
corps, elle est programmée dans la fonction
mouse_vol().
Une chaine de corps (en nombre
Generate[2] modifiable sur
->gen)
est générée au point
désigné.
Dysfonctionnements
Touches
Une des touches:
A B C D E F I M S a c g h i j m p q s u v
du clavier ont pu être involontairement
enfoncées ce qui peut déclencher une action
(voir Raccourcis clavier).
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.
Il se peut que plusieurs drivers de la caméra
tournent en même temps (ce qui peut être du à
une sortie anormale du programme, en effet celui-ci stoppe le
driver sur un exit) ce qui produit des interférences:
les stopper tous et relancer pilobolus.
Debug
Il se peut, à la suite d´une erreur
sévère dans une fonction, que le programme se
relance sans fin; dans ce cas stopper le programme (par
CtrlHaltSuppr), si le problème perdure faire un
reset de la machine, puis lancer video.js et relancer pilobolus() dans l´interpréteur,
un message d´erreur permettra de faire un diagnostique.
VIRTUAL PILOBOLUS
Michel Bret & Marie-Hélène Tramus
février 2020
|
Some links will not be active if there is no internet connection.
Virtual Pilobolus is a remake realized by Michel Bret of the installation Corps & Graphie (1997) by Marie-Hélène Tramus (written in anyflo language). The spectator build interactively a pilobolus (a reference to the eponymous dance company), that is to say a tree of dancing bodies. So this installation proposes to the spectator to become a choreographer by composing, from several bodies of virtual dancers in movement, a kind of living vegetal organism moving in real time. He clicks anywhere on a virtual body and then a new one “grows” at this place, and so on by clicking several times.
Principle
Origine
Resumption of installation Corps & graphie of
Marie-Hélène Tramus (written in language
anyflo 1997) interactively building
pilobolus virtuels: clicking on a body causes other bodies to appear, thus defining a tree structure of dynamic bodies evolving with the sandstone of the sensor, encouraging the viewer to dance interactively.
.
Images
Control
Interaction
Launch
Click on:
pilobus_mouse.js: mouse.
pilobus_camera.js: camerra.
USER.js: using function
USER.
Presse : key (two dots ) for geting the
menus.
At launch, the default parameters are read from file PARAM, some parameters can be modified by the
options.
Click mode
A body is displayed, click on it: a string of Generate [2] bodies (option gen)
anchored to the point of the first body closest to the clicked point is generated, and so on (up to Nb_Body_Max [2] body, modifiable Nb_Body_Max[2] corps, modifiable
sur DISPL->max), the process is then reset. The focal length is calculated according to the number of bodies nb by:
f = 1 + (Nb_Body [0] -1) / 30; traj (25) foc (1, f) view (1) abs;
With each click dynamic paths of rotational forces (torques) as well as interpolation paths (by rotations) of the axes are generated. The description list of these trajectories are in memories initialized in the function build_MOVE().
Note
Press j key o reset, the focal length is reset to 1.
Parameters
For geting menu press
: key (two dots).
Note :
You have to quit this mode (pressing again
: key or clicking on CLICK)
to find the mode click.
Menu
PARAM allows you to modify and save the parameters .
USER< function/h3>
Function env/USER.func is a
call back executed at each image if
USER is active..
env/USER.func, env/USER1.func, env/USER2.func,
env/USER3.func are different examples.
Movement construction
Syntax
In function build_MOVE()
set_name_move("nnn");
name of the movement.
s=string(nb);nb++; body number
Period,=p: p=-1 (round trip), p=1 (période).
Bend_Thorax,=bd;Bend_Leg,=bd;Bend_Arm,=bd; bend of items for this movement.
At each item (thorax, left_leg, right_leg, left_arm,
right_arm) are associated memories name
item_transf_s containing the parameters of the
associated trajectories.
The duration of atrajectory can be
specified by memory(item_transf_ni)=k; this
duration will be then k*Ni[2], which makes it possible to assign durations to each item of a movement.
By changing ni in MOVE the durations of all the trajectories will be modified globally. b>Example:
En savoir plus sur ce texte source
Vous devez indiquer le texte source pour obtenir des informations supplémentaires
Envoyer des commentaires
Panneaux latéraux.
Exemple:
memory(thorax_roty0_ni)=.5; the thorax turns twice as fast in y.
Dynamic movements
memory("item_rota",s)=a1,a2,...;
list of angles.
the associated cestrajectory speeds are of type
traj(ni)force(...)rota(a1,a2,...)vol(item)period(per)abs
Examples:
memory("thorax_rota",s)=.25*PI,-.3*PI,.25µpi;
list of angles of dynamic trajectory of thorax.
Trajectories of bend:
w=adjust(Ni[2])format(1)line(0,4,0);
defines a row of ni values passing through 0.4 and 0
memory("Bend_Arm")=0,1,Ni[2],w;
defines a memory comprising a counter, a counter increment, ni and the line.
Same thing for Bend_Thorax et Bend_Leg.
Kinematic movements
memory("item_rotx",s)=a1,a2,...;
list of x angles.
memory("item_roty",s)=a1,a2,...;
list of y angles..
memory("item_rotz",s)=a1,a2,...;
list of z angles.
memory("item_axis",s)=x1,y1,z1, x2,y2,z2,...;
lis of axes.
memory("right_leg_roty",s)=0,2*PI; trajectoire
roty kinematic of every bodies (because right_leg is
leader of the body).
Random movements
If teh name of a memory ends with
"_rand", The corresponding trajectory will be generated randomly for each of its calls.
Examples:
memory("thorax_rota_rand",s)=a11,a12, a21,a22,...;
dynamic trajectories of angles a1=rand2f
(a11,a12),
a2=rand2f(a21,a22),... will be randomly generated at each call.
Practically just modify these lists .
Note:
All the combinations of these options are possible for all the items of the same body. .
Testing movements
Click on MOVE.
Click on num: number of the movement to be tested, which is played.
Changethe parameters of the dynamic:
ni: duration of movements.
force: coefficient of the force of the torques drilled on the joints, makes it possible to control the force of the movements..
visc: viscosity, allows to slow down or accelerate the movements.
Sensors
Mouse
Keyboard shortcut M.
By default, the speed of movement of the mouse is used to generate pairs of forces.
To generate change body strings
gen.
Adjust the sensitivity of the mouse with coe
Camera
Keyboard shortcut C.
displ: change the size of the displayed image.
eps: change y rotation (eps small roty big).
gen: generate body chains.
coe: change the sensitivity of the camera (increase for low illumination), can be forced into pilobolus_camera.js
by option cam=c.
If g is active max g: designation trigger threshold. .
cpt: counter to slow down this effect .
down: fold coefficient .
max: maximum number of bodies .
Option cam: the movements of the camera image in a grid are used to generate couples of forces applied to the legs, arms and torso of the first body.
Menu DISPL (D key) view the camera.
pilobolus_camera.js launches:
anyflo.exe for pilobolus("cam")
function in mode camera and the driver WebCam.exe
This driver, very simple, does not require any particular device, it captures the image of the camera and sends it, via a shared memory, to anyflo, in
yes speed yes speed mode the first derivative (speed) is sent.
Note:
or the moment a Windows dialog window is displayed, you have to click on OK (which is due to an incompatibility of VisualC ++. 6.0 with the current system).
Adjusting the camera
Any web cam is suitable on a uniform background (no object too bright).
After launching ;
pilobolus_camera.js
Start a webcam and bring its image to the left..
In mode no speed (press
S), press
D key which has the effect of displaying the image of the camera in a small window at the bottom left of the screen. .
Resize and move the camera image so that it exactly covers the small window. Then orient the camera so that the viewer is standing there, hands in the middle.
Make him raise his left arm, then his right arm, then rotate and lower, if the settings are correct the character must do the same, otherwise modify the parameters
eps
(decrease to increase the trigger for y-rotation) and coe (increase to increase sensitivity).
Do not forget to press S key to return to speed mode.
Leave the viewer free to move around and experience the interaction.
In mode curseur and by bringing the spot of a pointing laser on a character one can build a dynamic pilobolus of limited complexity to Nb_Body_Max..
Note:
In extended image the webcam image can be moved in the hidden window and the anyflo image can then be displayed full screen.
Launch file
In pilobolus_camera.js file:
WshShell.Run("anyflo.exe lan=\"pilobolus((\\\"cam=2,256,128;mir;ill;inv;spe;aut;dis\\\"))\" orx=425")
2: multiplying coefficient of the luminance of the transmitted image (sensitivity of the camera).
256 size of the captured image.
128 size of the transmitted image.
mir for mirror effect.
ill for yes illum.
inv for INV.
spe for SPE.
aut for AUT.
dis for DISPL.
in extended image do not put orx=425 (which leaves a left margin to display the camera image).
Menu
HEL
---->
Help.
:
DOC
---->
This file.
BODY
HEL
Aide
SCAL
Parameter scales:
dila thorax leg arm: dilatations.
tran y: placement of the leader in y.
ext coe flag: extension.
spring rota visc: springs.
bend: global curvature.
bend2: local curvature.
TEST
Allows you to modify the body.
MOVE
Parametres of movements.
num: testing movement number num.
HEL
help
STAND
motionless, allows the designations and constructions of bodies to be tested. .
RAND
random choice of movements.
LINEAR
linear variation of movements.
PARAM
HEL
Aide.
Scales
Scales allow parameters to be changed:
(press i key for better visibility), after modifying the parameters click on
WRITE to keep them.
dila thorax leg armtran y: go up or down the bodies.
foc: change the focale, for example jib = 1.5 decreases the size of the bodies to allow stacking of many bodies.
ext,coe: extension coefficient.
spring rota, visc: torques of springs.
period: display period (1: slow, 50: fast).
force,min,max,visc,stright: force, minimum, maximum and viscosity of movements, adjustment coefficient.
coe arm left right, thorax: coefficients of
legs and chest.
limit speed: speed limites of rotations.
dist: minimum distance of clicks.
memory: smoothing of seizures .
stand: stand by (0: motionless, 1: motion).
roty: amplitude of the rotations in y of the first body.
roty2: amplitude of the rotations in y of other bodies.
down: amplitude of bending of the first body s
inertia: inertia.
bend: angle of curvature .
bend2: waves.
curs,radius cursor.
num: number of the movement in mode
MOVE.
eps adjustment of the triggering of the y-rotation of the first body (small +, large -)
coe
gen
CURS
If g is active change:
g max=Max_g[2]: body generation threshold.
En mode cursor:
Change the limits of the cursor coloror, or choose those limits red,gre,blu,whi.
memory curs: cursor smoothing .
dila curs: allows you to adjust the cursor movements.
READ0
The PARAM0 file of default settings.
READ
Reading PARAM file of current parameters.
WRITE
PARAM.
Writing current parametersdans in file
PARAM
COL
Scales allow you to choose the colors of the bodies and the background:
body r v b: bodies color.
back r v b: background color.
rand: andom color around r,g,b.
If INV is active:
body inv r v b: bodies color.
back inv r v b: background color.
ILLUM
yes/no illum (keyboard shortcut I).
EXT
yes/no ext (keyboard shortcut E).
FOG
yes/no fog (keyboard shortcut F).
CLICK
Return to mode click
(keyboard shortcut :).
INV
Inverse le fond black/white (keyboard shortcut i).
SELF
(keyboard shortcut s).
Automappe, You have to active ILLUM
AUT
Keyboard shortcut A.
yes/no automatic adjustment of the camera capture, in DISPL mode the green vertical line should stay in the middle when the viewer is moving (keyboard shortcut A).
BACK
keyboard shortcut B.
Background color variation (keyboard shortcut B).
USER
keyboard shortcut u.
Executes the
env/USER.func function
which causes the curvature to vary sinusoidally between 0 and 4.
You can write as many user functions as you want, for example the function
env/USER1.func is started by the file USER1.js in which appears the option use = USER & USER1, the function USER1 varies the length of the legs of the first body between .5 and 1.5, the 2 functions USER and USER1 will be executed simultaneously..
env/USER2.func which varies the curvature according to an angle;
SPE
yes/no speed camera (keyboard shortcut S).
MOU
yes/no mouse (keyboard shortcut M).
VAR
Automatic variation of parameters.
DISPL
Automatic variation of parameters D.
gen: number of bodies generated in a chain.
max: maximum number of bodies..
again: maximum number of clicks before dynamic is made active .
if sensor is mouse:
coe: mouse coefficient.
if sensor is camera:
view the camera image, to be placed so as to see the viewer standing,
segments representing the variations of the speeds of the CG of the analysis windows,
scales:
displ: size of the displayed image,
eps
gen: number of bodies generated
cam: camera luminance multiplier.
down: thorax fold coefficient .
CODE
yes/no live code: write a line of code after < Example excluding sensors:
traj(50)force(1,0,0,1,0,0)rota(0,PI)vol(Right_Arm)period(1)abs
INI
Initialization (keyboard shortcuts j), the dynamics are deactivated until again bodies have been clicked (accessible in
DISPL) mode), which allows you to quietly designate a few bodies).
EXI
exit (keyboard shortcut q).
Modifications
Bodies
Click on PARAM and change:
dila: global dilatation.
thorax: thorax dilatation .
leg:legs dilatation.
arm: arms dilatation.
More detailed modifications require changing the function code:
build_Thorax (), anc_Thorax ().
build_Leg (), anc_Leg ().
build_Arm (), anc_Arm ().
Rotations
Change function body_roty.
The rotations in y are random with an amplitude Roty [2] which can be modified in PARAM (body roty).
Colors
Basic colos Col_Body=1,.4,.2;
The colors of the bodies are calculated in the function set_col_Body().
according to the body number in Nb_Body[0].
Dynamic
dynamic movements are generated by:
traj(ni)force(...)rota(...)vol(id)period(-1)abs;
parameters are editable in
PARAM:
force and viscosity are editable.
The inertia which is managed in the inertia()
function of the file
pilobolus.func
limit speed rotaallow to avoid an explosion of cumulative rotations.
roty: y-rotation of bodies.
bend: curvature.
bend2: waves.
Driver
The size of the captured image dim1 and the origin x, y can be modified in the WebCam.js file:
WshShell.Run("WebCam.exe dim1 128 x y");
Keyboard shortcuts
A AUT.
B BACK.
C CAMERA.
D DISPL.
E EXT.
F FOG.
G génèrate 1/4 corps si click;
I ILLUM.
M MOUSE.
S SPE.
a period(25) INI.
: yes/no affiche les menus.
Keyboard shortcut webcam:
c yes/no cursor: if the camera is active, a cursor follows the movements of a spot directed towards the camera and causes a new body to grow on an intercepted body.
e: left click change eye.
g yes/no automatic generation of bodies based on sensor variations..
h help.
i INV.
j INI.
m yes/no miroir
p: show parameters .
menu validations (green: ON, white: OFF).
q stop program.
s yes/no self (automapping).
u yes/no call back USER.
v yes/no movement
variations.
: yes/no hide menus.
w: saves the image under the name Axxxx.bmp, xxxx is automatically incremented. ,
webcam:
Options
aut: yes AUT.
aut=a: a=1 yes AUT, a=-1 no AUTO.
bac: BACK.
ben=b1,b2: fait Bend[2]=b1, Bend2[2]=b2.
cam: camera.
cur: cursor.
colcon: constant color
colran=c: random color
dis: displ camera image.
ext: EXT.
eps=e y rotationof absolute leader Lead.
ext=e,c: extension coefficiets
eye: launche interaction("roty_eye")
which allows changing mouse position.
foc=f: change focale.
fog yes fog
.
g: bodies automatic generation..
gen=n: generation of n bodies if click.
This number is in Generate[2] editable on
scale gen du menu .
ill: ILLUM.
inv: INV.
mir=1: yes miroir, -1 no miroir
(by default).
mou: does Mouse=.005: y rotation of first body=
Mouse*(speed mouse).
mou=m: does Mouse=m.
mou;wri: press w key allows
saving an image
une image sous le nom VP0001.bmp.
mou;wri=n: enfoncer la touche wpermet de sauver
under name VPn.bmp.
nbi: number of saved images sauv(250 ).
by default
per(p): period(p) (25 par défaut).
sel: SELF.
set: call set_PARAM() reset function of default parameters,
which allows to change the file PARAM by clicking on
PARAM->WRITE
(this should only be done if new parameters are added, then the PARAMn files must also be modified).
spe: activate mode speed SPE.
sta: STAND.
use: USER.
use=nnn: USER function is nnnuse=USER&USER1: both functions USER and
USER1 will be executed.
var: VAR.
wri: name of saved images.
: inhibits clicks
.
Programme
Driver of camera
Capturing the camera image uses a driver written in C..
Corps
Nb_Body[0]=number of the last body clicked.
Nb_Body_Max: maximum number of bodies.
Click:
v=clicked body number
s=vertex clicked number on this volume
A clicked body contains properties:
meta=D body size, generated body takes
size .75*D and its property
meta=.75*D. First body
has property meta=D0.
Nx,Ny: numebr of x and y sections.
Camera: 0 (no camera), 1 (yes camera).
D: basic size.
Dila: bodies size.
Dila_Thorax: thorax size.
Dila_Leg: legs size.
Dila_Arm: arms size.
K_Thorax: thorax radius.
K_Leg: jambes radius.
K_Arm: bras radius.
Limit_Speed: limit speed rota.
Mouse: 0 (no mouse), 1 (yes mouse).
Period: display rate.
Type: movement variation type:
RAND: random
LINE: linear
CONS: constant
Forces
Force: force rota.
[Min,Max] interval of mij.
Visc=viscosity;.
Stif: spring stiffness
Visc_Spr: spring viscosity
Force_Straight: righting force .
Vist_Straight: righting viscosity.
Coe_Min1,Coe_Min2: minimum forces for normal et speed.
Bend, Bend2: curvature angle.
Mouvements
Nb_Move: number of movements.
Nb_Vol: number of volumes.
Ni: duration of trajectories.
Ni_VAR: duration of change of movements.
Mémoires
pilobolus.func func:
memory("Mouse_m0")ini(6);
smoothing 0 mouse
memory("Mouse_m1")ini(6);
smoothing 1 mouse
memory("m0")ini(6);
smoothing 0 camera
memory("m1")ini(6);
smoothing 1 camera
memory("ax0")ini(6);
smoothing x0 camera
memory("ax1")ini(6);
> smoothing x1 camera
memory("back_r")ini(6);
> smoothing red back
memory("back_g")ini(6);
smoothing green back
memory("back_b")ini(6);
smoothing blue back
memory("down")ini(2);
smoothing lower
webcam.func memory
Picking
The designation is done (in mouse mode) by clicking on a body, or (in cursor mode) by directing the spot on a body, it is programmed in the function mouse_vol().
A string of bodies (in number
Generate[2] Generate[2] edifiable on
->gen) is generated at the designated point.
Malfunctions
Keys
One of keyboard keys:
A B C D E F I M S a c g h i j m p q s u v
may have been unintentionally pressed which may trigger an action
(voir Keyboard shortcuts).
Camera
You need a webcam whose size and position can be changed.
These parameters must be interactively modified with the mouse so as to bring the image of the camera to exactly cover the image of this one in the program (which appears at the bottom left of the screen).
The spectator must be placed in such a way that he (or she) appears in full height
Several camera drivers may be running at the same time (which may be due to an abnormal exit of the program, in fact it stops the driver on an
exit) which produces interferences: stop them all and restart pilobolus.
Debug
It is possible, following a severe error in a function, that the program is restarted endlessly; in this case stop the program (by CtrlHaltSuppr), if the problem persists, reset the machine, then run video.js and restart pilobolus () in the interpreter, an error message will allow you to make a diagnostic.