Custom Libraries/de
From OpenSimulator
![]() |
Languages: |
|
Contents[hide] |
Bibliotheksübersicht
Die Bibliothek in OpenSimulator wird in der Datei bin/inventory/Libraries.xml beschrieben. Diese Datei definiert eine Reihe weiterer Bibliotheken, von denen jede eine Datei für Ordner und eine Datei für Inhalte besitzt. Die in Libraries.xml beschriebenen Dateien werden bei jedem Serverstart eingelesen. (Beachte jedoch, dass der Viewer Bibliotheksinformationen zwischenspeichert. Du musst also möglicherweise den Cache im Viewer löschen, um Änderungen zu sehen.)
Wenn du Assets zur Bibliothek deines OpenSimulator-Servers hinzufügen möchtest, gibt es zwei grundlegende Schritte: Zuerst müssen die Assets erstellt, dann die entsprechenden Inventar-XML-Dateien erzeugt werden. Die Assets enthalten Informationen über die Objekte selbst – die Geometrie von Prims, das Bild von Texturen, den Text von Notecards usw. Die Inventarobjekte sind Einträge in Ordnern, die es Benutzern ermöglichen, auf die Assets zuzugreifen.
Wenn du sofort importierbare Bibliotheken möchtest, sieh dir den Abschnitt Free Assets an...
Assets erzeugen
Der Server kann auch Asset-Sätze im Bulk importieren. Diese Asset-Sätze sind in der Datei bin/assets/AssetSets.xml beschrieben. Jeder Asset-Satz hat eine eigene XML-Datei, die die Assets beschreibt, zusammen mit einer weiteren Datei, die die eigentlichen Asset-Daten enthält (Bild- oder Textdaten). Du kannst neue Asset-Sätze definieren und deren XML-Dateien zu AssetSets.xml hinzufügen. Wenn Robust (im Grid-Modus) oder OpenSimulator (im Standalone-Modus) startet, prüft es die AssetSets.xml und importiert alle Assets, die noch nicht im Asset-Store vorhanden sind.
Assets mit dem Viewer erzeugen
Die einfachste Methode zur Asset-Erstellung besteht darin, sie direkt in-world zu erzeugen oder über den Viewer hochzuladen. In diesem Fall ist kein Asset-Set notwendig.
Im Bulk-Verfahren
Wenn du Assets im Bulk erzeugen möchtest, musst du dein eigenes Asset-Set definieren. Schau dir bestehende Einträge in AssetSets.xml an, um ein Gefühl für das Format zu bekommen.
Praktisch betrachtet kannst du derzeit nur LSL-Skripte, Notecards und Texturen auf diese Weise importieren. Es gibt zwei Schritte: Zuerst müssen die Assets in das richtige Format gebracht werden. Zweitens müssen die XML-Dateien für die Assets erstellt werden.
Assets in das richtige Format bringen
Notecards und LSL-Dateien sind einfache Textdateien.
Bilder müssen eine Seitenlänge haben, die eine Zweierpotenz ist, d.h. Breite und Höhe müssen eine der folgenden Größen sein: 16, 32, 64, 128, 256, 512 oder 1024. Sie müssen im JPEG2000-Format (.j2k) vorliegen. Mit den OpenJPEG-Tools kannst du Bilder in das richtige Format konvertieren. Beachte, dass Version 1.3 der OpenJPEG-Bibliothek keine Graustufenbilder oder Transparenz unterstützt. Ab Revision 824 im OpenJPEG-SVN-Archiv werden Transparenz und PNG-Dateien unterstützt. Es lohnt sich also, eine neuere Version aus dem SVN-Archiv zu kompilieren, bis eine offizielle Version diese Funktionen enthält.
Um eine Bilddatei zu konvertieren:
image_to_j2k -i inputfile -o outputbase.j2k -r 100,30,10
Ein Hinweis zur Kompression: Die Werte nach „-r“ sind Kompressionsraten. Wenn du ein Bild über den Viewer hochlädst (z.B. mit Imprudence), werden in der Regel folgende Raten verwendet: 1920,480,120,30,10. Höhere Zahlen bedeuten stärkere Kompression und daher unschärfere Bilder. Der Vorteil mehrerer Kompressionsstufen ist, dass zunächst die niedrig aufgelösten Daten übertragen werden – was ein schnelles, wenn auch verschwommenes Vorschaubild ermöglicht. Eine Rate von 1 ist verlustfrei, verbraucht jedoch viel Speicherplatz und Bandbreite. Eine niedrigste Rate von 10 ist für die meisten Zwecke ausreichend. Für Sculpt Maps oder sehr präzise Texturen kann auch eine Rate von 1 sinnvoll sein.
Es gibt zwei Skripte zur Massenkonvertierung – ein Linux-Skript und ein Windows-Skript in Perl. Diese verwenden ImageMagick und image_to_j2k zur Größenanpassung und Konvertierung in das j2k-Format (trotzdem mit der Endung .jp2, da der Viewer dies erwartet). Aber Vorsicht:
- Das Skript löscht deine Originaldateien.
- Das Skript prüft nicht auf Fehler. Wenn die Konvertierung fehlschlägt, wird das Bild trotzdem gelöscht. Das kann frustrierend sein, wenn du keine Sicherung gemacht hast.
- Das Skript nutzt die Kompressionsraten 20,10,1 – gut für Viewer-Bilder, schlecht für serverseitige Bilder, da die verlustfreie Kompression viel Speicher benötigt.
Vielleicht gibt es irgendwann ein besseres Skript...
# Python-Skript siehe Originaltext
Asset-Set-XML-Dateien erstellen
Wenn alle Assets im richtigen Format sind, musst du eine AssetSet-XML-Datei erstellen. Lege dazu ein Unterverzeichnis in bin/assets an, z. B. MyAwesomeAssetSet. In diesem Verzeichnis erstellst du die Datei MyAwesomeAssetSet.xml. Du kannst das Python-Skript updatelibrary.py verwenden, um diese Datei sowie die benötigten Inventar-XML-Dateien zu erstellen. Weitere Infos dazu gibt es unten.
Terrains
Terrain-Höhenkarte erstellen
Inventarobjekte erzeugen
Die Ordner, die in der Bibliothek erscheinen, sind in bin/inventory/Libraries.xml definiert. Jede Bibliothek besteht aus zwei XML-Dateien – eine für Ordnerstruktur, eine für die Inhalte. Was du vermutlich tun willst, ist eine neue Bibliothek zu erstellen. Erstelle dafür ein Unterverzeichnis, erzeuge die zwei XML-Dateien, und füge einen Eintrag in Libraries.xml hinzu. Fertig! (Aber sehr aufwendig – UUIDs müssen manuell generiert und eingefügt werden.)
Inventar- und Asset-Dateien erzeugen
Das Python-Skript updatelibrary.py kann Asset- und Inventar-XML-Dateien gleichzeitig erzeugen. Du verwaltest eine Verzeichnisstruktur mit deinen Assets und führst das Skript aus, um die XML-Dateien zu synchronisieren. (Es werden nur neue Assets hinzugefügt – nicht entfernt.)
Vorgehen:
- Lege ein Asset-Set-Verzeichnis an.
- Ordne deine Dateien (.txt für Notecards/Skripte, .j2k für Texturen) in Ordner ein, die später den Inventarordnern entsprechen.
- Wähle einen Namen für deine Bibliothek und eine Kurzform ohne Leerzeichen.
Beispiel: Du willst eine Bibliothek „My Awesome Library“ erstellen. Nutze das Verzeichnis MyAwesomeAssetSet, darunter z. B. Textures, Clothing, Objects. Dort hinein kommen die passenden Dateien.
Zusätzlich kannst du in jedem Verzeichnis eine Datei „addassets.lis“ anlegen. Dort können vorhandene Assets aus dem Grid gelistet werden. Das Format:
asset_uuid asset_type inventory_type Name im Inventar
Ein Viewer wie Imprudence zeigt dir die asset_uuid. Die Typen:
Objekttyp | asset_type | Objekttyp | asset_type | |
---|---|---|---|---|
Textur | 0 | Notecard | 7 | |
Sound | 1 | LSL-Text | 10 | |
Visitenkarte | 2 | LSL-Bytecode | 11 | |
Landmarke | 3 | Bodypart | 13 | |
Kleidung | 5 | Animation | 20 | |
Objekt (Prim) | 6 | Geste | 21 |
Inventory_type unterscheidet sich ggf.:
Objekttyp | inventory_type | Objekttyp | inventory_type | |
---|---|---|---|---|
Textur | 0 | Root-Kategorie | 9 | |
Sound | 1 | LSL-Skript | 10 | |
Visitenkarte | 2 | Snapshot | 15 | |
Landmarke | 3 | Attachment | 17 | |
Objekt | 6 | Wearable | 18 | |
Notecard | 7 | Animation | 19 | |
Kategorie | 8 | Geste | 20 |
(Es gibt auch „None“ mit -1. Bodyparts und Kleidung = Wearables.)
Führe das Skript aus (mit --help für Hilfe). Es durchsucht dein Verzeichnis und ergänzt die XML-Dateien. Danach musst du nur noch inventory/Libraries.xml und assets/AssetSets.xml aktualisieren. Beim nächsten Start von OpenSimulator oder Robust werden Assets und Bibliothekseinträge übernommen. Denke daran: Viewer-Cache leeren!
Vorsicht
Bibliotheksdaten werden derzeit von der Region selbst geladen, nicht vom Inventory-Service. Daher müssen die XML-Dateien auf jedem einzelnen Region-Server vorhanden sein – nicht nur auf dem Robust-Server.
In Zukunft sollte der Inventory-Service zentral die Bibliotheksdaten laden und an Regionen verteilen. Das erhöht die Last dort, ermöglicht aber bessere zentrale Verwaltung.
Fragen zu updatelibrary.py bitte an Rob Knop (rknop auf freenode, meist in opensim-dev; In-World: Prospero Frobozz).