Le moteur de Serious Sam passe à l’open source
Quake 3 > All
Le 14 mars 2016 à 10h10
2 min
Logiciel
Logiciel
Croteam vient de publier les sources de son Serious Engine, le moteur de jeu développé pour le premier volet de la saga Serious Sam. De quoi permettre à bon nombre de développeurs de disposer à peu de frais d'un moteur robuste pour leurs expérimentations.
Il n'est pas rare que les studios de développement libèrent une partie de leurs technologies afin d'en faire profiter le plus grand nombre. On se souviendra ainsi qu'en 2005 John Carmack « himself » avait annoncé lors de la QuakeCon la publication des sources de l'id Tech 3, le moteur de Quake III Arena, sous licence GNU GPL v2.
Depuis plusieurs moteurs ont ainsi été « libérés ». L'id Tech 4 de Doom 3 a vu ses sources publiées sous licence GPL v2 en novembre 2011, OGRE, le moteur utilisé pour Torchlight II est lui aussi publié sous licence MIT, tout comme Torque depuis septembre 2012, connu pour son utilisation dans Tribes 2.
Croteam, le studio croate à l'origine de Serious Sam vient d'ajouter un nouveau membre à la liste des moteurs dont les sources ont été ouvertes : le Serious Engine. Ne nous emballons pas, il n'est ici question que de la version 1.10 du moteur, celle utilisée pour le tout premier volet de Serious Sam sorti en 2001. Ne vous attendez donc pas à pouvoir profiter de toutes les possibilités de la version 4, employée pour The Talos Principle.
Les sources du Serious Engine 1.10 sont disponibles sur GitHub et sont publiées sous licence GPL v2, à l'exception de deux éléments : zlib et le SDK de LightWave qui requièrent une attention particulière avant d'être réutilisés. CroTeam précise avoir retouché son moteur afin d'en assurer le fonctionnement sous Windows 7, 8 et 8.1 dans leurs variantes x64.
Commentaires (40)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 14/03/2016 à 10h46
Bien sûr. " />
Mais j’ai pas essayé. J’utilise pas ce genre d’OS exotique.
Le 14/03/2016 à 10h52
Des IA comme on n’en fait plus malheureusement…" />
Le 14/03/2016 à 10h55
il manque toujours un élément crucial pour faire un visage réaliste, la sueur, dans beaucoup de nouveau jeux, les perso on dirait qu’ils vienne tout juste de sortir de la douche " />
je veux dire par là, que ça matifie la peau.
Le 14/03/2016 à 11h35
“Depuis plusieurs moteurs ont ainsi été « libérés ». L’id Tech 4 de Doom 3 a vu ses sources publiées sous licence GPL v2 en novembre 2011, OGRE, le moteur utilisé pour Torchlight II est lui aussi publié sous licence MIT, tout comme Torque depuis septembre 2012, connu pour son utilisation dans Tribes 2.”
Petite rectification, OGRE 3D est un moteur de rendu graphique Open Source qui depuis sa création n’a jamais eu vocation de faire spécifiquement des jeux.
L’équipe fournit un moteur graphique et cela s’arrête là, après il existe des plugins pour y coupler du son, un moteur physique, …
Mais ce n’est pas l’équipe de Torchlight qui a pondu le moteur, ils l’utilisent simplement :-)
Le 14/03/2016 à 11h37
Haaa Serious Sam ;-).. du coup j’ai ressorti Total Annihilation des cartons pour m’en taper une petite partie en skirmish contre 3 IA… toute une époque ;-)
Le 14/03/2016 à 11h45
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Rien d’autre à dire
Le 14/03/2016 à 12h05
Le 14/03/2016 à 12h07
et s’il y a un ravin entre l’IA et moi, avec un pont 10 m plus loin, il fait quoi?
Le 14/03/2016 à 12h11
Du A comme dans “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!” ?
Le 14/03/2016 à 12h14
Le 14/03/2016 à 12h20
Et OGRE est open source depuis sa création, en 2001.
Le 14/03/2016 à 12h22
sauf que SS n’est pas un jeu 2d quadrillé. De plus, j’ai essayé ça et le résultat était plus proche d’une poursuite dans benny hill au ralenti (surtout quand il tourne sur lui-même) qu’un vrai chemin optimisé. Et il tombait quand même par moments. Donc l’IA n’est pas si simple que vous le dites.
Le 14/03/2016 à 12h25
Ah, il me semblait que le code de l’IA de Serious Sam est désormais le modèle du genre. " />
AAAAAAAAAH yourself ! " />
Le 14/03/2016 à 12h37
Le 14/03/2016 à 12h38
Pour la 2D, c’est un faux problème, a la fois parce que pour la plupart des mob, il ne se déplace que sur le sol donc si l’on ne considère qu’il n’y a qu’un seul plan par axe de hauteur, ça s’applique sans réfléchir plus que ça, et même si il y a plusieurs plan, en faite, ça ne change pas tant que ça (tu adapte ça à un mesh plus qu’à un quadrillage simple). Et dans enfin, même si c’est en 3D, l’algo fonctionne quand même, il est générique et n’est pas dépendant de ce genre de problème, il fonctionne même en 4 dimension.
As-tu vraiment jouer à Serious Sam, l’IA est un copié collé de celle de Doom, elle est même moi développée, dans Doom elle devait choisir une cible qui pouvait être autre chose que le joueur. C’est pas pour rien que la déplacement de base c’est le strap sur le coté en tournant.
Le 14/03/2016 à 12h47
Le 14/03/2016 à 12h48
S’il n’y avait vraiment qu’un seul plan par axe de hauteur, ce serait effectivement copier-coller de doom et ce serait vraiment simple. Mais j’ai souvenir qu’il y a des plateformes dans SS. Je pense notamment au niveau avec les maisons dans les arbres et des ponts partout. Mais peut-être ont-ils rusé sur cela.
Le 14/03/2016 à 12h49
Le 14/03/2016 à 13h00
Le 14/03/2016 à 13h02
Comme je t’ai dit, tu peut quand même considérer non plus un plan 2D euclidien, mais plutôt une surface aux formes complexes avec des “branche” qui peuvent se superposer, l’algo fonctionne très bien dessus et au pire tu calcules une distance euclidienne dans le modèle 3D pour la base heuristique.
edit : en faite, ça fonctionne sur un graph quelconque, une grille 2D est juste un graph bien particulier.
Le 14/03/2016 à 13h15
Si j’ai bien compris, tu parles du système utilisé dans HL1, avec son graphe de nœuds/waypoints. C’est peut-être ce qu’ils utilisent dans un terrain plein de couloirs et ponts. Mais pour les espaces ouverts, ça ne marche pas. Peut-être SS utilise un type de recherche de chemin spécifique par niveau.
Le 14/03/2016 à 13h16
et c’est un peu son plus gros problème. Il est trop méconnu pour vraiment décoller.
Le 14/03/2016 à 13h43
Je ne sais pas trop. Je ne suis pas sûr.
Mais voilà comme je vois les choses (dans la façon simple, mais ça peut être rafiné). Tout d’abord tu places les noeud de ton graph, ceux-ci sont tous les bords d’objet infranchissable(coins des murs…) le mob et le joueur. Maintenant, de ces noeud, tu place un arc entre chaque nœud qui est possible de passer directement (sans croiser donc un mur infranchissable).
Maintenant, tu applique la première partie de l’algo de l’A* avec une distance euclidienne en 3D en partant du joueur sur tout les nœuds. Il ne te reste plus qu’à appliquer le reste en considérant le graph que tu as construit (Dijkstra s’applique aussi, mais il est un peu lourd).
Tu peux gagner du temps en précalculant les noeuds, les arcs et leur poids associés au terrain. A voir si c’est intéressant, mais tu peux aussi limiter la taille des arc et mettre des nœud intermédiaires (ça peut peut-être simplifier le calcule dans le cas d’un A* je pense), tu peux encore plus affiner ce dernier point en considérant que les arcs associé au joueur ne sont, eux, pas compressibles (quelque soit la distance, l’arc d’un noeud vers le joueur existe dès qu’il est possible). Ensuite, et ça je pense que c’est fait dans plein de jeu, tu limites la recherche de chemin, si au bout d’un certain temps il ne trouve rien, tu arrêtes la recherche et tu fais déplacer ton mob par le chemin qui a donner le meilleur résultat, ça permet de ne pas se bloquer quand le chemin est trop complexe ou inexistant (on vois par exemple dans SS les mob qui se colle sur le mur en contrebas lorsqu’ils n’arrives pas a t’atteindre).
Sinon, toujours dans les nœuds et les arc, tu peux aussi avoir différent niveau de granularité, avec par exemple un niveau “global” qui ne considère que les “portes” (l’entrée d’un pont par exemple) des pièces comme des noeuds et des chemin prédéfini d’une porte à une autre dans la même pièce.
Bon, le pathfinding dans les jeu vidéo, c’est une problématique récurrente. Ce que je te donne là, c’est ce que je ferais personnellement sans documentation.
Le 14/03/2016 à 14h15
Ce que tu décris ressemble bien à ce que fait le Source Engine dans HL1. Mais sa grosse faille est qu’il est inadapté pour les grands espaces ouverts, ce qui constitue les 90% de SS. Pour une simple plaine vide, il faudrait mettre un quadrillage de noeuds sur des km^2, et outre le fait que c’est laborieux à générer, ce n’est pas vraiment performant. J’ai lu qu’il y a une version améliorée de l’algorithme qui est adapté à des volumes au lieu de simples noeuds. Et c’est ce qu’utilise godot, bien que le résultat soit pas toujours terrible.
Personnellement, et vu que j’avais déjà implémenté l’IA de doom pour les monstres volants, je me tatais dans l’idée de simplement mettre un senseur de trou à proximité de l’IA. Et quand le senseur ne détecte pas de collision, il part en sens inverse. En ajoutant à cela le pathfinding intégré de godot qui donne la direction générale, ça pourrait le faire. Mais pour être efficace, il doit avoir au moins 5 senseurs pour couvrir les divers angles possibles pour tomber dans un trou. Et personnellement, j’ai un bad feeling de mettre des tas de senseurs juste pour un monstre. S’il y a 100 monstres dans le terrain, ça fait au moins 500 senseurs qui bossent à chaque frame, souvent pour rien. Doom n’avait pas ce problème vu qu’une simple fonction (x,y) donnait la hauteur.
Le 14/03/2016 à 14h48
Mais un ravin, ça doit être considéré par l’IA comme un mur infranchissable ? Godot doit bien avoir l’équivalent d’un mur pour l’IA qui n’est pas un mur pour le moteur physique, non ?
Sinon, pour le cas des grandes plaines, j’essayerais un peu l’équivalent de la tesselation autour du joueur pour les noeud (affine le chemin sur des distance proche, donner des chemin tenant compte d’un modèle très grossier du terrain sur des distance lointaine quite à passer à 4m du ravin on s’en fout).
Le développement de jeu, je ne connais pas du tout. Une IA doit-elle absolument être aussi régulièrement mise à jour ? Ne peut-elle pas juste décider dans combien de temps il faut qu’elle mettent à jour son comportement en fonction de différent critère comme la distance du joueur, son état d’alerte… ?
Le 14/03/2016 à 15h25
Le 14/03/2016 à 16h05
Le 15/03/2016 à 04h22
GitHubJ’utilise ça pour mes projets, c’est top " />
Le 14/03/2016 à 10h16
Hvala
Le 14/03/2016 à 10h18
“Hé maman, t’a vu? Je suis un vrai ptit bucheron”
Il auraient au moins pu liberer celui de SS2, voire 3
Le 14/03/2016 à 10h22
+1 Comment se faire de la pub à 0 frais en sortant un moteur d’il y a 15ans opensource.
Le 14/03/2016 à 10h31
c’est bien sympa d’ouvrir les sources, mais il nous faut aussi la doc. Par exemple, j’ai regardé un peu et j’arrive pas à savoir où se trouvent les fichiers concernant l’IA.
Le 14/03/2016 à 10h33
Le 14/03/2016 à 10h34
BSD rullz the world
Le 14/03/2016 à 10h35
Le 14/03/2016 à 10h35
Le cas échéant, on se démerdera avec une machine virtuelle.
Le 14/03/2016 à 10h40
Justement, peut être que gokudomatic veut juste remplacer ce bout de code par une vrai AI !!
Le 14/03/2016 à 10h41
Le 14/03/2016 à 10h41
tu ne te rappelles pas des taureaux qui tournent au lieu de te foncer dessus?
De plus, je peux témoigner, vu que je suis en plein développement d’un doom-like, que des trucs qui semblent évidents ne le sont pas tant que ça. J’ai un mal fou à faire détecter les trous et à les éviter. Parce que bon, foncer sur le joueur, ça va juste faire tomber le monstre dans le premier trou venu. Et le but n’est pas non plus de mettre des murs invisibles partout.
Le 14/03/2016 à 10h44
Est-ce qu’il tourne sous Free BSD ton Doom-Like ? " />