Astuces DotNet (Sébastien Courtois)

14/06/2010

Microsoft@E3 : Conférence Microsoft 2/2 (Kinect)

Filed under: E3, Hors Catégorie, Kinect, Natal, XBOX 360 — Étiquettes : , , , , , , — sebastiencourtois @ 22:29

La conférence de Microsoft à l’E3 a été l’occasion de voir enfin Kinect (Ex Natal) en action. (Les vidéos arriveront au fur et à mesure de leur publication par Microsoft).

  • Qu’est ce que Kinect ?

Kinect  (ex Projet Natal) est un accessoire à la xbox 360 composé de de capteurs et de caméras noir et blanc ainsi que de rayon infrarouge permettant ainsi de reconnaitre les mouvements d’une personne dans l’espace avec une bonne précision. Vous pouvez ainsi jouer sans manette. Le but (plus ou moins avoué) de Microsoft est tout simplement de fournir un concurrent à la Wii voire de la dépasser et ainsi conquérir le cœur des joueurs casuals.

Big Brother is watching you

Remarque : Certains d’entre vous auront peut être remarqué que l’utilisation des rayons infrarouge est aussi utilisé par la table Surface.

  • Comment ça marche en interne ?

Si vous vous demandez comment Microsoft a réussi à réaliser cet outil de reconnaissance de personnes, je vous conseille l’article suivant (en anglais). Pour faire simple, ils ont enregistré pendants des heures de nombreuses personnes se déplaçant devant l’accessoire en lui décrivant chaque mouvement (en gros, on lui montre 10 M photos de mains différentes en lui répétant que c’est une main… au bout d’un moment elle comprend et sait reconnaitre une main). Alliant ce gros flux de données corporelles et des algorithmes d’intelligence artificielle (Algorithmes génétiques+apprentissage à  mon avis), on obtient un système (appelé TheBrain).Celui-ci est capable de reconnaitre, à partir des flux vidéos, les parties du corps (30 parties du corps) et ainsi analyser les mouvements de chaque membre en temps réel (30 images/sec …). Il faut aussi rappeler que Kinect peut gérer plusieurs personnes en même temps ce qui montre que l’optimisation du système a du être poussée au maximum.

  • XBOX LIVE et Kinect

La démo faite à l’E3 est assez révélatrice des possibilités de la bête. Une personne se met devant sa télé et fait un signe de la main puis est reconnu directement par le système.Son avatar se met alors à bouger comme lui. Ainsi il a juste à pointé de la main vers la télé pour faire apparaitre un curseur (comme avec une Wiimote). L’utilisateur peut aussi parler et donner des ordres comme “Xbox Play Movie” pour le film sélectionné. Une combinaison des mouvements et de la parole (car Kinect contient un micro) est donc possible grâce à Kinect.

Il est aussi possible de chat par vidéo grâce à cette accessoire qui est monté sur un petit moteur. Celui-ci lui permet de suivre l’utilisateur lors de ses déplacement dans la pièce (pas plus loin … c’est une caméra pas un robot :)).

  • “The time of talk is over !!!” … Les jeux

On attendait beaucoup des jeux présentés pour cet accessoire. 8 jeux ont été présentés et ils seront au nombre de 15 au lancement de la console.

    • Kinectimals

C’est connu, les enfants adorent les animaux. Microsoft a donc créé un logiciel où l’on peut joueur avec des animaux grâce à Kinect. La démo a montré une gamine jouer avec un bébé tigre dans une forêt.Saut,roulade,faire le mort,sauter à la corde, la petite fille s’éclate avec son bébé tigre comme si c’était un vrai en lui donnant des ordres exécutés instantanément par le félin.

Remarque : La vidéo est une version courte de ce qui a été présenté.

