postit
Réseau CPC BARRE DE VIE BAS GROS POING Crunchez vos adresses URL
|
Calculez la conso électrique de votre PC
|
Hébergez vos photos
Vendredi 10 Février, 2012
No gus, no demo
Le site du jeu vidéo et du PC dont vous êtes le héros
image_couly_132 Canard PC cadre_recherche
par la redac par 05 septembre 2009 - 08h20
illustration

Parmi toutes les difficultés qui se présentent lors de la réalisation d’un jeu, celle du pathfinding est sans doute loin d’être la plus simple à résoudre.

Profitant de la rubrique DevBlog prévue à cet effet, nous allons parler ici d’un type de pathfinding particulier que j’ai mis au point pour Ronin Blades, un des jeux flash que je développe personnellement.

Qu’est-ce que le pathfinding ? C’est l’ensemble des algorithmes qui vont permettre à l’ordinateur de calculer le chemin que doit emprunter un personnage contrôlé par l’IA pour aller d’un point A à un point B tout en évitant les obstacles et en parcourant la distance la plus petite possible.

Si la plupart des jeux flash, parce qu’ils sont vus de côté ou parce que leur réalisation est primaire, n’ont pas besoin de pathfinding, ce n’était pas le cas de Ronin Blades, qui est vu de haut et présente des environnements contenant des bâtiments et autres obstacles qu’il faut contourner et derrière lesquels il est possible de se cacher.

J’aurais pu me renseigner quelque peu sur le sujet et tenter de copier ou même d’utiliser des algorithmes déjà existants, mais cela aurait été contraire à ma démarche traditionnelle, qui est de tout programmer moi-même.

Ainsi, j’ai dû faire grand usage de mon imagination et de mes connaissances en algo, que j’ai acquises au fil des années de manière autodidacte, et bien sûr en mathématiques.

Et alors qu’il me semble que bon nombre des pathfindings ordinaires se basent sur une grille de cases "ouvertes" ou "bloquées" représentant le terrain, j’ai opté pour une résolution vectorielle du problème, c’est-à-dire en utilisant des formes virtuelles et des équations mathématiques pour détecter les collisions, au lieu de bêtement "tester" les cases d’un grossier damier virtuel.

En l’occurrence, comme je voulais réaliser la chose en un temps raisonnable et ne pas m’embêter de manière exagérée, j’ai décidé que les formes représentant les obstacles seraient toutes des rectangles non inclinés à longueur et largeur variable, largement suffisants pour modéliser l’environnement de Ronin Blades.

Je vous propose ici de détailler comment fonctionne cet algorithme, et quelles en sont les limites.

Étape 1 :

Le principe de base est le suivant : Le plus court chemin reliant les points A et B étant la ligne droite, l’algo va d’abord s’occuper de tester si le chemin direct de A à B est dégagé. Si c’est le cas, évidemment, il ne se posera pas d’autre question et prendra cet itinéraire.

En revanche, si la résolution mathématique détecte une collision de la trajectoire avec un objet bloquant l’accès, il identifiera le côté de l’objet que la trajectoire touche en premier (le côté du haut, du bas, de droite ou de gauche), et il trouvera les deux coins adjacents à ce côté, que nous appelleront C et D.

Passer par C ou D pour contourner l'objet

Étape 2 :

L’algorithme va alors se scinder en deux voies possibles : Passer par C ou passer par D.

Étudions le cas de la voie C.

L’algo va déterminer s’il est possible de se rendre en C directement et sans encombre. Si cela est possible, il va s’y rendre directement. Si, au contraire, il rencontre un nouvel obstacle, il créer un sous-processus qui réitérera l’étape 1 et les suivantes avec ce nouvel obstacle, en tentant de le contourner lui-aussi.

Le sous-processus, qui fonctionne de la même manière que le principal, se chargera de trouver le meilleur itinéraire pour se rendre au point C. Cet itinéraire s’ajoutera simplement à l’itinéraire principal, calculé dans le processus principal, et l’algorithme pourra continuer.

 

 


Étape 3 :

