Gestion des maps 3D
Voir la définition des données.
Essai 1 : gestion par heightmap
Serveur :
- transit des maps 3d
- mise à jour des déplacements, positions des joueurs et effets spéciaux positionnés
Client :
- affichage de la map 3d
- gestion des déplacements et collisions avec le décor à partir d'une heightmap
Principe de la heightmap
La heightmap est une image correspondant à une vue du dessus de la map. Le contenu des pixels permet de définir les données présentes dans la map :
- une composante de hauteur
- une composante d'accessibilité (blocage, type de milieu)
- une composante événementielle (événements liés)
Une composante supplémentaire est disponible (et inutilisée à l'heure actuelle).
A la heightmap s'ajoute un descripteur simple :
- largeur maximale de l'espace occupé par la map
- hatueur maximale de l'espace occupé par la map
L'utilisation conjointe du descripteur et de la heightmap image permet la gestion de l'espace virtuel. Le rapport espace / image détermine la taille des cases gérées ainsi que la précision des déplacements et collisions.
Fonctionnement
Le client charge une map à partir du descripteur, puis de la heightmap, et finalement le monde 3D (fichier de modèles 3D).
Le client gère la caméra ainsi que l'affichage du monde virtuel 3D.
Le déplacement se fait au clavier par le client qui envoie régulièrement des mises à jour au serveur pour que son déplacement soit pris en compte par les autres joueurs.
Déplacement et collisions
La heightmap permet au client de savoir si une zone est accessible ou non, et détermine la position en hauteur à laquelle se trouve le personnage étant donné sa position 2D au sol.
Arguments
Pro
- possibilité immense de la gestion 3D
- réduction de la charge serveur
- simplificiation du développement réduit à un outil 3D (les personnages sont en 2D, mais leur rendu est effectué à partir de modèles 3D)
- outil de développement des maps simplifié
Contra
- gestion 3D, donc plus de travail graphique (à voir)
- les déplacements étant instantanés, qu'advient-il de la synchronisation des clients ?
- charge mémoire conséquente pour le client : opengl est fait pour la 3D, mais est-il suffisant ?
A noter que la charge mémoire est presque complètement liée au processus d'affichage du monde 3D. La gestion des collisions est réduite à un simple test de compabilité entre la position 2D de base du joueur et sa correspondance dans l'image de la heightmap (qui peut être petite ou grande selon les besoins).