Raydium et la 3D sur iPhone

Au mois de mars de l’année dernière, un des membres émérites de l’équipe, st, le responsable du port MacOSX du projet, s’était lancé dans un projet particulièrement risqué : le portage de Raydium sur iPhone.

Même si le moteur a toujours eu comme objectif de fournir une bonne portabilité, cette plateforme reste particulièrement limitée et est basée sur des chips graphiques (PowerVR MBX et SGX) très différents de ce que l’on trouve sur les plateformes habituelles, ou l’on se contente du combo AMD/Nvidia. D’ailleurs, le simple fait d’utiliser la version « embarquée » d’OpenGL, OpenGL ES, pose déjà un certain nombre de problèmes assez profonds, étant donné certains choix effectuées dans Raydium.

Malgré ces contraintes, la révision 829 (et quelques patchs supplémentaires) est arrivée et nous a montré qu’il était possible de faire tourner quelques applications Raydium sur un iPhone. Le travail fourni par st est impressionnant, puisque le moteur touche à beaucoup de sujets différents : l’affichage, bien sûr, mais également toute la partie sonore, les entrées utilisateurs (forcément très différentes sur iPhone),  la physique, etc.

Cependant, cette étape ne représentait que le début du projet, en cherchant à porter plus ou moins par force brute le moteur. Aucune optimisation ou adaptation n’avait été effectuée pour l’instant.

Très récemment, j’ai eu à travailler sur des projets qui impliquaient des chips supportant OpenGL ES (MBX/SGX, Mali 55/100/200, ATi Imageon, …) pour une utilisation dans des STB (« box »), du genre Freebox, Neufbox, BBox, +Le Cube, etc. (pour ne pas citer explicitement les clients concernés dans cette liste). La 3D arrive dans ces équipements, la demande est très forte ces derniers mois.

Etant donné que nous n’avons pas actuellement accès à des prototypes de ces STB, j’ai eu à trouver une plateforme qui s’en rapprochait le plus possible du point de vue graphique pour pouvoir faire nos tests dans des conditions les plus réalistes possibles. Les candidats étaient des choses comme des téléphones Android, iPhone/iPad/iPod touch, BlackBerry Storm 2/Curve 8530, Nokia N900 et même la console Pandora.

C’est sur l’iPhone que le choix a été arrêté, pour différentes raisons inintéressantes ici. Cela a d’ailleurs été l’occasion pour moi de bosser réellement sur un Mac (un Macbook, en l’occurrence), et, en tant que développeur en tout cas, ce fut une expérience particulièrement traumatisante : autant le matériel que l’OS m’ont semblé absolument anti-ergonomiques … J’aurais peut-être l’occasion de faire un article qui me permettra d’exposer ma longue liste de critiques à l’encontre de cette machine, histoire qu’on m’explique comment on est supposé bosser convenablement avec tout ça. Enfin bref, j’ai très vite été obligé de me faire aider de SSH pour mettre fin à mon calvaire, et utiliser le Mac comme un vulgaire compilateur (à 1000 euros [mais avec une super autonomie]).

Pour revenir au sujet initial, après quelques contorsions pour se faire à l’Objective C, à Cocoa et autres étrangetés (pas forcément désagréables), j’étais à même de pondre des applis 3D pas complètement dégueus sur iPhone. Il eu été dommage de ne pas mettre à profit ce matériel et ces nouvelles compétences pour jeter un oeil au portage de Raydium effectué l’année dernière et tenter de le pousser un peu plus en avant.

J’ai donc eu l’occasion de bosser sur le support du « Retina Screen » de l’iPhone 4G (du 960×640 avec plein de DPI, en gros), les mipmaps, les problèmes causés par le mode « paysage » de l’iPhone, une lecture plus fluide des infos des capteurs d’orientation, une simplification de la physique (trop lourde par défaut pour le CPU du téléphone), les ombres, le multitexturing, une émulation (nulle pour l’instant) du joystick, la couche réseau, et surtout, un nouveau renderer qui exploite les particularités d’OpenGL ES et des GPU PowerVR.

