Map/de

From OpenSimulator

Revision as of 02:19, 8 February 2025 by Manni (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Contents

 [hide

Einleitung

Das Konzept der „Karte“ in OpenSimulator kann sich auf zwei Dinge beziehen.

  1. Die Minikarte – Dies ist die kleine Karte, die die aktuelle und umliegende Regionen im Viewer anzeigt.
  2. Die Hauptkarte – Dies ist die Karte, die erscheint, wenn du das Hauptkartenfenster öffnest.

Die Minikarte wird ausschließlich vom Viewer generiert und enthält ein Bild des Terrains, die Positionen anderer Avatare in der Region, farbcodierte Objekte je nach Eigentum usw.

Die Hauptkarte hingegen wird ausschließlich von OpenSimulator generiert.

Im weiteren Verlauf dieses Dokuments sprechen wir über die Hauptkarte, aber möglicherweise werden in Zukunft weitere Informationen zur Minikarte ergänzt.

Die Hauptkarte

Übersicht

Linden Lab Viewer 1 und zugehörige TPVs sowie Linden Lab Viewer 2 und 3 und zugehörige TPVs nutzen unterschiedliche Methoden, um Kartendaten zu empfangen. Leider bedeutet dies, dass einige Konfigurationsoperationen (z. B. das vollständige Deaktivieren der Kartengenerierung) an zwei verschiedenen Stellen durchgeführt werden müssen.

Viewer 1

Für Viewer 1 wurden Kartentexturen generiert und im Asset-Dienst gespeichert, wobei die UUID des Assets in der Spalte `regionMapTexture` der Tabelle `regions` durch den Grid-Dienst erfasst wurde. Beim Öffnen der Hauptkarte sendete der Viewer eine `MapBlockRequest`-UDP-Nachricht, um die Kartenblöcke für einen bestimmten Bereich anzufordern. Der Simulator interpretierte diese Nachricht, rief die entsprechenden Kartentextur-UUIDs ab, indem er die Regionsinformationen vom Grid-Dienst anforderte (und ggf. auch das Parzellenbild, worauf wir hier nicht näher eingehen), und sendete sie an den Viewer zurück. Der Viewer forderte dann bei Bedarf die Texturen mit den erhaltenen UUIDs an.

Die Weltkarte ist standardmäßig für Viewer 1 und zugehörige TPVs aktiviert mit den folgenden Einstellungen in `OpenSimDefaults.ini`, die in `OpenSim.ini` überschrieben werden können:

[Map]
WorldMapModule = WorldMap
MapImageModule = MapImagemodule

Zusätzlich kann man festlegen:

[Map]
GenerateMapTiles = true|false
MaptileRefresh = <Sekunden>
DrawPrimOnMapTile = true|false
TextureOnMapTile = true|false
  • GenerateMapTiles steuert, ob Kartenkacheln überhaupt generiert werden.
  • MaptileRefresh legt fest, ob Kartenkacheln periodisch neu generiert werden.
  • DrawPrimOnMapTile bestimmt, ob Prims auf Kartenkacheln gezeichnet werden (Standard: true).
  • TextureOnMapTile legt fest, ob Terraintexturen für Kartenkacheln verwendet oder ob alles einfach grün schattiert wird.

Es gibt ein alternatives, qualitativ hochwertigeres, aber ressourcenintensiveres `MapImageModule` namens `Warp3DImageModule`, auf das wir weiter unten eingehen.

Viewer 2 und später

Viewer 2 und 3 rufen stattdessen gewöhnliche JPEG-Bilder von einer Adresse ab, die ihnen während des Logins mitgeteilt wird. In OpenSimulator wird diese Adresse mit

[LoginService]
MapTileURL = "http://<robust-oder-standalone-ip>:<public-port>/"

in der `[LoginService]`-Sektion von `Robust.ini` (bei Grid-Modus) oder `StandaloneCommon.ini` (bei Standalone-Modus) festgelegt. Die Anfragen werden vom `MapGetServiceConnector` verarbeitet, der auf dem öffentlichen Dienstport lauscht (typischerweise 8002 im Grid-Modus, 9000 im Standalone-Modus).

Beispiel:

[LoginService]
MapTileURL = "http://192.0.43.10:9000"

Die Viewer-Anfragen folgen dem Format:

/map-<zoom-stufe>-<x-koordinate>-<y-koordinate>-objects.jpg

wobei `1` die maximale Zoomstufe und `8` die minimale ist. Zum Beispiel:

GET /map-1-1000-1000-objects.jpg

Bei höheren Zoomstufen als `1` zeigt das Bild mehrere Kartenblöcke an, wobei der im Dateinamen angegebene Block in der SW-Ecke liegt (z. B. `map-2-1000-1000-objects.jpg` zeigt 4 Regionen).

Die gelieferten Dateien sind gewöhnliche JPEGs und nicht JPEG2000, wie es das Asset-Textursystem verwendet.

Wie bei Viewer 1 sind die Simulatoren für die Generierung der Kartenkacheln verantwortlich. Dies wird in der `[MapImageService]`-Sektion von `StandaloneCommon.ini` oder `GridCommon.ini` gesteuert. In `StandaloneCommon.ini` ist der konfigurierbare Parameter:

[MapImageService]
RefreshTime = 60

Dies steuert die Aktualisierungszeit für Kartenkacheln in Minuten (Standard: 60). Verwirrenderweise erfolgt diese Angabe in Minuten, während es für Viewer 1 in Sekunden ist.

Um die Kartenkachel-Generierung für Viewer 2/3 vollständig zu deaktivieren, muss man den Parameter

[Modules]
MapImageService = MapImageServiceModule 

in `Standalone.ini` überschreiben, indem man ihn einfach leer setzt:

[Modules]
MapImageService =

In `GridCommon.ini` kann `RefreshTime` ebenfalls angepasst werden. Zudem gibt es dort einen weiteren Parameter, der dem Simulator mitteilt, wohin das generierte Bild hochgeladen wird:

[MapImageService]
MapImageServerURI = <ROBUST-map-image-service>:<private-port>

Beispiel:

MapImageServerURI = http://192.168.1.4:8003

Im Gegensatz zu `MapTileURL` ist dieser Port privat (Standard: 8003), da wir nicht möchten, dass Viewer eigene Kartenkacheln hinzufügen können! Daher muss die IP nur vom Simulator erreichbar sein. Falls Simulator und Dienste im selben LAN laufen, kann dies eine lokale LAN-IP-Adresse sein.

Das `MapImageServiceModule` für Viewer 2/3 lädt eine generierte JPEG-Datei direkt zum Map-Image-Dienst hoch (entweder im Prozess für Standalone oder über `MapImageServerURI` im Grid-Modus). Der Map-Image-Dienst speichert sie dann in einem Verzeichnis, das durch

[MapImageService]
TilesStoragePath = "maptiles"

in `Robust.ini` oder `StandaloneCommon.ini` festgelegt ist. Standardmäßig ist dies `bin/maptiles`. In diesem Verzeichnis sind alle generierten und hochgeladenen JPG-Dateien zu finden.

Kartenkachel-Generierung

Obwohl Viewer 1 und Viewer 2/3 Kartenkacheln unterschiedlich nutzen und anfordern, werden die Bilder durch denselben Bildgenerierungscode erstellt.

Generatoren

Derzeit gibt es in OpenSimulator zwei Möglichkeiten zur Kartengenerierung.

MapImageModule

Dies ist das ältere Kartenbildmodul. Um es zu verwenden, setze:

[Map]
MapImageModule = MapImageModule

Warp3DImageModule

Dies ist ein neueres Modul, das qualitativ hochwertigere Kartenbilder erzeugt, aber starken Speicherverbrauch hat. Dies wird in einer zukünftigen OpenSimulator-Version (nach 0.8) behoben. Bis dahin sollte dieses Modul nur einmal pro Sitzung zum Generieren von Kartenkacheln verwendet werden (z. B. beim Start). Um es zu aktivieren, setze:

[Map]
MapImageModule = Warp3DImageModule

Siehe Warp3DImageModule für weitere Informationen.

Allgemeine Konfiguration

Zusätzlich zu spezifischen Warp3DImageModule-Parametern befinden sich die Einstellungen zur Kartenkachel-Generierung in der `[Map]`-Sektion von `OpenSim.ini`. Die Parameter sollten hier dokumentiert werden, aber bis dahin siehe `OpenSim.ini.example`.

Manuelle Neugenerierung

Normalerweise werden Kartenkacheln beim Start und/oder in regelmäßigen Abständen generiert. Seit OpenSimulator 0.8 kann man dies auch manuell mit folgendem Konsolenbefehl tun:

# generate map

Code

Dies ist eine sehr grobe Code-Übersicht, die später noch erweitert werden kann.

Class/Interface Description
OpenSim.Region.Framework.Interfaces.IWorldMapModule v1 map generation. Invoked directly from scene. Uses IMapImageGenerator. Also contain code for parcel overlays.
OpenSim.Region.Framework.Interfaces.IMapImageGenerator Interface to modules that actually generate map images. Implemented by MapImageModule, Warp3DImageModule.
OpenSim.Region.CoreModules.ServicesConnectorsOut.MapImage.MapImageServiceModule Triggers v2/v3 map image generation via IMapImageGenerator and uploads using IMapImageService
OpenSim.Services.Interfaces.IMapImageService Interface for v2/v3 map image upload. Implemented by OpenSim.Services.Connectors.MapImageServicesConnector for upload and OpenSim.Services.MapImageService to add and server map images.
OpenSim.Server.Handlers.Map.MapAddServerConnector Handles POST of map images. Should only be exposed to simulators.
OpenSim.Server.Handlers.Map.MapGetServerConnector Serves map images. Must be reachable by viewers.
Personal tools
General
About This Wiki