Map/fr
From OpenSimulator
Contents |
Introduction
Le concept de 'map' (carte) dans OpenSimulator peut se référer à une parmi deux choses.
- La minimap - C'est la petite carte que vous voyez avec la région actuelle et les les régions voisines dans le viewer.
- La main map - C'est la carte que vous voyez quand vous ouvrez la fenêtre de map principale.
La minimap est purement générée par le viewer, et elle est décorée avec une image du terrain, la position de chaque avatar sur la région, la couleur des objets selon si vous les possédez ou non, etc...
La main map est purement générée par OpenSimulator.
Pour la suite de ce document nous allons parler de la main map, bien que plus d'information peuvent être insérées dans le futur concernant la minimap.
La main map
Vue d'ensemble
Le viewer Linden Lab 1 et les autres viewers tiers dérivés ainsi que le viewer Linden Lab 2 et 3 et les autres viewers tiers dérivés ont différentes façons de recevoir les données des cartes. Hélas, ceci veut dire que certaines opérations de configuration (ex : désactiver entièrement la génération de map) doivent être faites dans deux endroits différents.
Viewer 1
Pour le viewer 1, les maptiles sont générés et stockés dans le service des assets, avec l'UUID de l'asset enregistré dans la colonne regionMapTexture de la table "regions" du service de grille. En ouvrant la carte principale, le viewer devrait envoyer un message UDP mapBlockRequest pour demander les blocks de map pour une plage de coordonnées. Le simulateur devrait interpréter ce message, récupérer les UUID des textures de map appropriés en demandant les informations de région depuis le service de grille (et l'image de parcelle si disponible, cependant nous n'allons pas entrer dans les détails içi) et les retourne au viewer. Le viewer devrait alors demander les textures identifiées par les UUID comme demandé.
La world map est activée par défaut pour le viewer 1 et les viewers tiers qui y sont associés avec les réglages suivants dans OpenSimDefaults.ini.
[Startup] WorldMapModule = WorldMap MapImageModule = MapImagemodule
Vous pouvez aussi définir
[Startup] GenerateMapTiles = true|false MaptileRefresh = <seconds> DrawPrimOnMapTile = true|false TextureOnMapTile = true|false
- GenerateMapTiles contôlera si les map tiles seront tous générés.
- MaptileRefresh contôlera si les map tiles sont re-générés périodiquement.
- DrawPrimOnMapTile contôlera si les prims sont dessinées sur les map tiles (true par défaut)
- TextureOnMapTile contôlera si les textures de terrain sont utilisées sur les maptiles ou si tout sera simplement rempli de vert.
Il existe une alternative de meilleure qualité mais nécessitant plus de ressources à MapImageModule appelée Warp3DImageModule dont nous parlerons plus bas.
Viewer 2 et supérieurs
Les viewers 2 et 3 devraient plutot récupérer des images JPEG ordinaires depuis une adresse leur étant donnée pendant le login. Dans OpenSimulator, cette adresse est définie en utilisant
[LoginService] MapTileURL = "http://<ip-robust-ou-standalone>:<port-public>/"
dans la section [LoginService] de Robust.ini (pour le mode grille) ou StandaloneCommon.ini (pour le mode standalone). Les requêtes sont supportées par MapGetServiceConnector qui écoute sur le port public de services (typicalement 8002 sur une grille et 9000 sur une standalone).
ex :
[LoginService] MapTileURL = "http://192.0.43.10:9000"
Requests from the viewer follow the format
/map-<zoom-level>-<x-coord>-<y-coord>-objects.jpg
où 1 est le niveau de zoom maximum et 8 est le minimum. Par exemple
GET /map-1-1000-1000-objects.jpg
Aux niveaux de zoom supérieurs à 1, l'image affiche plusieurs blocks d'images avec le block nommé dans le fichier correspondant à l'angle SW (Sud Ouest) (ex: map-2-1000-1000-objects.jpg est une image de 4 régions).
Les fichiers servis sont des JPEG ordinaires plutot que du JPEG2000 comme utilisé par le système de textures des assets.
Comme avec le viewer 1, les simulateurs sont responsables de la génération des maptiles. Ceci est contrôlé par la section [MapImageService] dans StandAloneCommon.ini ou GridCommon.ini. Pour StandAloneCommon.ini, le paramêtre configurable est
[MapImageService] RefreshTime = 60
Ceci contrôle le temps de rafraîchissement des maptiles en minutes avec 60 comme valeur par défaut (ne pas confondre avec les réglages du viewer 1 qui sont en secondes).
Pour désactiver la génération des maptiles pour les viewers 2/3, il faudrait forcer le paramêtre
[Modules] MapImageService = MapImageServiceModule
dans StandAlone.ini. En l'effaçant avec
[Modules] MapImageService =
dans StandaloneCommon.ini.
Dans GridCommon.ini, le temps de rafraîchissement peut aussi être ajusté mais il y a un autre paramêtre qui dit au simulateur à quel endroit il doit uploader l'image générée.
[MapImageService] MapImageServerURI = <ROBUST-map-image-service>:<private-port>
ex :
MapImageServerURI = http://192.168.1.4:8003
Contrairement à MapTileURL, cette fois ci, le port est privé (8003 par défaut) car nous ne voulons pas que les viewers puissent y ajouter leur propres map tiles! Ceci veut aussi dire que l'adresse IP a seulement besoin d'être la seule accessible par le simulateur. Si le simulateur et les services s'exécutent sur le même réseau local alors celle ci peut être une adresse de réseau local.
Le module de service des images de map pour les viewers V2/3, à la place de générer des map tiles et les uploader au service d'assets avantg de passer les UUID au service de grille, uploade à la place une image JPEG directement générée vers le service d'images de map (soit dans le process en mode standalone, soit en utilisant le MapImageServerURI en mode grille). Le service de génération de map les stocke alors dans un dossier configuré par
[MapImageService] TilesStoragePath = "maptiles"
dans Robust.ini ou StandaloneCommon.ini. La valeur par défaut comme définie içi est bin/maptiles.
Génération des Maptiles
Que ce soit avec le viewer 1 ou 2 et plus, l'utilisation et requêtes des maptiles diffèrent vraiment. Les images des maptiles sont toujours crées pour une utilisation commune de génération de code. Actuellement dans OpenSimulator, il y a deux choix de génération d'images de carte.
MapImageModule
Ceci est l'ancien module de map. Définir
[Startup] MapImageModule = MapImageModule
pour l'utiliser.
Warp3DImageModule
Ceci est un nouveau module de map qui produit des images de carte de meilleure qualité mais qui est lié à des faiblesses de mémoires dans le passé (bien que des efforts ont été et sont encore effectués pour corriger cela). Pour ce module, définir
[Startup] MapImageModule = Warp3DImageModule
Voir Warp3DImageModule pour plus d'informations.
Code
Ceci est un survol du code vraiment brut qui peut être élaboré plus tard
Class/Interface | Description |
---|---|
OpenSim.Region.Framework.Interfaces.IWorldMapModule | v1 map generation. Invoqué directement depuis la scene. Utilise IMapImageGenerator. Contient aussi du code pour la superposition des parcelles. |
OpenSim.Region.Framework.Interfaces.IMapImageGenerator | Interface pour les modules qui génerent actuellement les images de map. Implementée par MapImageModule, Warp3DImageModule. |
OpenSim.Region.CoreModules.ServicesConnectorsOut.MapImage.MapImageServiceModule | Déclenche la génération des images de map pour les viewers v2/v3 par IMapImageGenerator et uploade en utilisant IMapImageService |
OpenSim.Services.Interfaces.IMapImageService | Interface pour l'upload des images de map v2/v3. Implementée par OpenSim.Services.Connectors.MapImageServicesConnector pour l'upload et OpenSim.Services.MapImageService pour ajouter et servir les images de map. |
OpenSim.Server.Handlers.Map.MapAddServerConnector | Gère le POST des images de map. Devrait être seulement exposé aux simulateurs. |
OpenSim.Server.Handlers.Map.MapGetServerConnector | Sers les images de map. Doit être joignable par les viewers. |