Adorant les animaux (et surtout les bébés animaux), j’ai trouvé cette démo attendrissante d’autant que le “contact” animal/enfant semble bien rendu. Graphiquement, c’est assez beau (surtout la fourrure des animaux). Seul petit bémol tout de même avec la présence d’un flou continuel qui ne permet pas d’apprécier l’ensemble de l’environnement à sa juste valeur. Reste à savoir s’il y a un gameplay intéressant. On nous promet 40 animaux différents et 30 activités. J’ai un peu peur que cela ressemble trop au Eye Pet sur PS3 dont je trouvais le concept super (oui je suis un grand gamin :)) mais très limité au niveau activité.

Cela me rappelle une démo qui m’avait marqué l’an dernier lors de l’annonce de Natal :

    • KinectSport

Comme dit précédemment, Microsoft va pomper chez les concurrents et ne s’en cache pas. Ainsi KinectSport est une reproduction de WiiSport à quelque détails près. Tout d’abord le moteur graphique, même s’il reste un peu cartoon avec la possibilité de jouer avec ses avatars xbox, est graphiquement bien supérieur à ce qui se fait sur Wii aujourd’hui. De plus, il y a une plus grand variété d’épreuves : foot / bowling / athlétisme (course de haie, javelot,saut en longueur …) / ping pong  / boxe  / beach volley.

    • Kinect Joy Ride

Clone de Mario Kart avec sensiblement le même gameplay et graphiquement supérieur tout en restant cartoon (avatar xbox 360). Au vu de la démo, je n’ai pas trouvé ça si intéressant que ça. Reste à savoir quand je l’aurais en main.

    • Kinect Adventure

jeu d’aventure dans lequel vous devrez éviter des obstacles seul ou a plusieurs (sorte de tetris humain), vous devrez chevauchez des nuages ou encore descendre des chutes d’eau en canoé. Graphiquement joli (notamment le rendu de l’eau et des éclaboussures) mais toujours cartoon (avec les avatar). Semble assez fun en multi coopération.

    • YourShape (by UbiSoft)

Premier éditeur indépendant à dégainer sur Kinect, UbiSoft (cocorico) qui sort un clone de WiiFit : YourShape.Divisé en 4 grandes sections ( art martiaux, yoga,fitness, mini jeux), il permet de s’entrainer et/ou de se maintenir en forme tout en s’amusant. Certains diront que WiiFit est déjà là et que ce n’est qu’un clone de plus sur le marché du fitness. Toutefois le plus de YourShape est que, avec Kinect, les mouvements sont vérifié visuellement et non plus selon la pression (aléatoire parfois) sur la Wii board. La démo effectué de chacune des sections est sympathique.

 

    • Dance Central (by Harmonix)

Jeu de Dance qu’on pourrait qualifier de clone (encore !) de Just Dance sur Wii. Toutefois c’est encore la puissance de Kinect et la précision de la capture qui devrait permettre au jeu de s’imposer contre la précision aléatoire du jeu Wii (certains se reconnaitront :)). De plus les chorégraphies sont a base de routines bien expliquées et un mode entrainement pour les néophytes permet de rentrer facilement dans le jeu. Enfin le background est en 3D et reproduit vos mouvements :). Pour les musique, principalement de la pop,hip hop,r’n’b (Lady gaga, NoDoubt …).

 

    • Projet secret (by LucasArt)

Un projet initié avec LucastArt sur l’univers Star Wars a été dévoilé permettant à tous les fan-boys d’incarner un jedi en vrai. Un court vidéo de gameplay a été montré et … grosse déception. Les mouvements sont lent et les déplacements du sabre aléatoire parfois ne touchant pas l’ennemi qui tombe. Bref déçu par le gameplay et un moteur graphique correct mais sans claque visuelle (pourtant on joue pas avec un avatar là je crois). Le projet n’est pas prévu avant 2011 donc on espère que ce sera plus au point la prochaine fois.

    • Forza Motorsport Kinect

