Designing diagram in puredata. Even if the sound is not nice…
Recent Updates Toggle Comment Threads | Keyboard Shortcuts
Contredanse ASBL et Polymorph vous convie à une rencontre autour des projets de jeux vidéos et 3D “Tuning Games” en collaboration avec Lisa Nelson
Vendredi 9 décembre 18h au WTC, de 18h à 21h.
En présence de Lisa Nelson, Baptiste Andrien, Louise Baduel, Florence Corin et François Zajéga.
Contredanse ASBL and Polymorph invite you to an encounter around the video & 3D games “Tuning games”, in collaboration with Lisa Nelson, an american choregrapher.
Friday the 9th of December at the WTC from 6PM to 9PM.
In presence of Lisa Nelson, Baptiste Andrien, Louise Baduel, Florence Corin and François Zajéga.
Les éditions Contredanse ont engagé depuis plusieurs années un projet de publication avec Lisa Nelson, désirant par là combler le manque de documentations sur le travail artistique et pédagogique de cette artiste américaine, chorégraphe, improvisatrice et vidéaste. Présenter les enjeux de sa partition d’improvisation appelée Tuning Score, condenser les questions majeures de cette artiste et communiquer de manière directe sa manière d’appréhender et voir le mouvement, est ce qui a mené au projet de création de jeux vidéos. Parallèlement à un projet de publication de livre, ces jeux vidéos – développés par Polymorph et Contredanse – agiraient ici comme analogies à ses processus de composition instantanée, traduisant dans un univers numérique une synthèse des problématiques rencontrées tout au long de son parcours artistique.
Présentation des deux prototypes « Vidéo Tuning Game » et « 3D Tuning Game » :
Un premier prototype de manipulation de vidéos en temps-réel permet d’éditer le mouvement et ainsi nous enseigne sur nos stratégies d’analyse et de composition, le deuxième prototype permet la manipulation d’objets dans un univers virtuel, le comportement des objets régis par une physique simulée engendre un questionnement sur notre perception kinesthésique. Se jouant en duo, il implique un écoute et un dialogue, source d’apprentissage et composition commune.
After many years of planning, a project is in process of creating a “videogame”—an online real-time editing program—that in a sense re-reverse-engineers my initial discovery of the interactive play between visual, kinesthetic, and auditory sensations while editing video. The project, which is being produced by Contredanse in Brussels, will exist online, with the prospect of making it multi-player. The intention of the publication is to provide a set of tools that facilitate the learning process of real-time editing (which our senses do naturally all day long). The clips will offer audiovisual material that engages different senses and invite the player to discover their own patterns of seeing and choice-making as they play. Users will also be able to upload their own clips for play and analysis.
Lisa Nelson est chorégraphe, improvisatrice et vidéaste. Depuis le début des années 1970, elle explore le rôle des sens dans la représentation et dans l’observation du mouvement. Partant de son travail vidéo et de la danse des années 70, elle a crée une méthode de composition spontanée et de spectacle de danse qu’elle appelle Tuning Scores. Elle crée, enseigne et donne des spectacles partout dans le monde, collaborant avec de nombreux artistes. Depuis 1977, elle est co-éditrice de Contact Quarterly, revue internationale de danse et d’improvisation, et dirige le projet d’archivage et de distribution de vidéocassettes de danse d’improvisation, dénommé Videoda. Elle habite dans le Vermont, aux états-Unis.
Contredanse est une association bruxelloise fondée en 1984 par la danseuse et chorégraphe belge Patricia Kuypers. Contredanse s’est donnée pour mission, dès l’origine, de soutenir la création chorégraphique. Elle souhaite offrir des outils et des ressources aux chorégraphes et aux danseurs pour leur permettre de relier leur travail en studio à une analyse de la pensée du mouvement, du corps, de la composition, de l’histoire de leur discipline.
Ses activités sont orientées principalement vers l’information et la documentation, l’édition ainsi que la formation. Contredanse développe également des partenariats en s’associant à des projets tels que tables rondes, conférences, ateliers de réflexion en liaison avec la danse…
Polymorph est une plateforme de jeu vidéo libre. Elle est tout autant un espace de recherche technique et esthétique, un lieu d’expérimentation artistique et de réflexion sur le medium jeu vidéo qu’un réseau de personnes intéressées par les logiciels libres. Née en juillet 2016, le projet « Tuning games » est la première production de polymorph. Le prototype présenté ce soir s’appuie sur un moteur en cours de construction, le polymorph-engine.
Ce projet est développé au sein de l’asbl FLAT, Free Libre Art & Technology.
28-30 boulevard Albert II
World-Trade-Center Tour I
Important : Pour les retardataires, après 19h, l’accès principal est fermé et l’accès se fait avec la liste d’invités seulement. Il est donc indispensable de confirmer votre venue avant le 08/12/2016 à 16h. Présentez-vous alors au 3, rue Willem De Mol et sonnez.
Un verre vous sera offert à l’issue de la présentation.
Merci de confirmer votre présence en laissant un commentaire sur ce post.
Today, visually, it is ULTRA minimal.
The two dots are 2 sound objects. The left one is muted and is related to pobject_3_object messages in the pd patch. The right one is on and is related to pobject_6_object messages in the pd patch.
In human language, this means that the 3d objects are directly connected to the sound engine. For instance, when the right dot moves, it sends a message named “moved” to the sound. In this case, the message triggers a short sound.
Soon with more!
Dynamic scenes loading.
Based on an #XML description of the project, that looks like this:
- <polymorph version=”0.1″ date=”20161124″>
- <scene id=”3″>
- <plight name=”main_sun” visible=”1″ debug=”1″>
- <pnode name=”floor” visible=”1″ debug=”0″>
- <scene id=”3″>
and so on, it is easy to load a new scene. The deletion and creation job is managed by a cool object call “PObjectManager” see: http://polymorph.cool/doxygen/classpolymorph_1_1_p_object_manager.html (thanks, doxygen!)
In the example.1.xml, the key ‘n’ is binded to the method PObjectManager.nextScene().
A little note: in the scene 1 (the middle one), the pile of plates has been done via a special tag:
<repeat count=”20″ offset_pos=”0,10,0″ offset_dir=”0,5,0″ offset_scale=”-2,0,-2″ />
When placed in a pnode, it will generate copies of the object automatically. Similar to array modifier of blender.
- <polymorph version=”0.1″ date=”20161124″>
First version of doxygen documentation.
It’s quite cool to see the mental structure i’m building since several weeks come to life in the diagrams.
There a huge work to be done to comment and clarify the code!
The documentation is available online: http://polymorph.cool/doxygen/
New object for lights in polymorph package.
The image above shows that plights can be manipulated with the same methods as pnodes. This seems obvious, but it required a serious refactoring of the existing code: from now on, all “visible objects”, including sound sources, inherits from a common object, called … PObject (unexepected, isn’t it).
The advantage of doing so is that links can be created between any kind of objects, and all are linkable to bullet.
Conceptually, it was also mandatory to use “smart” objects in the package, and therefore being able to say that some classes are polymorphic 🙂
Here is the output and the code of the empty example. It is using polymorph package.
Once installed (the tricky part, soon fixed with a magic installation script), you just have to extends PolymorphApplication class and start working.
As you may notice, the class CustomApp does nothing on its own. It just calls the mother class’ methods. The purpose of this empty project is to enlight crucial methods to overwrite in order to start coding something.
I’m now working on a basic example, showing how to add primitives, load meshes, add lights and animate them.
Polymorph package is on its way!
Until today, polymorph was a collection of Ogre addons, independent from each other. The approach has changed a lot during the development of Tuning score. All extra libraries are now linked into one big package:
- Bullet – physical engine;
- libPD – sound engine;
- OSC – Open Sound Control messages, based on udp;
- tinyXML – for project loading;
- SDL – for gamepad and joysticks.
The package uses a project file format, in XML + provides high-level objects and a base class containing all mandatory methods to manage a game:
- scene & resources loading;
- window management and events;
- keyboard and mouse events.
A large documentation has to be written, but programming architecture is now fixed.
Finding cycles in networks.
Since several days, i was trying to solve a problem that will occur in #peel: how to broke a connection when the connection is part of a “cycle” (i’ve called it “loop” until now). This problem is illustrated here:
The beginning of the answer is in wikipedia and uses graph theory >> https://en.wikipedia.org/wiki/Cycle_(graph_theory)
Can’t wait to start coding that 🙂
related issue in bitbucket
A long time ago (2 years maybe), i’ve worked with yacine sebti to make a bridge between a timeline editor in max/msp (yacine’s world) and openframeworks (my former world). The project was called Menthol. This prototype has been used in the void project.
The openframeworks addon is here: https://bitbucket.org/frankiezafe/ofxmenthol
During a 1 hour phone call with yacine, we discussed about how to build a standalone UI for the project. Several ideas where floating, such as a fully custom UI in openframeworks or a QT version, such as Iannix. This one is very good looking, even if yacine and i think that it is not precise enough for our usage.
Then, like each time we spoke about this, blender pops in.
I always liked the graph and the dope sheet panels. It’s a superb 2d simplification, with a lot of features (i just discovered the modifiers, my head is spinnin’!). I quickly draft the modifications to do on these panels to work as a standalone timeline editor.
I’ll investigate this in december!
nb: this feature is part of the polymorph engine presentation :), see here
Playing to tuning scores on osx requires several steps, but it worked quite smoothly.
- Installation of virtual box – https://www.virtualbox.org/
- Download of linux mint 18 64 bits image – https://www.linuxmint.com/download.php
- Make a disk of 15Gb (min 10Gb are required for mint)
- To have local IP (router range), set network to bridged and use ethernet – not tested with wifi
- Install mint
- Update mint
- Copy/paste Tuning score exec folder (not availabe online yet…)
- And done!
Because there no 3d acceleration available on the configuration i used, i had to give 3 cores out of 4 to the vm to reach a decent framerate. There no FSAA available either. But Lisa Nelson will at least be able to take something back to the states!
Tuning scores, first screenshots of the game.
Because we present the first prototype to Lisa Nelson and the Contredanse crew very soon, we rushed a lot this week and first results are promising:
- a bunch of objects are ready to be manipulated;
- it’s possible to play on 2 different computers seamlessly (identical physical world);
- each player can change his/her point of view and see what the other is looking at (the eye in the sky);
And, the most important, the playfulness of being in a “sensitive” virtual environment. Every little movement may have an impact on several objects. And looking at the other propositions is as stimulating as playing yourself.
There still a lot of things to fine-tune, in the code and the models.
The next big step is add some sounds, to complete the experience.
Chaise pagholz in blender, with @louise.
No news is good news. Polymorph is alive and kicking. The train is on its tracks. The ball is rolling.
It’s already almost a week since I’ve chatted with @frankiezafe and @louise about the advancements of their project. You might have also noted that they don’t post much either on this blog. As François says it, it’s because the progress they make is not that big of step to share, or does not produce some visuals that would look good on the blog. Back a couple weeks, when features where being added almost every day, things were exciting. Now, the real work of polishing and improving what has been initiated is actually happening and that just does not seem as exciting to share. Although it’s exciting for the team to see it growing.
A second meeting with Contredanse was much more productive and finally we started talking about gameplay. Baptiste and Florence could put their hands on the mouse and feel what a player could feel. Discussion ensued on object movements and reactions in the virtual world. The manipulation of the camera created interesting problems and awkwardness that needs to be addressed. And a common set of objects has been defined and should be limited to
François is deep into physics programming. He also took a big decision regarding all the tools he is building. Instead of trying to produce some independent Ogre libraries, he will concentrate on making it all work in the Polymorph Engine (PE). As a reminder, the PE is a bundle, a package of great open source libraries to make video games. The choice to release work as a bundle instead as independent modules is mainly a practical one. It will take less time to code. The modules are also very much interdependent for now. So making them detachable from the PE would require extra work that the team does not have at the moment. Maybe in the future. But again, making a full featured game engine on top of Ogre was always one of the goal of Polymorph. The ability to break this apart is then for later.
Where is PEEL you might ask? On hold for now. Tuning Scores is the priority since the prototype needs to be delivered by December. All eyes are on this goal now. And challenges remain, such as multiple mouses input for example. Anyway, all progress on Tuning Score is good for PEEL. So no worries, François will be back on it for Christmas.
See you next time.
PS: All screenshots by @louise
Until now, @louise was not able to access objects position and configuration… I guess it was quite frustrating for her, as she is working on the assets of the Tuning Score game.
Now it’s better. Based on the work made for #PEEL, a XML description of the objects to load is available.
It looks like this:
Each polymorph node is an object having:
- an origin transformation;
- a local transformation, only applied on the mesh attached to this node, not its children;
- a primitive to display, when you don’t need to load a mesh – available: cube, sphere, plane & empty (very useful, i got it now);
- a mesh to display;
- a material, when you want to use something else than the default one;
- a bullet configuration, for physics, dynamic or static, with the possibility to use a special mesh and a configuration tag that gives access to a few physical parameters.
I’m going to deploy this on louise computer and it will be over for this week!
Long time no seen!
After fixing tiny and absolutly not sexy issues in bullet code, programming went to an even less fancy topic: efficient temporary storage of udp packets.
Indeed, OSC messages (basically udp messages) arrives asynchronously. The display thread is running at ~60fps, but messages can pop in at any time. To avoid a display thread interruption each time a message is received, they have to be stored until the main thread request them.
The first approach was to push them in a std::vector. If the main thread never requested them, this vector might eventually become VERY long. To solve that, setting a maximum size seemed to be a good option. Each time a new message is received, if the vector is longer than maximum, the first element, witch is also the oldest, is deleted.
There’s 2 important performance issues in this approach (fixed by the new one :)):
- removing the first item ( =>resizing the vector) and push back an item at each reception ( =>resizing the vector once again) is not efficient at all;
- read and write access to the same object, implying that you can not write while reading and reverse.
Sooner in my life, someone told me about ring buffer. The name was nice and the idea behind was appealing!
Here is what has been implemented in the class that receives and parses the OSC messages (readable text below the image, click to enlarge).
polymorph::POscReceiver – ring buffer logic
POscReceiver uses ring buffer to store received messages temporarily.
If its capacity is 10, it uses an array of 10 PMessageData.
When the maximum number of messages is reached, the oldest message is overwritten.
The position of the oldest one is shifted by one each time a new message is stored in an “overflowed” array.
polymorph::POscReceiver – read and write buffer
POscReceiver uses 2 ring buffers.
Reception and parsing are managed in a separated thread.
Buffers are swapped when the main process request a read access.
Documentation about how to prepare meshes (structure, materials, etc.) usable by bullet in polymorph engine.
The documentation of the project is not yet ready, as you might see if you surf a bit in the wiki…
Precise object grabbing, require a bit of math, but it worst the headache!
After some posts with images, schemas and long technical descriptions, here is the result.
The chain is breaking when there’s too much stress along the links…
First generation of documentation with doxygen and … OMG! it’s a huge mess!
Defining an architecture and clean namespaces is really required, and must to be done as soon as possible.
Doc is here: polymorph.cool/doxygen