A partir du point C, nous allons simplement reprendre l’algorithme depuis l’étape 1 en remplaçant A par C : C'est-à-dire, regarder s’il est possible de se rendre en B depuis le point C, et si l’on rencontre une nouvelle face de l’objet contourné, l’algo va chercher à continuer le contournement en rejoignant un autre des coins de l’objet.

 

 

 

Étape 4 :

Une fois tous les itinéraires possible arrivant à leur but calculés (car sur tous ceux tentés, bon nombre n’aboutissent à rien), le programme se charge de calculer celui qui est le plus court.

(Si aucun chemin n’arrive au but, on choisira le chemin dont le point d’arrivée est le plus proche possible du point B.)

 

 

Voici une situation plus complexe schématisée :

 

 

Des screens du jeu en mode debug quand j'ai programmé mon algo :

Itinéraires calculés


L’algorithme, assez complexe, se basant sur des appels récursifs de fonctions dans elles-mêmes, et donc sur la création de boucles d’appels fonctionnels, il est nécessaire d’empêcher ces boucles d’être infinies en implémentant diverses vérifications : Par exemple, empêcher l’algorithme de passer deux fois par le même point.



Malgré tout, l’algorithme décrit est limité et ne répond pas à toutes les situations, car je me suis ici contenté de n’en expliquer que les principes fondamentaux.

Par exemple, il est impossible (en n’essayant de rejoindre que les deux coins adjacents au côté touché), de trouver une solution pour sortir d’un cul-de-sac.



Je suis en train de compléter le code afin qu’on puisse sortir d’un cul-de-sac, mais cela n’est pas encore terminé, et même si je sais globalement comment faire, cela risque de prendre un peu de temps (surtout parce que j’ai d’autres projets en cours).



Algo avancé, en cours de programmation

 


Voilà, j’espère que ceci a éclairé vos esprits avides de connaissance et que vous avez globalement compris. J’ignore si j’ai été assez clair, mais j’espère que vous prendrez dorénavant mieux conscience de la difficulté que représentent le genre de problèmes que pose la programmation d’un jeu, et en particulier celle de l’intelligence artificielle.

 

Contournement massif