La référence des jeux de voiture sur XBOX reviendra en 2011 avec un jeu magnifique compatible Kinect. Quelques vidéos de gameplay qui ressemble au dernier opus et un essai d’une Ferrari très belle. ça promet d’envoyer du lourd et ça sera en 2011.

  • Remarques diverses :

Lorsque l’on joue à certains jeux, Kinect prend des photos,vidéos de vous en train de jouer. Celles-ci sont récupérables et il est possible de les envoyer sur Facebook (histoire de pourrir les albums des potes c’est génial).

Il y a une phase de reconnaissance plus longue lors de la première utilisation afin de scanner le corps et le reconnaitre rapidement les fois suivantes. Certains jeux arrivent à détecté lorsque l’utilisateur enlève ou met un vêtements (réalité augmenté dans les futurs jeux XBOX 360 … je vais chercher  ma cape harry potter :)).

  • Conclusion :

Sortie annoncé  : 4 Novembre 2010 aux US (inconnu en France… surement une semaine à un mois après). 15 jeux promis à la sortie. Les rumeurs annoncent un prix plus bas pour ces jeux que les jeux 360 habituels.

Prix : Inconnu pour le moment. Les rumeurs parlent de deux versions (une fixe et une avec caméra qui suit la personne). La version “suiveuse” serait la plus cher à 180 $.

Kinect sur PC : ??? 😦

Kinect via XNA : ??? 😦

Avis : Mitigé. Je suis très emballé par la technologie et je pense que, comme Surface, les développeurs n’ont pas encore pensé leur “Kinect” à fond. Donc on aura un grand temps d’expérimentation de la part des éditeurs avant de  trouver des nouveaux paradigmes de gameplay et de jeux (comme cela a été le cas pour la Wii). Mes grandes craintes sont le prix et la fiabilité du système qui promet beaucoup mais qui, d’après les rumeurs, ne marche pas si bien que cela (pour l’instant le  grand public n’a pas pu y toucher… cela changera peut être dès demain au salon).

Pour terminer, je dirais que Microsoft a frappé un grand coup ce soir mais risque d’avoir dégainé  trop tard face à une Wii déja trop implanté dans la culture vidéo ludique mondiale. Microsoft aurait sorti ce système il y a deux/trois ans,il aurait été les rois du pétrole. Aujourd’hui, il tente un coup de poker pour récupérer le public casual avec un très bon produit mais il néglige clairement les hardcore gamer qui l’ont fait vivre jusqu’à maintenant. En espérant que la sauce prenne …

Bonus : La vidéo de promotion :

Publicités

08/05/2010

[MS Research / DevLabs] Accelerator v2 : Exploiter vos GPU facilement en .NET

Filed under: .NET, DevLabs, Hors Catégorie — Étiquettes : , , , , , , , , — sebastiencourtois @ 17:47

Suite à ma visite sur les sites Internet de Microsoft Research et DevLabs, j’ai décidé de vous parler de ces projets de Microsoft qui seront dans les prochaines versions de .NET (ou pas). Dans les anciens project MS Research que l’on retrouve aujourd’hui au grand public, on pourrait cité WPF/Silverlight,Surface,PFX…

De ce post, nous allons parler d’une technologie dont le nom de code est “Accelerator”.

  • Présentation du contexte

De nos jours, les fabricants d’ordinateur nous fournisse des processeurs toujours plus puissants que ce soit en fréquence d’horloge qu’en nombre de cœurs. Ces nouvelles possibilités commencent à être exploiter correctement (notamment grâce à PFX de .NET 4).

Mais ce qui est moins exploiter est la puissance de calcul des cartes graphiques (GPU). Il faut savoir qu’une carte graphique peut avoir plusieurs processeurs dont chacun peut avoir de nombreux coeurs (jusqu’à 500 pour les plus récentes). Tout ce potentiel n’est utilisé que pour les jeux afin de faire des rendus et des calculs mathématiques afin de rendre des scènes 3D.

