Forums Développement Multimédia

Aller au contenu

Petits tests FPS raycasting

CODE

20 réponses à ce sujet

#1 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 19 March 2012 - 12:34 PM

Salut tout le monde.

Je m'amuse actuellement avec mon raycaster, mais je trouve qu'il rame, avant de me jeter dans les optimisations casse tête, auriez-vous la gentillesse de me faire un test rapide de FPS ?

Voir le test : http://spi4.free.fr/test

(attendre quelques secondes le temps de charger les textures
touches = flèches de direction, Shift, Q,D,S,Z,M)

A savoir, le FPS est réglé à 30.

Sur mon poste de référence (le plus petit du parc : CPU 1Ghz, Ram: 1Go) je tourne à 15 fps max.
Sur mon poste de travail (Quad AMD) je tourne à 30 fps avec une chute du FPS lorsque le sprites sont nombreux ou que j'en suis trop près.

Je n'utilise rien d'autre que du calcul CPU, pas de Stage3D ou autre.

Si vous avez quelques secondes à perdre, dites moi quelles sont les perfs chez vous.

Merci.

#2 Lyanoward

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 52 messages

Posté 20 March 2012 - 09:17 AM

Sur le micro de mon boulot (i3, 3go de ram), je plafonne a 30 fps quoi qu'il arrive. Par contre j'ai trouvé les déplacements étrangement rapide.

#3 matt-murdock

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 6852 messages

Posté 20 March 2012 - 09:56 AM

hello,

sur mon mac (2,6ghz dualcore 3gb 800mhz ddr2 sdram) c est tres fluide, 29-30 FPS tout le temp....
( parcontre pour jouer avec un clavier non-azerty c est galere...)

#4 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 20 March 2012 - 10:42 AM

29 ips stable sur un quad-core 2.66GHz - 6GoDDR3

Bravo.

#5 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 20 March 2012 - 11:44 AM

salut
29 fps sauf au niveau des paquerettes ou je tombe à 15
2.8ghz 8go ram

#6 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 20 March 2012 - 11:45 AM

Hello,

Ok, merci pour ces premiers tests, c'est dans l'ensemble rassurant, même si j'ai encore de forts ralentissements sur les petites config, avec bizarrement pas plus de montée en charge du processeur ni de la ram.

Je suis en train de retravailler mon code (je viens de mettre à jour ma version test).

Lyanoward >

Citation

Par contre j'ai trouvé les déplacements étrangement rapide.

Normal, j'ai mis la vitesse à fond pour tester dans les conditions max que je compte offrir aux joueurs.
Là on ne pourra pas aller plus vite dans le jeu.

matt-murdock >

Citation

parcontre pour jouer avec un clavier non-azerty c est galere...

Oui je vais corriger, l'idéal serait de proposer la souris pour la rotation et les flèches pour avancer/reculer/pas chassé, mais c'est ultra chiant à gérer sur Flash car on ne peut pas repositionner la souris comme on veut, si elle sort de la fenêtre par exemple.

dldler >

Citation

Bravo.

Merci, c'est surtout pour le fun du truc en fait.
Pour les extérieurs (hors ville) j'ai bien envie de tester une adaptation de ce que vous êtes en train de faire avec les Voxels (ici : http://forums.mediab...__fromsearch__1 ), je pense que ça pourrait donner un effet très sympa sans pour autant être de la 3D.


paodao >

Citation

29 fps sauf au niveau des paquerettes ou je tombe à 15

Oui c'est le problème principal, quand on a trop de sprites ou qu'on est trop près le programme rame sans demander de ressources en plus, il lutte pour tracer les pixels du ou des sprites en temps réel, il faut que je trouve un moyen d'optimiser, pour le moment j'ai trois passes, une pour les murs, une pour les sols/plafonds, et une pour les sprites. A chaque passage je dessine le résultat calculé dans un bitmapData avec setPixel.

Je ne sais pas si ce jeu verra le jour, mais pour le moment j'avance pour le fun, c'est déjà pas trop mal, j'ai mis un bon moment pour trouver comment gérer les sprites correctement, et je vais passer encore un moment à optimiser l'affichage, mais ça devrait le faire.

Merci pour vos tests, je mettrais à jour la version test au fur et à mesure de mes avancées.



Pour ceux qui veulent savoir comment c'est foutu, je suis parti de ce tuto : http://forums.mediab...e/3d/raycasting
Je mettrais à jour le tuto quand j'aurais terminé la partie sur les sprites.

