This evening, a friend of mine asked my help on his project with Virtools : he had a detailed model, without the source file, and without any other way to add some occlusion.
As his model had a strong tesselation, I made him a small script to add Ambient Occlusion in the vertex color. After about 15 minutes, he had the rendering he wanted (a little shader helped to have some reflection added to the ambient occlusion). Of course it's not very much, and not very innovative, but anyway it's been a long time since I last posted a Virtools demo, so here it is :). Don't forget that you'll need the 3DVIA Virtools Player to see the demo.
Last week, I introduced Kodu, the new XBox game editor made by Microsoft. I used the PC version to test it and although it is a very good idea, it very quickly showed its limits.
First of all, the terrain editor system is not very easy to use, and sometimes doesn't work at all. Moreover, using 4 modes to edit the terrain makes it very counter productive, cause you need to go from one mode to another every ten seconds.
Then, about the behavior system in itself, each icon/block is very easy to understand, the names and images are quite self explanatory. But the system in itself is more obscure. Some elements can't work with one another, and you loose parallelism. I tried to make a tron/snake (kind of), so i needed my cycle to always go forward, and only turn when i turned the Joystick right/left. I created three instructions :
When joystick pressed towards left, turn object on the left;
When joystick pressed towards right, turn object on the right;
Always move object forward.
When I only had instructions 1 and 2, everything worked fine, the cycle turned left/right. As soon as I added the 3rd instruction, the cycle only moved forward, ignoring the two other instructions. I had to change instruction 3 to : When joystick not pressed, move object forward. Then I got the problem of trying to detect a collision to make the game over. And still got no solution as the instruction is ignored...
Finally what's very sad is the limited number of behaviors available in Kodu, some games will be almost impossible to make
Apart from that, the rendering and global look and feel is very nice, although a little too Wii for me, and you can add some effects on objects.
I'm definitely not up-to-date on the high-tech videogame world.
I talked almost two years ago about Popfly, MicrosoftFlash Silverlight game editor. Now they brought this to another level, maybe after seeing the success of Little Big Planet : with Kodu, one can create its own XBox video game.
Now what they've done is still in the field of visual programming, with the challenge of never using a keyboard. Only with the XBox controller, you can import elements in your game, create an environment with a terrain editor, and add behaviors to the game. Once the game is created, one can share it online wit other players.
Microsoft's Kodu
From my experience, Visual Programing editors have the choice between being simple, and being scalable. With Kodu, Microsoft made his choice towards simplicity : everything is represented as cute icons, no text needs to be entered... but you can only create the game mechanics Microsoft engineers thought of. Now I didn't test it (yet) as the program is still in beta, and I don't have an XBox, but i'll bet that we'll soon see youtube Videos of people pushing the system to its limit.
Edit : And since... well today, Kodu's team released on its blog a PC version, downloadable free of charge here.
I'm a fan of videogames. I like them. And to get to be part of one of them would be a fun and exciting thing.
Bonjour à tous et bonne année ! Que les pixels soient avec vous pour cette année 2010.
Les Algoristes (une des associations dont je suis secrétaire) prépare un projet à soumettre au SIGGRAPH 2010, et pour ce projet j'ai créé plusieurs filtres en Processing.
Ce filtre, que j'appelle Pixie Dust fonctionne grâce à une formule magique qui m'a été soufflée par la fée Clochette, et qui permet de transformer une photo en amas d'étoiles comme sur l'exemple ci dessous. Plus sérieusement, un des principes utilisé est dérivé de celui qui permet de dessiner un Buddhabrot.
While preparing on of my class about algorithm, I talked about the calssical Towers of Hanoï problem, the perfect example on recursivity. In this game, you have a number of discs, each with a different size, placed on a pole, from the biggest to the smallest. You have to move all the discs, one by one, to another pole, but you can only move a disc on a larger one.
So here's a little demo of this problem, made with Virtools, where you can choose the number of discs, and then you see the animation of the solution. Don't forget that you'll need the 3DVIA Virtools Player to see the demo.
En fouillant dans mes anciens PCs, j'ai retrouvé quelques démos réalisées avec Virtools, voila donc l'occasion de les mettre en ligne.
La démo ci dessous est inspiré des jeux de logiques où vous devez placer des miroirs pour diriger un rayon laser vers un point précis. Je me souviens de mes cours de physique au collège où on s'amusait à se faire des labyrinthe sur le même principe. Enfin bref, voici une version en 3D, ou le rayon est réfléchi par toute surface, et notamment une théière.
Pour ceux que cela intéresse, la formule pour calculer un vecteur réfléchi sur une surface s'écrit :
Où I est le vecteur incident, N la normale de la surface, et R le vecteur réfléchi.
Et n'oubliez pas d'installer le player Virtools si ce n'est pas déjà fait.
J'ai eu une image dans la tête en dormant dans le train vendredi, et j'ai donc cherché à la recréer. Bon malheureusement le résultat n'est pas du tout ce que je voulais, mais peu importe, au moins ça m'a permis de rejouer avec Processing.
En tant que Responsable R&D à mon boulot, j'ai été obligé de développer pour l'iPhone. Cette phrase seule avait tout pour me mettre de mauvaise humeur, mais lorsque j'ai réalisé qu'en plus je devrais utiliser un Mac, et programmer en Objective-C, j'ai bien faillit démissionner. Bon en fait non, je dramatise un peu, mais quand même, devoir utiliser un langage totalement différent du Java/C++, sur un laptop où le clavier n'est pas standard, et la souris n'en parlons pas... Enfin bref, j'ai commencé un peu à reculons, je l'avoue.
Je savais qu'il était possible d'installer une Machine Virtuelle pour exécuter des applications Java, mais seulement sur un iPhone jailbreaké (alors que bon, techniquement c'est faisable, hein Steve?!). Mais aujourd'hui, j'ai trouvé un article sur XMLVM, un outil open source qui permet de transformer du code source Java en Objective-C, et donc développer pour iPhone en Java. Adieu XCode, bonjour Eclipse :).
La vidéo de présentation est très intéressante, pour ceux qui n'ont pas le temps, allez directement à 40'15". Leur outil permet en plus d'utiliser un iPhone comme télécommande pour envoyer les informations liées au hardware (accéléromètre, multi-touch, ...). Bref, un petit bijou que je vais m'empresser de tester, et utiliser.
Enfin, cerise sur le gâteau, XMLVM permet de convertir d'autres langages, .Net, Ruby, Python, JavaScript, et peut être bientôt plus. Et petit message à la fin de la conférence, l'équipe travaille sur un outil pour transformer une application pour Android en application pour iPhone. Que demander de plus?
La java, ça n'a pas de couleur, ni bleu ni autre chose.
Après mon article sur WebGL, qui permet de mettre de la 3D dans une page web, voici le contraire : Awesomium, qui permet de mettre une page web dans la 3D. Basé sur le moteur Webkit, dans une version modifié (un fork de Google Chrome en fait), cette librairie permet d'inclure un navigateur complet dans une fenêtre 3D (OpenGL ou DirectX), fenêtre qui est d'ailleurs totalement interactive, supporte le JavaScript, le Flash, les Cookies, et même un rendu transparent.
Si l'on croise cette technologie avec les essais comme Exit Reality, on pourrait peut-être arriver à un navigateur web 3D potable et pertinent... Mais j'attends de voir.
On connaissait déjà les codes barre "classiques" utilisés dans nos supermarchés, ou les QRCode et autres Data Matrix apparus au Japon il y a quelques années. Des étudiants du MediaLab, au MIT ont décidé de pousser le vice un peu plus loin, en intégrant un code barre dans une LED (Diode électro luminescente).
Le concept repose sur le principe de l'effet Bokeh, qui fait qu'une lumière apparait comme un disque flou si la lumière est hors focus. En tirant partie de cette distorsion en cachant un pattern minuscule dans la lumière, le code devient visible via un appareil photo classique, avec le focus réglé correctement. Technologiquement, le concept est brillant, par contre le désavantage est qu'il faut se trimbaler avec un appareil photo pour le lire. Du coup comment arrivera-t-on à l'utiliser dans la vie de tous les jours?
En tout les cas, les auteurs seront au SIGGRAPH, donc j'irais surement leur rendre visite la semaine prochaine, et en attendant je vous laisse avec la vidéo.
Le code-barres génétique, si c'est aussi fiable que le code-barres des produits, quand on passe à la caisse d'un supermarché, on va vite se retrouver à payer deux fois le prix d'un crime commis par un autre!
Bon allez, un petit écart de conduite, je vais ici faire du code, du vrai, parce que j'ai pas mal cherché sur le sujet et les réponses sont pas forcément simple à trouver quand on n'a jamais fait d'OpenGL. Comme je le disais précédemment, je travaille sur un moteur 3D OpenGL sur Android. Mais sous Android, on n'utilise pas OpenGL de base mais OpenGL ES (OpenGL for Embedded Systems), qui ne contient pas autant de fonctions que la version standard.
Et notamment l'un des manque et qu'il n'y a pas de fonction gluPerspective, qui permet de spécifier l'angle de vue, et donc le zoom de la camera. Je ne me suis pas encore penché à fond sur le fonctionnement des matrices caméras, et je me sentais mal refaire les maths dans mon coin, j'ai donc cherché une autre astuce, que j'ai trouvé sur un forum iPhone. La formule, je la met pour ceux que cela peut intéresser, et surtout pour en avoir une trace quelque part ;).
Il y a un mois, je vous proposais les bandes annonces officielles du Siggraph 2009. Je me permet de compléter la liste avec cette vidéo des rendus temps réel qui seront projetés à la Nouvelle Orléans.
L'un des gros avantages à être responsable R&D à l'ISART, c'est que je peux faire mes recherches sur ce que je veux (ou presque), et que je suis payé pour ça ! Récemment je vous montrais un petit jeu fait sous Android, ce qui a bien sur éveillé un peu plus ma curiosité. L'étape suivante était évidemment de faire une appli en 3D, tournant sur mon HTC Magic.
Voila qui est chose faite (bon c'est pas finit mais c'est bien avancé). J'ai désormais un petit moteur à base d'OpenGL, capable d'importer des fichiers au format OBJ, et les textures qui vont avec (du bête jpeg). Je viens à l'instant de finir un convertisseur qui précompile les données 3D en fichier binaire, pour optimiser le temps de chargement des objets (de 7,4s avec un fichier obj, je passe à 1s pour un même mesh). A suivre le même principe pour les textures (qui doivent en plus être modifiées puisqu'en OpenGL les couleurs se lisent en ARGB et non RGBA), et une fois cela fait un petit jeu pour aller jusqu'au bout.
Tableau. Représentation en deux dimensions de quelque chose d'inintéressant en trois.
L'une des taches les plus facilement programmable en 3D est la génération de décors urbains. Je me souviens notamment du projet Subversion qui m'avait bluffé à l'époque. Le sujet est très vaste, mais très riche car le nombre de paramètres à prendre en compte est immense.
Je présente donc aujourd'hui deux solution. La première s'appelle Ürban Pad, édité par une société Lyonnaise, et qui permet, à partir de modèles de bases créés dans Maya, ainsi que d'un relief de base, de créer une ville complète (routes, bâtiments), ou même un paysage pseudo urbain (ruines, village médiéval, futuriste, alien, ...). Le projet est encore jeune mais semble prometteur.
Le second projet vient d'un article lu chez Benoît. Procedural City permet aussi de générer une ville automatiquement, mais cette fois ci directement en temps réel. L'intérêt est d'avoir une ville où chaque pièce de chaque étage de chaque bâtiment est visitable, dans un décors infini.
Enfin, pour ceux qui veulent approfondir le sujet, vous pouvez lire cet article très complet sur l'état de l'art de la génération de ville automatique.
La ville est le lieu où le jeune homme perd ses idéaux et la jeune fille sa vertu.