Le gros avantages des GPU est sa rapidité de calcul et sa gestion optimisé du parallélisme.

En revanche, les défauts des GPU par rapport aux CPU :

  • Les instructions sont limités aux opérations mathématiques 3D alors que le CPU peut avoir des opérations plus génériques
  • Les instructions dépendent beaucoup du constructeurs de la carte graphique (beaucoup plus que pour un CPU)
  • Il y a très peu d’API permettant d’accéder aux GPU directement (sans passer des API 3D).
  • Qu’est ce qu’Accelerator ?

L’idée du projet Accelerator est de fournir une API (Managé et C++) permettant d’envoyer du code sur ces GPU qu’il l’exécute.

D’autres ont déjà eu l’idée avant Microsoft :

  • Nvidia avec CUDA
  • ATI avec ATI Stream
  • Appel avec OpenCL
  • “Pixel Shaders”

Bien que ces API existent (encore au stade BETA pour la plupart), Microsoft a décidé de créé le projet Accelerator afin de fournir une API de développement pour les GPU indépendant de la plateforme et extensible.

  • Comment cela fonctionne ?

Accelerator se compose de deux gros blogs : Accelerator Library et Target Runtime.

image Structure général d’une application Accelerator

L’”Accelerator Library” est une API de développement pour préparer les données afin d’être exécutés sur le GPU. Cela se base sur un système abstrait à base d’arbre d’expression (nous le verrons plus loin). Cette API est composé d’une partie Native (C++) et d’une partie Managé (wrapper léger sur l’API native).

Le “Target Runtime” est une sorte de driver permettant de faire communiquer l’API avec les couches matériels (GPU … mais aussi CPU Multicore). Ce driver lit les arbres d’expressions d’”Accelarator Library” et envoie les instructions correspondantes aux GPU. Le driver est aussi en charge de la gestion de la charge sur les processeurs/cœurs. Microsoft fournit deux target runtime par défaut : Un DirectX9 (permettant d’accéder indépendamment à l’ensemble des carte graphiques du marché) et un pour les multi-coeurs CPU 64bits. Si vous souhaitez utilisé Accelerator sur d’autres types de processeurs, il suffit de développer un target runtime pour l’architecture cible.

Afin de comprendre le fonctionnement de Accelerator Library, prenons un exemple. Prenons deux tableaux contenant des valeurs à virgules flottantes (float). On souhaite additionner les cases une à une dans un troisième tableaux. Sur un CPU, on aurait une boucle for qui ferait les opération dans l’ordre des cellules et une cellule à la fois.

acceleratorv2 Exécution d’une addition sur un tableau (Sequential Program = CPU / Data Parallel Program = GPU)

Sur le GPU, le tableau est divisé et chaque cœurs à son propre lot de données à exécutés. Après exécution, le tableau est réassemblé à partir des résultats des tableaux de chacun des cœurs.

Afin que les opérations soient abstraites par rapport aux matériels sous jacent, Accelerator fournit un système d’arbre permettant de faciliter la création des instructions GPU. Par exemple, le graph suivant représente l’addition case par case de deux tableau puis la division de chacun des cases résultat par 2.

image Arbre d’expression Accelerator

  • Comment installer Accelerator ?

Accelerator v2 est actuellement disponible sur https://connect.microsoft.com/acceleratorv2.

Une fois installé, vous avez accès à  un document d’introduction et un document contenant l’ensemble des classes du projet. Je vous conseille le document d’introduction qui est très bien fait (j’en reprend un partie dans ce post).

Afin de développer, vous devez ajouter en référence l’assembly Microsoft.Accelerator.dll (contenu dans le répertoire C:\Program Files\Microsoft\Accelerator v2\bin\Managed).