#7 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 22 March 2012 - 01:42 AM

Salut,

Je viens d'ajouter la possibilité de regarder vers le haut ou le bas et de sauter, et également un plan.

Désolé ce n'est pas très pratique pour les touches mais je corrigerai après.

Z - S = avancer reculer
Q - D = pas chassé gauche droite
Flèche haut - bas = regarder haut ou le bas
Flèche gauche - droite = rotation gauche - droite
Espace = saut
Shift = courrir
M = plan

En gros c'est la config FPS classique avec les flèches qui remplacent la souris.

Je perd en perfs car je dois redessinner le plafond et le sol indépendament (avant je me servai d'un effet mirroir pour limiter les calculs).

Pour le ralentissement sur les sprites, je n'ai pas encore réussi à alléger, il semble que tracer tous les pixels des sprites visibles soit un peu trop gourmand, j'ai donc pensé à ne vérifier que les pixels réellement visibles. Mais je ne peux pas me servir de l'astuce utilisée pour les murs (vérifier quand je trace une colonne de pixels, si elle se trouve devant ou derrière un mur) car les sprites n'ont pas tous la même forme, je dois prendre en compte la transparence et ça alourdi pas mal. Bref je planche dessus...

Sinon, hors textures, le jeu fait 7 Ko :P

#8 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 22 March 2012 - 14:38 PM

29 tout le temps, marguerites ou pas :)

je sors du sujets voxel… je sens bien que je vais me mettre au macramé moi :(
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#9 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 22 March 2012 - 16:38 PM

Merci Nath,

J'ai un peu amélioré les perfs pour les sprites mais c'est pas encore tout à fait ça, je m'y recolle ce soir, j'ai aussi ajouté du mouvement sur certains sprites, ça réagit plutôt bien.

#10 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 23 March 2012 - 14:23 PM

Salut,

C'est encore moi :mrgreen: (si si j'vous jure...)

Je viens d'apprendre aux PNJ à se déplacer (ouais, rien d'exceptionnel jusque là), le test à été mis à jour.

[EDIT - après tests]

J'utilise un point tiré au hasard sur la map et un algo de pathfinding pour déplacer les pnj.
Quand un pnj a atteint le point d'arrivée il en choisi un autre et repart.

J'aimerai apprendre à mes PNJ à se déplacer avec un peu plus de style.
Je cherche des petites astuces / pistes pour rendre le comportement global plus réaliste.

Je suis preneur de tout tuto qui traiterai de l'IA (vulgarisée), sachant que je suis loin d'être un spécialiste dans le domaine :mrgreen:

Pour le moment ça rame un peu, j'ai encore rien optimisé.

[/EDIT - après tests]



Voilà, merci :smile:

#11 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 25 March 2012 - 17:51 PM

Salut,

Bon j'ai trouvé comment optimiser un peu l'affichage des sprites, normalement le FPS devrait aller (pas descendre sous les 25 ips).

J'ai pas mal avancé sur l'IA des PNJ, pour le moment il y a trois comportements :

Le mode Balade :
Sélectionne une case aléatoirement sur la carte.
Trouver le chemin pour s'y rendre à l'aide d'un pathfinding.
Se rendre à ce point sur la map puis tirer une nouvelle destination.

Le mode Suivre :
Lorsqu'il se trouve à une courte distance de la caméra (6 unités).
Le pnj se dirige en ligne droite (avec gestion des murs) vers la caméra.
Il s'arrête si il se trouve à une case de la caméra.
S'il se trouve à plus de 6 unités il passe en mode Pister.

Le mode Pister :
Lorsqu'il se trouve à une distance de la caméra comprise entre 6 et 20 unités.
Le pnj utilise un pathfinding pour trouver et suivre la piste laissée par la caméra.
Il passe en mode Suivre lorsqu'il est à moins de 6 unités de la caméra.
Il passe en mode Balade lorsqu'il est à plus de 20 unités de la caméra.

Le pathfinding :
Trouve le chemin le plus rapide entre deux points sur la carte.
Ces points peuvent être aléatoires (balade) ou prédéfinis (pister ou se rendre à ... ).

Sur le plan (touche M) vous pouvez voir à présent un point bleu, c'est un pnj suiveur, je n'en ai mis qu'un les autres sont en mode balade.
Normalement il est capable de vous retrouver où que vous soyez sur la map, même si ça lui prend un peu de temps.

