Homemade Pixels

Des pixels frais qui sortent du four le blog de MrHelmut.

Archive pour juin 2012

Playstation Mobile SDK

Lundi 25 juin 2012

Depuis avril, le Playstation Mobile SDK est disponible en open beta. L’occasion pour moi de justifier l’achat compulsif d’une PS Vita…

playstation-mobile

Anciennement connu sous le nom de Playstation Suite, le Playstation Mobile (appellons-le PSM) est un service qui débarquera en fin d’année sur tous les appereils certifitiés “Playstation”. Soit la PS Vita, les smartphones Android de Sony (Xperia) et des smartphones HTC à venir. Ce service se présentera sous la forme d’un market à part entière et proposera les mêmes applications et jeux sur tous les appareils concernés. Côté utilisateurs, rien de bien neuf, si ce n’est du contenu (et une certaine redite vis-à-vis des “Minis”).

Mais ce qui m’intéresse, c’est l’autre côté de la barrière. Derrière ce service, il y a un nouveau SDK. Ce PSM SDK est en beta depuis septembre 2011 et a été ouvert à tous depuis avril. L’intérêt est qu’il sera gratuit et que l’accès au market pour les développeurs sera ouvert aux petits indépendants (comme tout market qui se respecte). Et ca, du côté de chez Sony, c’est assez neuf (publier des Minis n’était pas encore un exemple d’ouverture). Seule contrainte : devoir s’acquitter d’une licence annuelle de $99 pour publier, mais l’utilisation du SDK reste gratuit (the usual stuff). On ne sait par contre pas encore si l’on pourra proposer des appli gratuites.

Je n’entrerai pas dans le débat de l’hypothétique viabilité de ce futur market (et encore moins de celle de la Vita). Non, ce qui m’intéresse, c’est de mettre les mains dans le cambouis.

Microsoft inside

D’un point de vue technique, la première chose qui frappe, est que les appli produites avec le PSM SDK sont cross-plateforme Android-Vita, qui ne partagent pas leur OS. Derrière ceci se cache Mono, un choix à la fois pertinent et curieux puisqu’il s’agit de l’implémentation open-source du Framework .NET de Microsoft. Pertinent car Mono est très abouti et presque plus utilisé sur Android et iOS que l’implém’ officielle (même Unity repose dessus), et curieux parce c’est toujours un peu rigolo de voir la concurrence reposer sur ce type de techno (même si en vérité, bien des SDK de consoles s’interfacent avec Visual Studio, par souci de chaine de production de jeux multi-plateforme).

Etant aficionados des techno Microsoft, je ne peux m’empêcher de faire le parallèle avec un autre SDK : XNA. Ils reposent tous deux sur .NET et ciblent un market ouvert. Je dois avouer que la parenté .NET de ce PSM SDK a été un facteur décisif dans l’achat d’une Vita, sans compter l’offre de remboursement de 50€ et le prix de la machine dans mon pays de travail. Parce que bon, sa ludothèque actuelle…

L’environement de développement

Qui dit Mono, dit MonoDevelop, l’IDE associé à Mono. Ce PSM SDK repose évidemment dessus en le renommant PS Suite Studio au passage. Seule particularité, un menu de gestion des targets pour débugger ses appli sur Vita, Android (via adb) ou dans un “émulateur” (guillemets de rigueur, car il ne s’agit pas d’un émulateur, mais simplement de l’appli Mono tournant sur Windows). Etant basé sur MonoDevelop, les développeurs venant de Visual Studio naviguent en eaux connues, la philosophie de l’IDE étant de disposer des mêmes fonctions que Visual Studio. Au point d’avoir des menus et fonctions à 90% identiques et une compatibilité parfaite avec les fichiers de solutions VS2010. Seule réelle différence, MonoDevelop intègre Git comme gestionnaire de versions (contre TFS chez Microsoft). D’ailleurs profitons-en pour pointer vers Channie et Anahkiasen pour leurs billets sur le versioning.

Une API patchwork

Côté API, Sony propose les bibliothèques .NET suivantes, divisées en deux catégories :

Libs bas niveau :

  • Audio : pour tout ce qui est son, forcément. Mais pas si bas niveau que ca… Même plutôt très haut niveau. Pour le coup, cela ressemble énormement à l’API sonore d’XNA. Il y a une classe pour les sfx, et une pour la musique avec le service minimum (load/play/stop). Pas d’accès sonore bas niveau donc, ce qui tue presque dans l’oeuf toutes opportunités de voir arriver des émulateurs sur le PS Mobile (du moins avec du son).
  • Graphics : un bind .NET d’OpenGL ES. Très proche de l’API 3D d’Android donc, et pas si lointaine d’XNA et d’Unity. Côté sympa, on a accès aux shader programs (ce qui n’est pas le cas sur Windows Phone 7 avec XNA). L’API offre quelques facilités, comme la très classique classe Texture2D (très similaire à celle d’XNA et Unity).
  • Imaging : une API pour l’affichage d’images et de fonts. Essentiellement la base de l’API haut niveau UI et une sorte de réécriture de la classe Image de .NET.
  • Input : pour tout ce qui est inputs de la Vita et d’Android (incluant les boutons “Playstation”, le/les touch screen et les gyro).