Attention : Pour l’exécuter, il est nécessaire de placer la dll Accelerator.dll (se trouvant dans le répertoire C:\Program Files\Microsoft\Accelerator v2\bin\x86 ou C:\Program Files\Microsoft\Accelerator v2\bin\x64 selon votre architecture ) dans le répertoire où s’exécute l’application sous peine d’avoir l’exception : “DllNotFoundException : Unable to load DLL ‘Accelerator.dll’: Le module spécifié est introuvable. (Exception from HRESULT: 0x8007007E)”

  • Un Hello world “Accelrator”

En reprenant l’exemple d’addition case à case puis d’une division par 2, on obtient un code C# suivant (le reste du code a été enlevé afin de pas alourdir le code).

On commence par simplifier le code en utilisant des using.

using FPA = Microsoft.ParallelArrays.FloatParallelArray;
using PA = Microsoft.ParallelArrays.ParallelArrays;

FloatParallelArray représente un tableau de float sur la cible (carte graphique dans notre cas).. ParallelArrays regroupe les instruction disponible pour la cible.

DX9Target evalTarget = new DX9Target();

On crée le driver qui sera utilisé pour exécuter les opérations. Afin de faire simple, nous utiliserons le driver DirectX9 afin d’accéder aux GPU.

float[] inputArray1 = new float[arrayLength];
float[] inputArray2 = new float[arrayLength];
float[] stackedArray = new float[arrayLength];
/* Ajout de données dans les tableaux  inputArray1/inputArray2 */

On crée trois tableaux. Deux tableaux contenant les données d’entrée (inputArray1,2) que l’on remplit de valeurs diverses et un tableau pour les résultats.

FPA fpInput1 = new FPA(inputArray1);
FPA fpInput2 = new FPA(inputArray2);

On “transforme” les tableaux afin qu’il soit utilisables pour la cible.

FPA fpStacked = PA.Add(fpInput1, fpInput2);
FPA fpOutput = PA.Divide(fpStacked, 2);

On crée les opérations entre les tableaux. On utilise le résultat de l’addition pour la division. Cela génère l’arbre d’expression en copie d’écran plus haut.

evalTarget.ToArray(fpOutput, out stackedArray);

C’est la partie la plus importante du programme. En effet, jusqu’à maintenant nous avons préparé l’arbre d’expression et les données et c’est sur cette méthode, que l’arbre est évalué et que la cible (GPU dans notre cas) réalise les opérations. Le résultat est ensuite convertir et stocké dans un tableau de float .NET.

  • Et les performances alors ?

Il  est vrai que tout ça est un peu contraignant alors on est en droit de se demander si les performances sont aux rendez vous. Sur l’exemple ci dessus par exemple sur ma machine, les performances étaient meilleures en .NET qu’en GPU. La raison est, selon moi, que le temps de copie et d’éxécution est long pour le peu d’opérations exécutées.

Pour des données plus claires sur le domaine, je vous renvoie sur le PDF de MS Research parlant des performances : Document PDF . On peut voir que les performance peuvent être jusqu’à 70x plus rapide sur certains code par rapport au C++ sur CPU.

Le kit de développement contient aussi des samples (dont un jeu de la vie) qui permettent un peu de se rendre compte de ces performances.

Il est nécessaire de rappeler que ce projet est en alpha et donc loin d’être optimisé.

  • Conclusion

Ce projet est plein de promesses même s’il reste en dessous de technologies comme CUDA qui se rapproche du langage C alors que Accelerator est basé sur des arbres d’expressions / opérations mathématiques de bases. De plus Accelerator étant basé sur le parallélisme, il est nécessaire de rappeler que, comme PFX, tous les algorithmes ne sont pas faits pour ces technologies.

  • Quelques liens utiles :

Site du projet sur Microsoft Research (Attention c’est la v1 sur ce site)

Téléchargement de la v2

Article d’un français sur le sujet : Accelerator & F# / Accelerator : F# vs C#

Propulsé par WordPress.com.

%d blogueurs aiment cette page :