Commentaires (53)
» Aller au forum
sukiyaki il y a 2 ans
sukiyaki
Génial, ça éclairci pas mal de questions :) Merci pour les explications !
lire la suite
Aghora il y a 2 ans
Aghora
Par contre les schémas ne sont pas très clairs, il manque une légende et un commentaire.
lire la suite
le_guide_michelin il y a 2 ans
le_guide_michelin
C'était passionnant à lire, et très instructif. Tout ce travail force le respect. Mais t'es un grand malade :O Tout ce travail. Moi pour en faire le quart, je réclame un salaire. Alors se déchirer le crane pour un jeu gratuit ça me dépasse. Moi aussi j'ai eu ma période bénévole, à l'époque où j'étais actif dans la communauté mandriva, Amiga (et ouai, y'a des nostalgiques qui travaillent, et développent encore dessus) handicap international. Mais le système m'a bouffé. Le loyer, les factures, une femme, les emmerdes.... La vie quoi. A l'époque j'étais respecté, dans ces trois communautés. Maintenant elle m'interdit d'avoir plus d'un PC, et ne me laisse plus que le droit d'aller poster des conneries sur les forums :'( Ne te laisses pas embrigader comme moi.Le feu sacré brule encore en toi. Fait tout pour le préserver. TUES TA FEMME AVANT QU'ELLE NE L'ÉTEIGNE
lire la suite
Mambba il y a 2 ans
Mambba
Oui, les schémas me laissent perplexes o_O" entre les C, les P, les points qu'on sait pas quesqueca veut dire Bon je suis pas bête et j'ai quand même su remplacer B par P et C par les points qu'on voit sur les dessins, mais c'est pas pour autant que j'ai tout pigé les lignes ... @_@ Mais pas mal les explications ;) Tout ça me rapelle mes braves personnages qui se payaient les murs dans Baldur's gate & co.
lire la suite
sepandemic il y a 2 ans
sepandemic
Je suis d'accord , le pathfinding est un véritable enfer a programmer et a créer . Personne n'a idée de cette enfer avant de l'experimenter sois-meme. Perso j'ai eu ce problème en essayant de développer un petit FPS sous directx . Cependant il existe 2 possibilités ou "feintes" pour éviter de subir ce calvaire : A ) la plus facile et rapide est de créer des "hiddent waypoints" ou bien points relais dans la map que L'IA va suivre , c'est le principe le plus repandu dans les jeux "dans half life 2 épisode 1 , en mode commentaire, dans l'hôpital les développeurs exposent ce problème et vous montrent en live dans le niveau les waypoints installés " . B ) téléporter l'IA pres du joueur dans un angle invisible "detour d'un couloir par exemple" ou le monstre par exemple apparait ou disparait brutalement a coté du joueur, cette technique est utilisé dans les survival horror et les jeux d'actions "GTA" . Pour le reste , il-y-a l'enfer ; l'algorithme !!!! Mais la il faut être chevronné en programmation pour le créer. "exemple du jeux F.E.A.R qui utilise un des algorithme de pathfinding les plus élaborés jamais vu". Quand a ton jeux je te conseil d'utiliser la technique "hiddent waypoints" pour gagner du temps. Ton article m'a rappelé bien des souvenirs ! Merci !
lire la suite
Rodwin il y a 2 ans
Rodwin
Pour l'expérimenter actuellement, je te confirme que la solution de la grille (avec les points de passages possibles et impossibles) est effectivement basique. Mais elle a le mérite d'être rapide : ton calcul du chemin le plus court n'est alors qu'un parcours des cases "possibles" entre deux points. S'il faut plus de boucles pour trouver le résultat, ceux-ci sont rapides à atteindre (utilisation d'index sur la grille), et à analyser. De plus, tu peux facilement gérer plusieurs niveaux de possible selon les mêmes cases : les cases visibles (cas de la visibilité limitée à une certaine distance), monter ou descendre d'un niveau (gestion basique de la 3D). Les possibilités sont nombreuses même si les ficelles du calcul sont tellement grosses qu'on dirait des cordes.
lire la suite
Jeremy il y a 2 ans
Jeremy
Je conseille tout de même tout ce qui est théorie des graphes : il y a déjà des gros bourrins qui ont bien galéré sur des algos pas trop dégueulasses. Bon après, il faut arriver à générer le bon graphe.
lire la suite
Mémoriser | oublié ? | Pas de login ? Inscrivez vous
en ce moment...
Barre de vie
news externe
10/02/12 12:19 - Listomania. | Halo 3. | Parappa The Rapper. | Playstation. | Sega. | Zelda Majora's Mask.
Listomania - Culture pub
news externe
08/02/12 15:07 - Flashback. | Bionic Commando. | Capcom. | GRIN. | PC. | Playstation 3. | Xbox 360.
Flashback - Bionic Commando (2009)
news externe
07/02/12 12:45 - Bon App'. | iOs. | Ipad. | Iphone. | ipod touch.
Bon App’ - Unstoppable Gorg, Elf Defense, Niko, Paper Monsters, Reckless Racing 2, Dungeon Crawlers
news externe
06/02/12 09:29 - Off-bit. | Deus Ex. | Ion Storm. | PC. | Playstation 2.
Off-bit #50 - Deus Ex – Main Title
news externe
02/02/12 11:44 - Opinions. | Android. | iOs. | Ipad. | Iphone. | ipod touch.
Opinion - Pourquoi Android a moins de jeux qu’iOS (et pourquoi ça ne changera pas de sitôt)
Bas Gros Poing
news externe
09/02/12 16:16 - Actualités. | Baston. | BlazBlue: Continuum Shift Extend.
BlazBlue: Continuum Shift Extend sortira bien le 22 février en Europe
news externe
09/02/12 13:37 - Tutoriaux. | Vidéos. | Soul Calibur V.
“Pyrrha Must Die” par Saitoh
news externe
09/02/12 13:00 - Actualités. | Baston. | Tekken Tag Tournament 2.
Tekken Tag Tournament 2 – Une nouvelle version arcade annoncée
news externe
09/02/12 11:57 - Tournois. | Vidéos. | Melty Blood. | Melty Blood Actress Again. | Melty Blood: Actress Again Current Code.
Best moments in Melty Blood
news externe
09/02/12 11:24 - Combos. | Vidéos. | Mortal Kombat 9.
Ermac – 37% Wall Combo Reset No Meter
En kiosque