Et le résultat ces quelques (dizaines de ?) heures de boulot n’est pas désagréable ! Alors que nous n’avons pas encore attaqué l’optimisation du renderer (et il y a beaucoup à gagner sur les changements de contexte, par exemple), on arrive à voir certaines applications Raydium tourner à 60 FPS, à pleine résolution, avec des lightmaps, du trilinéaire, de la physique et du réseau. Et le tout sans qu’on ai besoin de modifier ni le code, ni les assets des applications.

J’ai essayé de monter une petite vidéo qui montre l’état actuel des choses : (version HD dispo) 

Même si c’est impossible à distinguer sur cette vidéo, du fait des limitations de l’enregistrement, voir KingHill2 tourner à 60 FPS, sans le moindre accro, sur le Retina Screen (qui est franchement impressionnant, on en arrive à un point on l’antialiasing devient inutile), c’est très gratifiant.

Et le plus beau, c’est qu’il a encore pas mal de choses plutôt simples à faire qui vont très probablement donner encore un gros coup de boost, et que les autres portages de Raydium risquent bien d’en profiter aussi. \o/

PS : J’ai aussi commencé à m’amuser avec des expérimentations pour essayer de rendre des ombres plus sympa, un peu dans le style « occlusion ambiante ». C’est pas encore ça, et ça rame dur. Mais c’est rigolo à faire.


Publié

dans

par

Étiquettes :

Commentaires

4 réponses à “Raydium et la 3D sur iPhone”

  1. Avatar de KaB
    KaB

    Impressionnant. On nous sort tellement de bouses à 10€ qui malgré leurs pauvres graphismes ne doivent pas dépasser les 15FPS.

  2. Avatar de skaven
    skaven

    Beau boulot. Bravo.
    Les STB sont à la mode. Je travaille +/- dessus en ce moment.

  3. Avatar de divide

    Bien joué pour le portage, en effet ça a l’air de tourner à l’aise !

    Sinon, je suis dans la même situation que toi depuis 1 semaine, je découvre les joies du codage/portage C++/OpenGL sous Mac…
    Ma hate-liste perso:
    -clavier pas du tout adapté au code (seriously, le [] est même pas visible)
    -les touches « home »/ »end » me renvoient au debut/fin de mon document au lieu du debut/fin de ma ligne de code… qu’est ce que je peux perdre comme temps à cause de ca :/
    -on peut pas éjecter un cd via le bouton hardware ? C’est quoi cette blague. Pour peu qu’un cd soit mal reconnu et bloque l’OS, obligé de reboot -_-
    -la gestion des librairies : la ou sous windows il suffit de coller les dll à coté de l’exe, ou de les enregistrer dans windows, ben sous mac tu doit te taper un rename interne de tous les chemins de toutes les libs/executable/plugins pour que ca colle lorsque tu redistribue ton appli ! vachement pratique…
    -le finder anti-ergonomique au possible : galère pour naviguer dans l’arborescence (par rapport à l’explorateur), et il mélange pele-mêle dossiers et fichiers lorsque tu classe alphabetiquement

    Au fait tu as pas rencontré des différences de comportement au niveau OpenGL entre mac/linux/win ? Par exemple la j’utilise des textures LA16F qui passent sans problème sous win, mais pas du tout sous mac. C’est beau les standards.

  4. Avatar de Radical
    Radical

    Les STB sont à la mode mais aussi en passe de se faire largement devancer par les TV connectées (LG, Sony…). Pour avoir travaillé sur les deux, je peux dire sans problème que tout ce qui manque aux TV c’est le décodage des flux réseaux pour les chaînes du FAI. Pour le reste c’est tip-top (LG > Webkit intégré, pas la dernière version évidement mais avec pas mal de CSS3, etc…)

Laisser un commentaire