5 ans !
Da Viking Code vient de fêter ses 5 ans, quelle aventure incroyable ! Quoi de mieux pour illustrer ce parcours qu'un tout nouveau site web ? Profitez-en et bonne année !
Quelle période excitante pour être à Brighton ces jours-ci ! Avec Tamsen, c'est la première fois que nous assistons à Reasons to, anciennement connu sous le nom de Flash on the Beach ! Au menu : Carlos…

Quelle période excitante pour être à Brighton ces jours-ci ! Avec Tamsen, c’est la première fois que nous assistons à Reasons to, anciennement connu sous le nom de Flash on the Beach !
Au menu : Carlos Ulloa, Mario Klingemann, Rob Bateman, Joshua Davis, Jared Tarbell, Stacey Mulcahy… oui, on y est surtout allés pour le code, et on n’a pas du tout été déçus !
Carlos Ulloa parle de la musique en VR, en présentant son nouveau projet : Fantasynth. Il y a eu une partie technique vraiment intéressante sur le moteur derrière le projet ; il a choisi Unreal Engine plutôt qu’Unity à cause de l’éditeur Sequencer. Il décrit aussi brièvement sa propre expérience avec les Blueprints. Ce fut difficile au début, mais après quelques mois il a trouvé ça particulièrement agréable à utiliser ! Ma propre expérience avec les Blueprints a été très rapide, donc je n’ai pas exploré cela en profondeur mais j’en ai quand même retenu les bases ;) Chose étrange, il n’a pas parlé directement d’audio binaural ni de filtres HRTF. Il a en revanche mentionné des choses importantes comme l’occlusion sonore. Enfin, il a brièvement parlé de the.echonest.com/, racheté par Spotify, et de matériel haptique portable trouvé sur Kickstarter permettant de ressentir le son à travers son corps (comme les basses profondes lors d’un concert, quand tout le corps vibre par exemple).
Mario Klingemann a présenté les réseaux de neurones convolutifs et le t-SNE. Évidemment, il est revenu sur le projet DeepDream de Google et les concepts qui le sous-tendent. Il a ensuite partagé ses propres expérimentations avec les CNN, comme son propre RasterFairy. Il a expliqué comment, grâce au t-SNE, il a classé tout un tas de bitmaps selon différents critères, et comment les machines peuvent apprendre par elles-mêmes. ArXiv.org a été cité comme une bonne ressource pour des articles scientifiques présentant des algorithmes utiles au traitement d’images. En résumé, si vous avez entendu parler de l’application Prisma ou même l’avez essayée, c’était l’idée. Non seulement on peut appliquer un style différent à ses photos comme le fait Prisma, mais l’étape suivante est de faire en sorte qu’un réseau de neurones change réellement le contenu. Imaginez simplement faire apparaître quelque chose dans une image, qui n’y était pas, sans passer par Photoshop… Et je ne parle pas de faire apparaître des chiens partout comme tout le monde l’a fait avec le comportement par défaut de Google DeepDream.
Une autre session inspirante fut celle de Jared Tarbell, qui travaille sur des systèmes génératifs pour créer de l’art numérique, ou même des objets tangibles comme son lifestar. Un igloo en carton généré aléatoirement ? Je ne sais pas vraiment comment on peut appeler ça, allez voir les photos. Chaque élément de la structure est aléatoire, mais crée une magnifique structure dans laquelle on peut marcher. Ça me rappelle de bons souvenirs quand je jouais avec les Biomorphs. Le meilleur moment, c’est quand on voit le graphisme se peindre lui-même grâce au code. C’est comme regarder quelqu’un peindre. Il a utilisé Processing pour ses démos, qui semble être un excellent outil pour apprendre à programmer. Cette conférence me donne plein d’idées pour enseigner la programmation à des étudiants qui sont avant tout des graphistes.
Stacey Mulcahy travaille chez Microsoft Garage. Sa présentation est passée de l’AR & VR avec WebVR et A-Frame à la pratique du Fablab avec Fusion 360 et AxiDraw, pour finir sur le Microsoft Bot Framework.
La présentation de Rob Bateman était une étude de cas sur l’un de ses jeux, et donnait un excellent aperçu de ce qui rend la 3D plus rapide que la 2D, en gros. Ce n’est pas très bien formulé, mais par exemple, un jeu 2D chargé en vecteurs va se rendre sur le CPU (et sera lent), alors qu’un spin-off mobile d’Assassin’s Creed tournera très bien sur mobile. Un point simple à comprendre est que la 3D dispose d’un GPU dédié qui n’est PAS fait pour la 2D. La 2D aurait pu bénéficier du même gain de performance que la 3D si l’accélération matérielle de la 2D avait été poussée, mais seules les imprimantes, via le postscript, sont réellement de la 2D accélérée matériellement (une puce dans l’imprimante qui traduit le code pour imprimer des vecteurs 2D et prend en charge la charge que le CPU aurait dû assumer). Le monde ayant malheureusement privilégié la 3D, il a ensuite montré l’écart entre la puissance CPU et GPU… quand votre téléphone a un GPU puissant, vous n’avez pas vraiment besoin d’autant de puissance côté CPU… C’est pourquoi, en tant que développeurs mobiles, la 2D sera plus lente, car il faut soit rastériser les vecteurs 2D et les utiliser comme textures sur de la géométrie 3D… soit superposer des vecteurs 2D rendus par le CPU, mais au prix d’une baisse de performance. Heureusement, Bateman a montré une solution intéressante, peut-être la seule qui existera : trianguler les vecteurs pour obtenir de la géométrie 3D, et ainsi faire rendre les vecteurs par le GPU. Cela signifie que tout ce qui est créé dans AnimateCC (y compris n’importe quel type de mouvement) doit être exporté sous forme de meshes triangulés. La démo qu’on nous a montrée était impressionnante à voir : des vecteurs qui étaient agrandis, réduits ou animés étaient rendus sans effort. Bien sûr, on n’obtient pas des courbes parfaites, mais c’est ce qui s’en rapproche le plus. Il a créé une extension AnimateCC pour trianguler tout ce qui se trouve sur la timeline (Away Extensions) et génère un fichier dans un format binaire personnalisé contenant toutes les données géométriques, lu au runtime par AwayJS. C’est ce qu’il appelle la tessellation (à ne pas confondre avec l’ajout ou la suppression de triangles au runtime sur de la géométrie 3D dans des jeux 3D pour changer le niveau de détail).
Pour conclure, Joshua Davis fut le dernier sur scène, présentant son travail Painting with Sound, Mesh and Shader. Comme Jared, il utilise le langage et l’environnement de développement Processing. Il utilise la Transformée de Fourier rapide pour exploiter le son comme donnée. Enfin, il a aussi joué avec OpenCV pour manipuler la sortie de sa webcam, l’intégrer à son workflow de visualisation sonore, voire faire de la détection de mouvement.
Nous avons laissé de côté beaucoup d’intervenants que nous sommes allés voir, car leur sujet ne collait pas forcément avec ce blog, mais chacun d’eux était formidable. Tamsen, par exemple, a particulièrement apprécié la présentation de Stefan Segmeister, centrée sur l’architecture et sur ce qui est beau ou non… et pourquoi la fonctionnalité ne signifie pas efficacité si ce n’est pas beau. Donc beaucoup de contenu design, qui ne nous concerne pas forcément directement au premier abord, a tout de même eu un impact sur notre façon de penser : quoi que l’on fasse, on fait partie d’une équipe plus large avec un objectif final en tête, et tous les membres de cette équipe sont des créatifs. Une application ou un jeu doit être fonctionnel, on aide à ce que ce soit le cas, mais il doit aussi être beau, et on aide à ce que ce soit le cas aussi. En tant que développeurs, on reste malheureusement ceux qui portent les contraintes techniques, mais c’est notre travail d’en avoir le moins possible sur le projet sur lequel on travaille, afin que la vision du projet soit respectée.
Une fois les conférences terminées, de retour à l’hôtel, Tamsen a décidé de télécharger Processing (avec lequel elle bricolait déjà, une fois qu’on lui a rappelé son existence pendant la session de Jared Tarbell) et a décidé de faire un « remix du logo » de reasons to, pour voir ce qu’on pouvait faire avec en peu de temps. Depuis un moment, elle voulait utiliser l’angle d’or quelque part, l’occasion parfaite pour le faire ! Et voici le résultat !
Et si vous voulez devenir le prochain Joshua Davis - ou simplement commencer à faire quelque chose avec du son, voici un petit point de départ, encore avec processing. Ceci est juste une simple visualisation de spectre. Vous avez besoin de la librairie minim installée pour la faire tourner. Elle récupérera la première entrée audio qu’elle trouve ; si vous pouvez activer votre « mixeur système » comme périphérique d’enregistrement, vous n’aurez pas besoin de brancher un vieux lecteur mp3 sur votre entrée ligne pour obtenir des résultats.
import ddf.minim.*;
import ddf.minim.analysis.*;
float centerX;
float centerY;
Minim minim;
AudioInput in;
FFT fft;
void setup() {
frameRate( 60 );
noSmooth();
fullScreen();
centerX = width/2;
centerY = height/2;
background(0x000000);
minim = new Minim(this);
in = minim.getLineIn();
fft = new FFT(in.bufferSize(),in.sampleRate());
}
void draw() {
fft.forward(in.mix);
background(0);
int bands = fft.specSize();
float bandAngle = -TWO_PI / bands;
float oldLineX = centerX;
float oldLineY = centerY;
float minRadius = 80;
for(int i = 0; i < bands; i++) {
float bandVal = fft.getBand(i);
float r = bandVal * 20 + minRadius;
strokeWeight(5);
stroke(255, 255, 255, 255);
float lineX1 = r * cos(i * bandAngle) + centerX;
float lineY1 = r * sin(i* bandAngle) + centerY;
line(i== 0 ? centerX + minRadius : oldLineX,i== 0 ? centerY : oldLineY,lineX1,lineY1);
oldLineX = lineX1;
oldLineY = lineY1;
}
}
Reasons to est exactement le genre d’événement qui vous donne un boost de motivation de 1000% ! Qui vous donne l’envie d’aller encore plus loin et d’essayer de nouvelles choses. La créativité n’est finalement qu’une question de travail et de plaisir !
