CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Optimisation de parcours de tableau

deeplo
deeplo
Niveau 4
11 mars 2012 à 16:23:58

Avant de poser ma question, je vais planter le décor :
---------------------------
J'ai un algo qui génère une map (carte geophysique) avec pour chaque point (ou case) de la carte, une information sur sa hauteur (info codée sur un octet signé car j'indique aussi les hauteurs en dessous du niveau de la mer). Un seul octet suffit pour les besoins.

Un des criteres de la carte est d'etre extremement grande (disons au minimum un carré de plus de 10000 cases de coté : ce qui donne ici une taille en mémoire de plus de 100Mo pour l'exemple)

Donc pour éviter d'avoir à stocker tous ces Mo pour rien, je génère un nombre discret de points de référence à partir desquels je vais "interpoler" la carte (en l'occurence j'utilise un algo de ponderation par l'inverse de la distance au carré : voici un lien sur cet algo pour ceux qui désirent avoir plus d'infos : http://fr.wikipedia.org/wiki/Pond%C3%A9ration_inverse_%C3%A0_la_distance)
Pour une map de 10000 cases de coté, le nombre de points est d'environ 35000 (donc plus que 35ko en mémoire et on a TOUTE la carte : pfiouu ça va déjà mieux pour les petites neurones du PC ;-) )

Quand je souhaite n'afficher une partie de la map (et c'est ce qui est le cas lorsque l'on parcourt un monde dans un jeu, on a pas en mémoire la totalité de la carte mais juste une partie), je vais rechercher les points de référence concernés et lancer l'interpolation.
---------------------------
Mon souci est dans la recherche des points de référence : en fait je ne sais pas comment les organiser dans la mémoire et comment les parcourir pour minimiser les temps de traitements.

Ma premiere implémentation a été de parcourir tout le tableau, calculer les distances au carré par rapport à la case à interpoler puis de prendre les N plus proches pour alimenter l'algo : bien sur c'est horriblement ridicule comme solution surtout quand le nombre de points de ref est grand.

2° etape, je parcours toujours TOUT le tableau des points de référence, mais cette fois je ne calcule plus la distance que si ce point est "relativement proche" de la case à interpoler. On limite qq calculs : c pas mal mais ça ne me satisfait pas encore du fait que l'on parcourt tout le tableau.
---------------------------
Etape suivante à laquelle j'ai pensé, etait d'organiser ma liste de points de référence en Quad-Tree pour les parcourir plus vite mais je ne sais pas trop si c'est une bonne solution ou non.
---------------------------
Bref ma question est simple :
pour mon exemple ici, quelle est selon vous la meilleure méthode d'organisation en mémoire et de parcourt pour minimiser les temps de traitements ??

Merci par avance

tbop2
tbop2
Niveau 10
11 mars 2012 à 16:28:33

Je serais toi je posterais plutôt ça sur le forum programmation de jv.com. Tu auras vraisemblablement plus de réponses et de visibilité.

deeplo
deeplo
Niveau 4
11 mars 2012 à 16:28:33

petite rectification :
le tableau des points de reference fait plus qu'indiqué en mémoire car on stocke aussi les coordonnées des points x et y en plus de la hauteur de la case
Bon pour l'exemple donné, ca fait environ 250ko en mémoire (ah oui ça grimpe qd on est en 32bits :-))

deeplo
deeplo
Niveau 4
11 mars 2012 à 16:35:27

Merci Tbop, je vais le faire de suite
Comme mon problème est lié à la création de jeux video bah ....
mais je suis d'accord que mon problème est plus "générique"

LGV
LGV
Niveau 28
12 mars 2012 à 10:41:08

L'approche typique du ROAM pour des terrains est de generer un certain nombre de "patches", de granularite plus ou moins fine selon la topologie locale, et de les stocker dans un octree.

ca permet
- LODs triviaux
- geomipmorphing assez facile, pour des transitions "souples" entre LODs
- frustum culling trivial et efficace, permettant d'ignorer de larges pans du terrain avec seulement qq calculs de base

Plusieurs de ces idees sont applicables a ton cas

godrik
godrik
Niveau 30
12 mars 2012 à 21:04:08
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment