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.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.