Tout ceci avance pas trop mal, il me reste à voir quelques comportements de base avant d'attaquer les animations des sprites, puis l'interface.

Toujours preneur de tests de FPS, thx.

#12 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 25 March 2012 - 19:32 PM

Sur mon vieux poste chez moi :

1.25 GHz PowerPC G4, ça tourne à 2ips (350ms).
C'est une config un peu hors norme, qui ne fait plus grand chose de récent.
Mais à 2 images, ça reste presque jouable. En tout cas on se déplace de façon assez naturelle.

#13 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 25 March 2012 - 19:42 PM

Voir le messageMonsieur Spi, le 25 March 2012 - 17:51 PM, dit :

Normalement il est capable de vous retrouver où que vous soyez sur la map, même si ça lui prend un peu de temps.
Non, je crois que l'amour l'aveugle, et qu'elle se prend le mur!

29fps

Miniature(s) jointe(s)

  • Image attachée: shot.png


#14 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 25 March 2012 - 19:49 PM

Citation

Non, je crois que l'amour l'aveugle, et qu'elle se prend le mur!

Ouaip normal, elle est à moins de 6 de distance (en ligne droite) donc elle essayes d'aller tout droit vers la caméra et se prend le mur, comme tu dois être pile poil sur l'axe Y ou pas loin soit elle se déplace très lentement sur X soit pas du tout et elle reste bloquée. Je vais y réfléchir.

Citation

1.25 GHz PowerPC G4, ça tourne à 2ips (350ms).
Ha ouais quand même ...
Sur mon NetBook à 1.3 Ghz ça tourne quand même à 18 ips.
Je vais proposer plusieurs niveaux de qualité, en fait il suffit de réduire la taille de l'écran à tracer et d'agrandir le bitmap à la taille de l'écran affiché pour changer de résolution (moins de lignes/colonnes à tracer donc plus rapide). Ce sera plus moche (gros pixels) mais ça devrait permettre de tourner sur plus de configs.




EDIT : Lilive> je vais tenter un truc du genre :

si (distance > 1 et déplacementX <1 && déplacementY <1) passe en mode Pister


EDIT 2: Lilive> Ok j'ai trouvé

lancer un rayon entre le pnj et la caméra.
si touche un mur : stop (donne la longueur du rayon)

si distance camera <= longueur rayon
pas de mur, le pnj voit le joueur, il fonce dessus
sinon
il y a un mur, le pnj ne voit pas le joueur, il suis sa piste



EDIT 3 : Question subsidiaire

Quel est d'après-vous le comportement le plus logique dans un jeu vidéo entre :

Le pnj suit la piste du joueur jusqu'à son dernier lieu connu, une fois ce point atteint il trouve l'endroit où est actuellement le joueur et repart sur cette piste, ect... jusqu'à ce qu'il croise le joueur (le voie) et là il fonce dessus.
Ce qui correspond pour le pnj à suivre des indices laissés lors du passage du joueur.

Ou alors le pnj sait à chaque instant où se trouve le joueur et tente de le rejoindre par le plus court chemin.
Ce qui n'est pas réaliste, sauf dans un jeu vidéo où l'univers est par définition virtuel...

#15 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 26 March 2012 - 14:27 PM

Salut, je continues sur ma lancée, maintenant que j'ai commencé...

Ca se transforme donc en création d'un petit jeu de rôle, pour test pour le moment, puis si ça marche pour un vrai jeu remake complet (je me tâte pour un Migth and Magic depuis un bon moment, si certains connaissent et veulent aider : welcome.).

A ce titre, je vais donc vous poser les questions qui me viennent au fur et à mesure, si vous avez des réponses, des avis ou des questions n'hésitez pas.

Et aujourd'hui je me pose des questions sur la gestion des PNJ.
Voici ce que j'ai commencé à mettre en place, voyez-vous d'autres choses possibles dans l'éventualité d'un jeu de rôle ?

PNJ de base :
Balade
Si le joueur l’interpelle (action sur pnj)
  • Détection de la réputation
    • Si bon alors discutions possible
      • Engager
      • Renseignements
  • Si mauvais
    • Tentative d’amadouer (baisse réputation)
      • Si ok discutions possible
      • Sinon refus du dialogue