Libs haut niveau :

  • GameEngine2D : une API 2D en surcouche à OpenGL ES, dans la philosophie de ce que propose XNA (avec son SpriteBatch) mais avec une nuance de taille puisqu’il s’agit d’un port de Cocos2D, que les développeurs iPhone connaissent bien.
  • Model : une lib pour la manipulation de modèle 3D, toujours dans la mouvance XNA. Chose étrange, le seul format supporté est le MDX (le format développé par Blizzard). Je pense que ce choix a été motivé par le fait qu’il existe une très bonne lib de manipulation d’MDX en C#. Heureusement, Sony propose un outil permettant de convertir les formats populaires (fbx, x, xsi & collada) vers MDX (avec plus ou moins de succès).
  • Physics2D : au cas où ça vous prendrait de faire un clone d’Angry Birds. Il s’agit d’une lib pour moteur physique 2D qui assure le service minimum. Je ne comprend pas trop l’intérêt puisque l’on aura plus vite fait d’utiliser l’excellent Farseer Physics pour .NET (un port de Box2D éprouvé).
  • UI : Sony a développé sa propre lib de fenêtrage supportant un ensemble de composants assez classiques. L’affichage passe par OpenGL ES et on peut facilement mixer UI et 3D. La composition d’UI est similaire aux WinForms de .NET. Sony propose un outil externe pour créer des fenêtres (UI Composer, je reviendrai dessus) de manière graphique.

Truc cool, le code source des libs haut niveau est fourni. En cas de bug, c’est très pratique (enfin, du moins pour ceux qui comme moi patch les libs qu’ils utilisent plutôt que de râler sur un forum).

Pour résumer, Sony ne ré-invente pas la roue et va piocher par ci par la pour draguer un maximum de développeurs. On voit bien qu’ils essaient d’attirer autant les développeurs Android que iPhone et XNA (et Flash, dans une certaine mesure). Au final, on a un peu l’impression d’être devant une API pas si consistante.

Pour tout ce qui n’est pas dans le SDK, tel que le networking, on peut librement utiliser les lib .NET. Par contre, il n’est pas possible d’avoir le controle sur le wifi ou la 3G (mais apparemment ca va venir).

Autre limitation, et de taille : pas de code natif !

Les outils autour

En plus de MonoDevelop, Sony fourni des outils maison :

  • Animation Converter : pour convertir des animations Flash au format Cocos2D.
  • Model Converter : pour convertir du .x, .fbx, .dae ou .xsi en MDX/MDL.
  • Shader Converter : pour convertirdu HLSL/Cg en GLSL.
  • Osc Tool : un outil pour facilement créer des controles virtuels à base de boutons Playstation pour touch screen. Mais ça déconne pas mal dans la version actuelle, apparemment compatible qu’avec Android.
  • UI Composer : un outil pour créer des fenêtres pour l’API UI. On compose son UI de manière graphique, puis l’outil génère le code C# à intégrer dans son projet pour créer cette fenêtre. L’outil est plutôt pas mal, mais présente quelques bugs (notamment un bug avec la culture de l’assembly, qui oblige à passer Windows en anglais pour que l’outil démarre; une erreur de noob en .NET).

En pratique

Pour tater un peu de ce SDK, j’ai converti mes émulateurs Gameboy et Chip8 pour Vita. J’ai du mettre quelque chose comme 30min pour le faire, le temps de comprendre les libs UI et Imaging. Je n’ai même pas eu à modifier la moindre ligne de mes émulateurs .NET (merci Mono), tout juste la poignée de lignes concernant l’affichage du buffer.

La conversion d’un jeu XNA 2D est bien plus fastidieuse. Passer de SpriteBatch à Cocos2D est un certain travail. Par contre, convertir un jeu 3D est parfois plus simple. Enfin, tout dépend de la complexité mais OpenGL et Direct3D sont assez proches (pour l’utilisation que j’en fais). Essentiellement une histoire de changement des noms des types (VertexBuffer etc). Par contre, il faut se palucher la conversion HLSH->GLSL à la main, leur outil n’étant pas super au point (et le pipeline de rendu pas tout à fait le même).

Il y a encore quelques bugs par ci par la. D’où l’intéret d’une beta me diriez-vous. Mais le SDK est orienté communauté, avec un forum de développeurs et les gens de chez Sony sont réactifs pour récolter les bugs. Il n’y a pas encore eu de mise à jour de la beta depuis avril, donc je ne peux pas vraiment me prononcer sur les correctifs. En tout cas Sony a l’air plus transparent et accessible que Microsoft avec XNA. Si les développeurs d’XNA sont des gens relativement accessibles et sympas, quand on en vient aux bugs et correctifs, ils pratiquent l’omerta (et on est obligé de passer par Microsoft Connect pour les bug reports).

Bref, un SDK vraiment sympa, simple et puissant, mais loin de la maturité et de la consistance des meilleurs SDK en développement mobile. J’aurais aussi trouvé sympa qu’on puisse targeter iOS, puisque de Mono à Mono.Touch, il n’y a qu’un pas.

Ce que je retiens de mon expérience avec ce SDK, c’est que Mono fonctionne superbement bien et que la Vita est une sacrée machine. Elle est puissante et l’OS répond au doigt et à l’oeil (le multi-tâche est super performant). Par contre, côté interface, c’est bourré d’incohérence et pas très intuitif. Mais bon, ca c’est peut être le chercheur en interaction qui est en moi qui parle.

Si vous n’êtes pas membres wefrag, vos commentaires peuvent être recueillis par mail :

contact