Setting up the OpenSimulator

Il y a quelques jours je me suis tourné vers un ancien projet g33k que j’avais mis de côté faute de temps: modéliser un monde virtuel sous OpenSimulator.

OpenSimulator est un dérivé des serveurs SecondLife en version open-source donc libre et gratuit, disponible sur toutes les plateformes usuelles. Un tel outil permet de réaliser des mondes virtuels multi-utilisateur en trois dimensions

Comparé aux jeux actuels un tel outil est quelque peu limité dans ses possibilités mais reste tout de même intéressant pour une mise en oeuvre simple et rapide ainsi que pour sa capacité d’inter-connexion et d’ouverture.

J’ai été très surpris du peu d’améliorations apportées au moteur interne d’OpenSim depuis ces dernières années. Les mises à jour sont souvent mineures et apportent peu de nouveauté.
Toutefois certaines nouvelles fonctionnalités quasi anodines peuvent se révéler fort intéressantes, comme par exemple les var-regions.

Les spécificités d’OpenSim sont les suivantes:

  • support d’environnements -en-ligne- 3D multi-utilisateur d’un ou plusieurs simulateurs.
  • support d’espace 3D virtuel de diverses tailles au sein d’une même instance.
  • support de multiples clients et protocoles.
  • support de simulation de Physics temp-réel, avec diverses options.
  • support de clients permettant la création de contenu 3D en temps-réel.
  • support de scripts -inworld- via LSL/OSSL et C#.
  • procure une capacité illimitée de personnalisation de mondes virtuels via l’utilisation de plugins et modules.

Les mondes ouverts

Il existe sur la toile une multitude de mondes déjà réalisés sous OpenSim:

Pour se connecter à ces mondes, rien de plus simple: il suffit de se rendre sur la page officielle, créer un compte utilisateur ainsi qu’un avatar, puis diriger son viewer sur la bonne adresse et se connecter pour profiter du monde virtuel.

Un apercu de divers mondes sous OpenSim

Mise en place Open Simulator pour du testing

L’installation et la mise en route d’un serveur OpenSim est très simple.

Le package OpenSim est disponible en diverses versions sur le site d’origine, l’application est écrite en C# / Mono et peut donc potentiellement tourner dans tout environnement:

Accéder à la page des téléchargements sur opensimulator.org

Afin de pouvoir tester le bon fonctionnement du serveur OpenSim il faudra également un client (que l’on nomme Viewer dans le jargon). Il existe divers viewers tous forkés depuis le client officiel SecondLife d’origine. Chacun apporte à présent son petit lot d’innovations mais tous se ressemblent:

Une fois téléchargés, il suffit d’installer le viewer et décompresser le package OpenSim.

Démarrer OpenSim:

$ cd opensim/bin
$ mono OpenSim.exe

Le serveur va démarrer et initialiser une région de base en demandant quelques renseignements que l’on peut renseigner à sa convenance:

New region name []: kosmology
RegionUUID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx]: (par défaut)
Region Location [1000,1000]: (par défaut)
Internal IP address [0.0.0.0]: (par défaut)
Internal port [9000]: (par défaut)
Allow alternate ports [False]: (par défaut)
External host name [SYSTEMIP]: (par défaut)
...
New estate name [My Estate]: kosmo-planet
...
Estate owner first name [Test]: test
Estate owner last name [User]: user
Password: test
Email: test@user.com
User ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx]: (par défaut)
...

Une fois le serveur démarré il suffit de lancer le viewer et se connecter au serveur avec les identifiants créés lors de l’initialisation d’OpenSim (dans notre cas, login: “test user”, password: “test”, grid: “localhost”).
De base, aucun terrain n’est fournit. OpenSim va donc générer une parcelle par défaut contenant une miniscule île qui permettra à l’utilisateur de faire ses premiers pas.

Parcelle par défaut d’OpenSim

walacria-512

Vers une modélisation d’un monde en var-region

Pour rappel, une parcelle (de terrain) usuelle ne peut excéder une taille de 256 x 256. Cela est une limitation empirique du moteur de SecondLife. Pour passer outre cette limitation il est nécessaire de mettre plusieurs parcelles bout à bout pour constituer une mega-région. Cela engendre un long travail de gestion de parcelles, de chargement de relief pour chaque parcelle et enfin d’alignement de parcelles et d’ajustements.
Les var-regions sont en quelques sortes des méga-régions simplifiées. Nul besoin de se lancer dans une longue configuration ou mise en oeuvre: il suffit simplement d’ajuster un fichier de configuration et préciser que l’on souhaite allouer une région avec une parcelle de terrain plus grande.

Exemple de Regions.ini définissant un Var-Region de 2048×2048

[kosmology]
RegionUUID = f7e749dd-01fa-4a46-abe3-69d6f80fd2fe
Location = 1000,1000
SizeX = 2048
SizeY = 2048
SizeZ = 512
InternalAddress = 0.0.0.0
InternalPort = 9000
AllowAlternatePorts = False
ExternalHostName = SYSTEMIP
MaptileStaticUUID = 00000000-0000-0000-0000-000000000000

Un simple redémarrage du serveur suffira à activer le mode et initialiser la grande région. A partir de cet instant toutes les tâches de mise en oeuvre du terrain du monde virtuel se trouvent excessivement simplifiées. Il est par exemple possible de charger directement une cartographie (appelé aussi heightmap ou champ de hauteur en français) d’une taille considérable à l’aide d’une seule commande. Dans cet exemple, nous utiliserons la carte suivante:

heightmap
Get this map (PNG, 2048x2048px)

Exemple de chargement d’une map de 2048px x 2048px

Region (kosmology): terrain load heightmap.png

Le tour est joué ! Nous pouvons à présent naviguer sur un terrain suffisamment grand et espacé.

La fonction terrain load va tenter de charger les images à partir du répertoire courant d’OpenSim (opensim/bin). Les textures peuvent être placées directement dans ce répertoire ou tout autre répertoire auquel cas il faudra indiquer le chemin relatif lors du chargement.

Exemple d’une image placée dans le sous-repertoire “opensim/bin/terrain”

Region (kosmology): terrain load terrain/heightmap.png

firstconnection

Le terraforming peut commencer !

kosmo