Peuvent être tués : la réputation baisse, tous les pnj de base de la map passent ennemis.
Quand un pnj est tué la situation reste en l’état pour cette map jusqu’au prochain respawn.


Ennemis :
Garde un point précis.
  • Si vois le joueur
    • Traque
      • Si proche du joueur
        • Attaque
      • Si trop loin du joueur
        • Retourne au point de départ
  • Sinon si joueur supérieur à une certaine distance retourne au point de départ
Peuvent être tués : la réputation monte.
Quand un ennemi est tué la situation reste en l’état pour cette map jusqu’au prochain respawn.


Personnages clé :
Ils se tiennent à des endroits précis et ne se déplacent jamais.
  • Si le joueur l’interpelle (action sur pnj)
    • Discutions possible
Ne peuvent pas être tués, ni passer à l’ennemi, ni modifier leur état, ni être engagés.


Gestion des personnages lors de la création des niveaux

Les pnj de base, présents sur la carte, sont tirés aléatoirement en fonction de modèles prédéfinis (métier, capacités, etc…), à chaque entrée dans la map ou à chaque chargement de partie.

Les personnages clé sont placés de manière fixe.

Les ennemis sont placés de manière fixe.

Les maps de villes sont réinitialisées tous les X temps (à déterminer).
Les maps des donjons sont réinitialisés tous les X temps (à déterminer).

Quand une map est réinitialisée tous les pnj et ennemis sont réinitialisés (y compris les morts qui reviennent à la vie), seuls les objets de quête ne sont pas remis en place lorsqu’ils ont été pris.

#16 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 02 April 2012 - 13:56 PM

Salut,

Grosse mise à jour, j'ai avancé cette dernière semaine ;-)

Interface graphique (GUI) en cours mais déjà bien avancée, j'ai développé les fonctionnalités sur des modules à part je n'ai plus qu'à les intégrer dès que j'ai fini le graphisme de l'interface.

IA ennemis avancée, il y a 4 ennemis de rajoutés, ils gardent un endroit précis.
Si un ennemi vois le joueur il se met à le poursuivre.
Si il perds le joueur de vue il continue a avancer jusqu'a la dernière position connue du joueur.
Si il le vois pendant le trajet il fonce dessus.
Sinon si il arrive au dernier point connus du joueur et ne le vois pas, il retourne protéger son trésor.
Si le joueur est trop loin, il abandonne la poursuite et retourne garder son trésor.

Le tir pour le joueur est en cours de conception, là on peut tirer mais un seul et unique sort de merde qui n'a aucun effet, il faut que je réfléchisse là dessus.

Concernant le temps qui passe, il est réglé pour que 1 seconde IRL = 6 secondes In Game.

Voilà, il y a encore plein de choses à voir, je n'en suis qu'au tout début, mais ca avance pas trop mal.
Je suis parti d'une base, Might and Magic 6, que j'ai remonté à ma sauce, mais même si je refait moi même les textures des murs, pour le moment les sprites des PNJ et ennemis sont issus directement de Might and Magic, y compris les avatars des persos dans l'interface.

Du coup si un graphiste passe par là et qu'il veut me donner un coup de main, il est le bienvenu.

Niveau code, j'ai un peu amélioré l'affichage, ca devrait moins ramer au niveau des sprites, mais j'ai encore de nombreuses interrogations :

- gestion du fogging (complexe car il ne faut pas alourdir le code au niveau du tracé des couleurs des pixels).
(Merci à Lilive pour le coup de main sur le l'assombrissement des textures en rapport avec la distance, j'avais du mal avec les opérateurs binaires et les modifs de couleurs .... Merci donc ;-))

- gestion de la hauteur (permettre plusieurs hauteurs différentes et pas un niveau de plein pied).
- survol de la souris sur les éléments du jeu (afficher les infos contextuelles, lancer une action en cliquant, ....)
- optimisation générale

Là je travaille sur la gestion de la qualité vidéo (que vous pouvez trouver dans le menu "options"), ça marche, en réduisant la taille de l'écran à tracer et en augmentant d'autant la taille de l'écran affiché, mais j'ai encore quelques soucis avec le tracé des sols/plafonds.

Je compte également travailler un peu sur les Voxels (Didier si tu me lis....) pour la gestion des extérieurs.
Enfin il me reste aussi à travailler l'animation des sprites, je sais comment faire (timer sur un mini tableau regroupant les sprites de l'objet à animer) mais je n'ai pas encore eu le temps de m'y coller.

