français

english

download





























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
Contrôle
construction des mouvements
Capteurs
Menu
Modifications
Raccourcis clavier
Options
Programme
Dysfonctionnements





























Principe

Origine
Images

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
Mode click
Paramètres
Fonction USER

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
Mouvements dynamiques
Mouvements cinématiques
Mouvements aléatoires
Tester 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
Caméra

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.

driver
webcam.func
Réglage de la caméra
Fichier de lancement


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
DOC
BODY
MOVE
PARAM
COL
ILLUM
EXT
FOG
CLICK
INV
SELF
AUT
BACK
USER
VAR
CODE
INI
EXI

HEL

Aide. :

DOC

Ce fichier.

BODY

HEL
SCAL
TEST

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
SCA
CURS
READ0
READ
WRITE

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
Rotations
Couleurs
Dynamique

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
Corps
Forces
Mouvements
Mémoires
Picking

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
Caméra
Debug

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
Controle
construction of movements
Sensors
Menu
Modifications
Keyboard shortcut
Options
Program
Dysfonctionnements





























Principle

Origine
Images

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
call back USER
Building bodies: change functuos build_*.





























Interaction

Launch
Click mode
Parameters
Function USER

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
Dynamic movements
Kinematic movements
Random movements
Testing movements

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
Camera

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 .

driver
webcam.func
Adjusting camera
lauching file


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
DOC
BODY
MOVE
PARAM
COL
ILLUM
EXT
FOG
CLICK
INV
SELF
AUT
BACK
USER
VAR
CODE
INI
EXI

HEL

Help. :

DOC

This file.

BODY

HEL
SCAL
TEST

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
SCA
CURS
READ0
READ
WRITE

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
Rotations
Colors
Dynamic

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

camera driver
Bodies
Forces
Movements
memories
Picking

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
Camera
Debug

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.