URL: https://linuxfr.org/news/entretien-avec-nicolas-auvray-contributeur-du-projet-0-a-d Title: Entretien avec Nicolas Auvray, contributeur du projet 0 A.D. Authors: eingousef Lucas, BAud, Spyhawk, palm123, Nils Ratusznik, M5oul et rogo Date: 2016年01月18日T10:03:02+01:00 License: CC By-SA Tags: 0ad et entretien Score: 65 _0 A.D. : Empires Ascendant_ est un jeu vidéo de stratégie en temps réel (RTS) historique en 3D développé par Wildfire Games. C'est un projet libre (code sous GNU GPL v3, données sous CC by-sa 3.0), au développement ouvert, visant des standards de qualité artistique comparables à ceux de l'industrie, ainsi qu'un grand respect de la réalité historique. Le jeu, multiplate-forme et multilingue, permet d'incarner 12 factions qui ont marqué l'Histoire entre les rives de l'Atlantique et la chaîne de l'Himalaya, au cours de la période allant de -500 à -1. ![0 A.D. logo 320px](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/0_A.D._logo.png/320px-0_A.D._logo.png) _0 A.D. : Empires Ascendant_ a été libéré en 2009. Depuis, le projet a eu un parcours mouvementé, tant sur le plan technique que sur les plans budgétaire et humain. Dernier challenge en date : recoder complètement l'algorithme de recherche de chemin ([pathfinder](https://fr.wikipedia.org/wiki/Recherche_de_chemin)), bout de code extrêmement complexe et jusqu'alors responsable de la majorité des ralentissements que subissait le jeu depuis plus de trois ans. Le 12 juin 2015, Nicolas Auvray (_Itms_), contributeur du projet, commite un nouveau pathfinder qui améliore de façon significative les performances de la version svn du jeu. En fin d'année 2015, alors que la version alpha 19 "Syllepsis" vient de sortir, équipée de ce nouveau pathfinder, nous avons le plaisir d'interroger Nicolas dans les colonnes de LinuxFr.org. ---- [Site officiel](http://play0ad.com/) [Compte twitter](https://twitter.com/play0ad) ---- **_Bonjour Itms, peux-tu te présenter ?_** Bonjour eingousef ! Et merci de m'accueillir sur LinuxFr.org :-) Pour les présentations, je m'appelle Nicolas Auvray dans la vraie vie et j'étudie la physique à l'ENS de Lyon. Je suis aussi passionné par plein d'autres choses en dehors, en particulier la programmation et l'Antiquité, ce qui fait de moi une proie facile pour un projet comme 0 A.D. ! **_Comment en es-tu venu au libre en tant qu'utilisateur et développeur ?_** Je ne sais pas exactement comment je suis venu au libre en tant qu'utilisateur, mais comme beaucoup d'autres français, j'ai découvert la programmation sur feu le Site du Zéro, qui à l'époque faisait découvrir non seulement des outils libres mais aussi l'envers du décor et nous incitait à participer en tant que développeurs débutants à des projets libres. Puisque je suis sur LinuxFr.org, c'est par exemple à cette époque que j'ai découvert Linux, et même si je continue à utiliser un OS privateur au quotidien, y compris pour développer, j'ai toujours quelques machines virtuelles sous la main ! **_Comment as-tu découvert 0 A.D. et commencé à y contribuer ?_** J'ai découvert 0 A.D. via un blog que je suis depuis un longtemps, celui de [Dedoimedo](http://dedoimedo.com), un blogueur qui a un avis (parfois très tranché) sur un peu tout, qui a consacré plusieurs posts au jeu il y a un certain temps. Je suis tout de suite tombé amoureux du jeu parce que c'était un projet très accueillant qui m'a tout de suite donné envie de contribuer, parce que je suis passionné par cette période antique et ses cultures, et que j'ai beaucoup joué à des jeux de type [RTS](https://fr.wikipedia.org/wiki/Jeu_de_strat%C3%A9gie_en_temps_r%C3%A9el). Malheureusement, je n'ai pas pu commencer à participer, parce que j'étais en prépa ! Mon idée de contribuer à 0 A.D. a donc dû sommeiller un bout de temps, et c'est à la rentrée 2013, en arrivant dans mon école (et en retrouvant une vie) que j'ai proposé mes premiers patchs pour le jeu et que j'ai commencé à rencontrer les gens de la communauté. **_Tu as donc pu suivre le cheminement du jeu entre 2010 et 2012 si j'ai bien compris, grosso-modo sur les 12 premières alphas, en plein dans la période de "renaissance" de 0 A.D. Comment as-tu vu évoluer le projet depuis que tu y es impliqué ?_** Non, pas vraiment, parce qu'en prépa je n'ai pas pu suivre grand chose ! C'est en sortant que je me suis souvenu de 0 A.D. Depuis que je suis impliqué dans le projet, il y a eu très peu de gros changements à mon avis, on fonctionne toujours à peu près de la même façon, mais on approche de plus en plus de la bêta et du coup il y a de moins en moins de nouveautés dans le code et les sorties de nouvelles versions s'espacent de plus en plus. On essaie de contrer ce phénomène parce que c'est mauvais pour attirer des contributeurs, vu qu'une nouvelle version ça nous donne beaucoup de visibilité. **_Effectivement le projet a eu des hauts et des bas, mais il continue à avancer, quelles sont les barrières qu'il reste à franchir ?_** La barrière majeure qu'il nous reste à franchir, c'est un problème d'équilibrage du jeu. Il faut rendre le jeu agréable à jouer, et c'est tout un métier ! Il y a un juste milieu à trouver entre profondeur de jeu et simplicité, et dans notre cas on doit aussi tenir compte du réalisme du jeu, parce qu'un des objectifs est d'avoir un jeu le plus exact possible historiquement. Malheureusement les fondateurs de 0 A.D. sont en grande partie inactifs désormais, et on ne peut pas se contenter du retour des joueurs sur ce point parce que tout le monde a une opinion différente, on ne peut pas faire un jeu qui plaise à tout le monde. Au niveau des défis qu'il nous restent à franchir du point de vue "programmation", on est face à un problème de performance qui nécessite énormément d'investissement. On a nettement amélioré les choses dernièrement, mais l'optimisation du jeu est un défi qu'on ne peut pas relever d'un coup, on doit procéder par petites touches. En particulier, une grosse source de ralentissement venait de nos algorithmes de recherche de chemins, ce qui est un problème récurrent dans le développement de jeux vidéos ! Récemment, j'ai intégré au jeu un nouvel algorithme pour les chemins longs, mais celui pour les chemins courts reste une source de problèmes. Personnellement, cette année scolaire je n'ai que très peu (voire pas) de temps à consacrer à 0 A.D., mais il s'agit d'une de mes priorités pour quand ma vie sera moins chargée ! **_Nous avons effectivement eu plusieurs fois l'occasion d'évoquer le code de recherche de chemin, ou "pathfinder" en anglais, sur LinuxFr.org dans les annonces relatives à 0 A.D.. Mais pour les lecteurs qui ne seraient pas très familiers avec le concept, est-ce que tu pourrais expliquer ce qu'est un pathfinder, son rôle et comment il opère ?_** L'objectif de la recherche de chemins, c'est de permettre au jeu de trouver les plus courts chemins entre deux points en présence d'obstacles. En effet, les humains sont très doués pour déterminer de tels chemins, c'est quasiment instinctif, mais du point de vue de l'informatique théorique c'est un problème extrêmement complexe. Du coup, la complexité ça se traduit par un nombre très important de calculs à effectuer et ça diminue les performances du jeu (en clair, ça fait lagger ;-) ) Dans 0 A.D., la recherche de chemins est essentielle pour deux systèmes : les unités, qui doivent trouver comment aller de leur position actuelle à celle que le joueur leur indique, et l'intelligence artificielle (l'IA), contre qui on peut jouer en mode solo, qui peut avoir besoin de déterminer un chemin qui évite la base de l'adversaire, etc. Il faut aussi savoir que le pathfinder est couplé à la détection des collisions, parce que si l'unité calcule un chemin, et que durant son déplacement un bâtiment est construit, elle doit le détecter et le contourner, par exemple. De manière générale, le gros problème n'est pas de trouver le plus court chemin (c'est bien sûr la ligne droite), mais plutôt d'éviter les collisions. **_Donc plutôt que d'avoir un pathfinder qui explore tous les chemins possibles après le point de départ, ce qui consommerait beaucoup trop de ressources, on utilise un pathfinder qui va d'abord essayer la ligne droite, puis, s'il rencontre un obstacle, chercher dans toutes les directions de façon incrémentale, puis choisir le meilleur chemin parmi ceux qu'il a trouvé pour contourner l'obstacle, c'est cela ? Ou bien c'est plus complexe ?_** C'est à peu près ça : tu as grosso modo décrit la différence entre l'algorithme de Dijkstra et le A* que nous utilisons pour le pathfinder longue portée. En réalité c'est légèrement plus compliqué mais [les pages Wikipédia](https://fr.wikipedia.org/wiki/Pathfinding) des [deux](https://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra) [algorithmes](https://fr.wikipedia.org/wiki/Algorithme_A*) expliquent ça très bien ! Et pour les lecteurs plus versés en algorithmique, un des changements du nouveau pathfinder est d'utiliser l'optimisation dite "Jump point search" (je traduirais ça par "recherche par sauts" mais je ne connais pas la traduction officielle) qui est particulièrement efficace car dans 0 A.D., tous les chemins de même longueur sont équivalents (il n'y a pas de zones plus difficiles à traverser que d'autres). **_[NdR : Représentations de processus de recherche de chemin entre un point de départ et un point d'arrivée, sur une carte disposant d'un obstacle entre ces deux points, l'un utilisant l'algorithme de Dijkstra, l'autre utilisant l'algorithme A*. On voit bien la différence de rapidité entre les deux algorithmes sur un cas pratique courant.]_** ![Animation de progression des pathfinders](http://pix.toile-libre.org/upload/original/1453390310.gif "Progression du pathfinder : Dijkstra (à gauche) versus A* (à droite)") **_Quelles sont les particularités du pathfinder de 0 A.D., et en quoi celui-ci diffère-t-il des pathfinders des autres jeux libres (Megaglest, Warzone 2100...) ?_** Je ne connais pas trop les pathfinders d'autres jeux, malheureusement. Les particularités du pathfinder de 0 A.D., c'est probablement d'en avoir deux : un à courte distance et un à grande distance. L'idée, c'est que si on décide de prendre en compte toutes les collisions possibles, avec les bâtiments, les unités qui bougent, etc, on va faire planter le jeu, purement et simplement, c'est bien trop complexe. Donc on calcule un chemin "long", qui ne prend en compte que les obstacles fixes, et si jamais on entre en collision avec quelque chose, on calcule un chemin local avec le pathfinder courte portée, qui est moins efficace car il regarde tout, mais c'est compensé par le fait qu'il ne regarde que peu d'objets, ceux qui sont proches. Une autre particularité est que l'IA du jeu, Petra, est très aboutie et a donc des besoins assez importants, le pathfinder doit donc être capable de les satisfaire. **_Je crois savoir que beaucoup de contributeurs se sont relayés les uns après les autres sur le développement du pathfinder de 0 A.D., est-ce que tu pourrais nous donner plus de détails sur l'historique de celui-ci, avant et après la refonte ?_** Je ne connais pas trop l'historique de l'ancien pathfinder. Quand je suis arrivé, Philip Taylor (Ykkrosh), qui est le programmeur qui a entièrement réécrit le code de la simulation (c'est-à-dire les unités, les bâtiments, les attaques, les ressources, etc.) de 0 A.D. au moment où le jeu est devenu libre et open-source (c'est vous dire le niveau de cet homme !), avait écrit un prototype de nouveau pathfinder avant de devoir se retirer de l'équipe par manque de temps. Le nouveau pathfinder introduisait un graphe des régions de la carte connectées, pour pouvoir optimiser pas mal de fonctions, et ajoutait la fameuse optimisation "Jump Point Search" au pathfinder à longue portée. Du coup ce nouveau pathfinder prenait la poussière sur un dépôt git, et une ou deux personnes qui avaient essayé de le finir et de l'intégrer au jeu avaient abandonné : je pense à quantumstate, qui n'était déjà plus actif quand je suis arrivé, mais je crois qu'il y a eu d'autres tentatives. D'ailleurs quantumstate avait déjà écrit le pathfinder de l'IA, donc il a été important dans l'historique de ce système. À l'été 2014, wraitii s'est à son tour lancé et a dû arrêter par manque de temps mais j'ai accepté de continuer son travail, et, cette fois, ça nous a vraiment permis d'avoir une base solide pour l'intégration du code. J'y ai passé presque un an, j'ai reçu l'aide de kanetaka, un contributeur occasionnel qui avait proposé un patch pour l'ancien pathfinder qu'on a intégré dans le nouveau, et qui a corrigé quelques bugs et ajouté des optimisations. J'ai aussi eu un coup de main de la part de mimo, qui est le développeur qui s'occupe de l'IA en ce moment, et de sanderd17 qui a corrigé quelques bugs de dernière minute. Et enfin, depuis le "commit" de ce code en juin, j'ai introduit quelques optimisations et corrigé toujours plus de bugs. :-) **_Visiblement les premiers travaux sur le nouveau pathfinder datent de bien avant la focalisation sur les problèmes de performance : qu'est-ce qui posait problème avec l'ancien pathfinder et pourquoi fallait-il en écrire un nouveau ?_** Le nouveau pathfinder a quand même été écrit pour améliorer les performances : ce problème a toujours été critique, même si on ne se focalise plus dessus en ce moment parce que le projet est plus avancé. Le problème essentiel de l'ancien pathfinder (qui n'impactait pas seulement la performance d'ailleurs), c'est qu'il ne savait pas si deux points de la carte étaient accessibles l'un à partir de l'autre. Ça le limitait énormément, et bien sûr ça causait aussi d'affreux ralentissements quand le joueur (ou, plus souvent, l'IA) demandait aux unités d'aller d'un endroit à un autre non accessible et que le jeu tentait de calculer des chemins impossibles. Ça se voit pas mal sur les illustrations de Dijkstra et de A* mises plus haut : si jamais tu trouves un chemin, le calcul est fini, mais si il n'y en a pas, il faut tester tous les chemins possibles avant de s'arrêter ! **_La connaissance de l'accessibilité d'une zone de la carte à partir d'une autre, l'inclusion de l'optimisation Jump Point Search dont tu as parlé (si j'ai bien compris il s'agit de représenter l'espace en un ensemble de "nœuds" interconnectés et de lancer dessus un dérivé de l'algorithme A* (JPS donc), optimisé pour ce type de représentation)... Quelles autres différences techniques y a-t-il entre le nouveau pathfinder et l'ancien ?_** Il y a plein de petites choses qui ont changé mais globalement ce sont les deux changements majeurs au niveau du design. À part ça, un changement assez technique a été effectué au niveau de la gestion des obstructions, dans le but d'accélérer la recherche de chemins : pour simplifier, les bâtiments et autres obstructions sont maintenant traités comme des zones infranchissables de la carte elle-même (comme l'eau ou les pentes escarpées). Ça accélère drastiquement la recherche de chemins, mais ça oblige à mettre à jour la carte en permanence, parce que les bâtiments sont construits, détruits, etc. Du coup pour que le bilan soit favorable, j'ai dû réécrire ce nouveau code qui "aplatit" les obstructions sur la carte. Enfin, j'en ai parlé un peu plus haut, le nouveau pathfinder est accessible par l'IA (qui est écrite en JavaScript pour pouvoir être moddée) et donc on a pu se débarrasser du petit pathfinder personnalisé de l'IA, qui mangeait énormément de ressources et qui avait été introduit de manière temporaire. **_Comment en es-tu arrivé à travailler sur le pathfinder de 0 A.D. et quelles étaient les particularités de ton travail au sein de Wildfire Games (qualités demandées, niveau de difficulté, salaire, temps, moyens...) ?_** Ça s'est fait comme ça, wraitii n'était plus dispo pour continuer son travail, au cours d'un meeting on a décidé que je reprendrais le projet, avec l'aide de l'équipe bien entendu. On passe tous beaucoup de temps sur le jeu, on se sent quand même responsables du développement, mais notre travail est 100 % bénévole ! Pas de salaires ou autres, seulement de la motivation et une excellente ambiance. La difficulté et les qualités, ça dépend beaucoup des tâches, il y a beaucoup de choses très simples et quelques problèmes très compliqués (comme le pathfinder). Très peu d'entre nous sont aussi des développeurs dans la vraie vie, donc pour la plupart c'est face à un problème qu'on apprend à le résoudre, on ne dispatche pas les tâches en fonction des compétences de chacun, mais plutôt en fonction de ce sur quoi on aimerait travailler. Et on est très très contents quand des contributeurs nouveaux ou occasionnels nous aident ! Même les tâches simples demandent beaucoup (trop) de temps donc quand on reçoit de l'aide le jeu avance à plus grands pas ! Et pas besoin d'être une divinité de la programmation pour nous donner un coup de main ;-) **_La communauté 0 A.D. n'a pas de divinités mais elle a ses héros, et pour beaucoup de fans du jeu tu as rejoint ce panthéon en permettant au projet de refonte du pathfinder d'atteindre son premier jalon (la finalisation du pathfinder longue-distance), et de revenir à des performances décentes dans la version alpha 19 du projet (un véritable soulagement !). Mais tu as dit que tu continuais à travailler sur le pathfinder et les performances, que reste-t-il encore à faire ?_** Il s'agit essentiellement de travailler sur le pathfinder courte portée, qui ne pose pas d'énormes problèmes mais qui correspond tout de même à une grande partie du temps de calcul passé sur la simulation. Il est probablement possible de l'optimiser, et Philip avait également proposé le design d'un nouveau système, qui réduirait énormément notre utilisation du pathfinder courte portée. Mais je ne peux pas vraiment en dire plus avant de programmer et de tester le gain en performance ! Et bien évidemment, il reste des bugs à corriger, qui ont été introduits par le nouveau pathfinder, et qui seront résolus au fur et à mesure qu'on les découvrira. On peut compter pour cela sur elexis, le dernier arrivé dans l'équipe de développement, qui fait depuis son arrivée dans la communauté un travail incroyable de test du jeu pour repérer tous les problèmes ! **_Comment comptes-tu contribuer dans le futur, à 0 A.D. ou éventuellement d'autres projets libres ? Est-ce que tu peux nous dire deux mots sur tes contributions en-dehors du pathfinder ?_** Eh bien pas de projets en particulier, je vais continuer à contribuer sur mon temps libre, sur ce qui me paraît important ! J'ai bien quelques patches en préparation, mais tant qu'ils ne sont pas prêts je préfère ne rien dévoiler ;-) Quand à d'autres projets libres, ça serait super mais je crains de ne pas du tout avoir le temps ! En dehors du pathfinder, ma plus grosse contribution a sans doute été de cacher les changements aux bâtiments dans le brouillard de guerre (ça a été introduit dans la version A17). Ça a été très difficile de faire ce système et on continue encore à trouver des bugs cachés liés à la visibilité des entités du jeu ! À part ça, j'ai fait énormément de petites et moyennes choses (la liste est trop longue et peu intéressante) ! Et en dehors de la programmation, je coordonne la traduction française, je travaille un peu sur les langues anciennes (les voix des unités et les textes) et je m'occupe du compte Twitter [@play0ad](https://twitter.com/play0ad). **_Tu as dit qu'avec le départ de la plupart des membres fondateurs, le projet partait un peu dans des directions différentes, et que rééquilibrer le jeu pour le rendre plus agréable à jouer constituait la prochaine grosse étape. D'une façon plus générale, comment vois-tu 0 A.D. évoluer dans le futur (tant au niveau gameplay que art, code, technologies utilisées, etc.) ?_** Je ne sais pas trop quelles nouvelles choses vont apparaître dans le jeu, mais je pense qu'on approche de plus en plus d'une version bêta et que le gameplay va de moins en moins changer. Il reste quand même à prendre une décision sur les formations, sur l'agriculture et possiblement d'autres choses qui peuvent avoir une grosse influence sur le ressenti des joueurs et des joueuses. Au niveau de l'art, il reste à terminer les bâtiments Séleucides et leur musique, et ça serait génial de pouvoir inclure [les nouveaux modèles d'unité créés par Enrique](http://wildfiregames.com/forum/index.php?showtopic=19289), mais on manque d'animateurs 3D ! C'est sur ces domaines qu'on va se concentrer principalement. **_Avec ton expérience actuelle au sein d'un gros projet communautaire, quels conseils donnerais-tu à une personne qui voudrait contribuer à un projet de jeu vidéo libre (que ce soit dans le domaine du pathfinding ou en général) ?_** Un seul conseil : foncez ! Avec toujours l'envie de faire les choses bien et de toujours accepter les critiques des autres contributeurs, mais ne vous auto-censurez surtout pas ! C'est en essayant de faire des choses apparemment très difficiles et intimidantes qu'on réussit à les faire, et les progrès et les découvertes que vous pourrez faire en contribuant à un projet libre (jeu vidéo ou autre d'ailleurs) seront innombrables. **_As-tu quelque chose à ajouter ?_** Je voudrais dire "venez contribuer !" mais c'est essentiellement ce que je viens de dire dans la question précédente sur les conseils. En tout cas soutenir le projet, c'est jouer au jeu, en parler autour de soi, convertir des joueurs de RTS plus connus mais payants, etc ! Même si vous ne programmez pas ou ne faites pas de graphisme, vous pouvez grossir nos rangs ! **_Merci beaucoup Nicolas pour tes réponses et le temps que tu nous as accordé, à moi et aux lecteurs de LinuxFr.org, et bon courage pour tes contributions futures !_** Et encore merci à toi et à LinuxFr.org pour cet entretien !

AltStyle によって変換されたページ (->オリジナル) /