Enfin, désolé je n'ai pas fait de loading, donc ca met un certain temps à charger (1.8 Mo à cause d'une grosse anim dans le panneau "Repos"), et tout n'est pas encore fonctionnel, c'est surtout pour poser mes éléments.

Merci de vos retours le cas échéant.

Je vous redonne l'adresse de test : http://spi4.free.fr/test


EDIT 1 : double clic sur la tête (avatar) d'un perso pour accéder à ses panneaux privés : feuille de caracs, compétences, magie, inventaire, ...

Clic sur la minimap = afficher la map complète

Si ca rame, passez par le panneau "options" et baissez la qualité vidéo, c'est pas encore tout à fait au point mais ca marche assez pour pouvoir tester.

#17 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 02 April 2012 - 14:15 PM

Voir le messageMonsieur Spi, le 02 April 2012 - 13:56 PM, dit :

Je compte également travailler un peu sur les Voxels (Didier si tu me lis....) pour la gestion des extérieurs.

:-) Je te lis et t'attends avec plaisir…
Un message passé inaperçu peut-être vendredi soir concernant un mini blog ouvert sur la partie blog des forums et ma classe de base d'élévation du voxel… dans le sujet d'origine. Je vais faire un petit up de ce pas, parce que j'ai quelques infos nouvelles aussi.

#18 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 02 April 2012 - 14:18 PM

Cool, faudra qu'on en recause à l'occase, j'en suis pas encore là mais je pense que les voxels seraient une bonne solution pour éviter le moteur 3D en ce qui concerne la gestion des extérieurs, j'ai bien vu ton dernier message dans l'autre salle mais pas encore eu le temps d'approfondir, trop de choses en même temps pour le moment, je garde ça sous le coude, si tu avance en paralléle sur ton moteur c'est top ;-)

#19 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 07 April 2012 - 21:47 PM

Salut,

Juste pour vous signaler qu'au cours de mes recherches je suis tombé sur ça : http://www.arguingwi...emos/raycaster/

Arrivé à la version 5 on à presque tout, les murs à hauteurs différentes, les astuces pour diminuer le nombre de rayon, l'animation des sprites via spritesheets, les déplacements de la caméra, etc... à suivre.

Le code source est disponible pour chaque test, il suffit de regarder le code source de la page, c'est très instructif si certains ont envie de se faire des tests en HTML. Du coup ça me donne envie d'essayer de porter le mien pour voir, je ferai sans doute ça quand j'aurais fini ma version.

#20 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 07 April 2012 - 22:53 PM

Bonne trouvaille!

#21 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 21 May 2012 - 12:25 PM

Salut,

Pas de mise à jour du programme, mais une réorientation de l'objectif.

Je voulais à l'origine me lancer dans un remake du JDR Migth and Magic ( http://spi4.free.fr/....php?article407 ), en essayant de coller au plus près du moteur et du rendu original. Mais je m'apperçois finalement que l'entreprise est bien trop vaste et me fera perdre trop de temps si je continue avec ce moteur. J'ai donc fait le choix de travailler mon remake sur une autre techno plus adapté (Unity) histoire d'utiliser un moteur performant et déjà fonctionnel.

Mais je n'abandonne pas pour autant le boulot déjà accompli, j'ai joué ce weekend à Legend of Grimrock (que je recommande à tous les joueurs old school), c'est un dungeon crawler, héritier assumé de Dungeon Master premier du nom. Pour ceux qui ne connaissent pas voici les infos : http://www.jeuxvideo...imrock-test.htm

Faire un dongeon crawler serait idéal pour utiliser mon moteur sans avoir à le pousser plus avant sur certaines parties, on se déplace de case en case sur des étages plats tous de la même hauteur, les murs sont des blocs carrés, etc... Tel qu'il se présente, le moteur de raycasting que j'ai déjà mis en place répond à presque tous les impératifs de conception, voire plus. Reste à repenser le système de gestion de la magie/compétences et des évolutions des persos, ainsi que la gestion des combats, et à se débrouiller pour améliorer le rendu graphique.

Je vais donc me lancer dans un dungeon crawler estampillé Might and Magic mais avec un gameplay AD&D, vu qu'une bonne partie est déjà développée si certains ont envie de se joindre à l'effort ils sont les bienvenus.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)