Custom Libraries/de

From OpenSimulator

Revision as of 03:53, 17 June 2024 by Manni (Talk | contribs)

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


Contents

Bibliotheksübersicht

Die Bibliothek in OpenSimulator wird in der Datei bin/inventory/Libraries.xml beschrieben. Diese Datei definiert eine Anzahl anderer Bibliotheken, von denen jede eine Datei für Ordner und eine Datei für Objekte hat. Die in Libraries.xml beschriebenen Dateien werden jedes Mal gelesen, wenn der Server startet. (Beachten Sie jedoch, dass der Viewer Bibliotheksinformationen zwischenspeichert, sodass Sie möglicherweise den Cache des Viewers löschen müssen, um Änderungen zu sehen.)

Wenn Sie Assets zur Bibliothek auf Ihrem OpenSimulator-Server hinzufügen möchten, gibt es zwei grundlegende Schritte. Der erste besteht darin, die Assets zu erstellen, der zweite darin, diese Inventar-XML-Dateien zu generieren. Die Assets enthalten Informationen über die Objekte selbst; die Geometrie der Prims, das Bild der Texturen, den Text von Notecards usw. Die Inventarobjekte sind Einträge in den Ordnern, die es Benutzern ermöglichen, auf die Assets tatsächlich zuzugreifen.

Wenn Sie vorgefertigte Bibliotheken importieren möchten, können Sie den Abschnitt Free Assets überprüfen...

Assets Generieren

Der Server kann auch Asset-Sets in großen Mengen importieren. Diese Asset-Sets werden in der Datei bin/assets/AssetSets.xml beschrieben. Jedes Asset-Set hat eine eigene XML-Datei, die die Assets beschreibt, zusammen mit einer anderen Datei, die die eigentlichen Asset-Daten (Bild- oder Textdaten) enthält. Sie können neue Asset-Sets definieren und die XML-Datei, die sie beschreibt, zu AssetSets.xml hinzufügen. Wenn Robust (im Grid-Modus) oder OpenSimulator (im Standalone-Modus) startet, schaut er sich die Datei AssetSets.xml an. Er findet heraus, welche der Assets in den Asset-Sets nicht in seinem Asset-Speicher vorhanden sind, und fügt sie hinzu.

Assets mit dem Viewer Generieren

Der einfachste Weg, Assets zu generieren, besteht darin, sie einfach in-world zu erstellen oder sie mit dem Viewer hochzuladen. Wenn Sie dies tun, müssen Sie sich nicht mit Asset-Sets herumschlagen.

In großen Mengen

Wenn Sie jedoch Assets in großen Mengen erstellen möchten, müssen Sie Ihr eigenes Asset-Set definieren. Schauen Sie sich einige der in AssetSets.xml definierten Asset-Sets an, um ein Gefühl dafür zu bekommen, wie eine Asset-Set-XML-Datei aussieht.

Praktisch gesprochen können Sie im Moment nur LSL-Skripte, Notecards und Texturen auf diese Weise importieren. Es gibt zwei Schritte. Zuerst müssen Sie die Assets in das richtige Format bringen. Zweitens müssen Sie die XML-Dateien für die Assets generieren.

Assets in das Richtige Format Bringen

Notecards und LSL-Dateien sind einfache Textdateien.

Bilder haben eine Größe, die eine Potenz von zwei auf jeder Seite ist. Das heißt, sowohl die Breite als auch die Höhe müssen 16, 32, 64, 128, 256, 512 oder 1024 betragen. Sie müssen auch im JPEG2000 .j2k-Format vorliegen. Sie können die OpenJPEG-Dienstprogramme verwenden, um von anderen Formaten nach JPEG2000 zu konvertieren. Beachten Sie, dass Version 1.3 der OpenJPEG-Bibliotheken keine Graustufenbilder oder Transparenz unterstützt. Es wird bei Graustufenbildern nicht funktionieren und alle Alphakanäle aus transparenten Bildern entfernen. Ab Revision 824 in den OpenJPEG-SVN-Archiven unterstützt es auch Transparenz und kann möglicherweise PNG-Dateien direkt lesen und (zumindest bei PNG-Dateien) Graustufenbilder verarbeiten. Es lohnt sich, eine neuere Version aus den SVN-Archiven zu kompilieren, zumindest bis eine Version von OpenJPEG offiziell veröffentlicht wird, die diese Funktionen unterstützt.

Konvertieren Sie eine einzelne Bilddatei nach OpenJPEG mit

 image_to_j2k -i inputfile -o outputbase.j2k -r 100,30,10

Eine Anmerkung zur Komprimierung: Die Werte nach "-r" sind die Kompressionsverhältnisse, die in der OpenJPEG-Datei gespeichert werden. Wenn Sie ein Bild mit dem Viewer hochladen (zumindest mit Imprudence), ist die Liste der verwendeten Kompressionsverhältnisse 1920,480,120,30,10. Größere Zahlen bedeuten mehr Kompression und daher unschärfere Bilder. Der Vorteil der Speicherung mehrerer Kompressionsstufen besteht darin, dass, wenn die (geringe) Datenmenge für eine hohe Kompressionsstufe heruntergeladen wird, zumindest so viel gerendert werden kann. Dies ist der Grund, warum eine Textur beim Laden zuerst unscharf erscheint und (zumindest wenn Sie Glück haben) schließlich scharf wird. Ein Kompressionsverhältnis von 1 ist verlustfrei... und verwendet auch viel Platz im Asset-Speicher und viel Bandbreite, wenn es heruntergeladen wird. Ein niedrigstes Kompressionsverhältnis von 10 sollte für die meisten Zwecke ausreichen. Für Dinge wie Sculpt Maps (oder kleine, präzise Texturen) möchten Sie jedoch möglicherweise ein Kompressionsverhältnis von 1 am Ende der Argumente hinzufügen.

Es gibt zwei Skripte, ein Linux-Skript oder ein Windows-Skript in Perl. Sie verwenden ImageMagick und image_to_j2k, um Bilddateien auf die entsprechende Größe zu skalieren und in j2k-Dateien zu konvertieren (obwohl sie mit einer .jp2-Erweiterung benannt sind, da der Viewer dies aus irgendeinem Grund erwartet). Wenn Sie dies verwenden möchten, sollten Sie sich jedoch einiger Einschränkungen bewusst sein:

  • Das Skript löscht Ihre ursprüngliche Bilddatei.
  • Das Skript führt keine Fehlerprüfung durch. Das bedeutet, dass, wenn aus irgendeinem Grund (und es gibt mehrere Gründe dafür!) die image_to_j2k-Datei fehlschlägt, das Skript Ihre Bilddatei trotzdem löscht. Dies könnte Sie traurig machen, wenn Sie, wie ein gewisser dummer Wiki-Seiten-Editor, keine Sicherungskopien gemacht haben.
  • Das Skript erstellt j2k-Dateien mit den Kompressionsverhältnissen 20,10,1. Während dies für Bilddateien, die mit dem Viewer gebündelt sind, großartig ist, ist es nicht gut für serverseitige Bilddateien. Diese verlustfreie Kompression bedeutet eine übermäßige Nutzung des Asset-Speichers des Servers und der Bandbreite.

Vielleicht gibt es eines Tages ein aktualisiertes Skript...

Asset-Set-XML-Dateien Erstellen

Sobald Sie alle Ihre Assets im richtigen Format haben, müssen Sie die Asset-Set-XML-Datei erstellen. Letztendlich möchten Sie ein neues Unterverzeichnis unter bin/assets erstellen. Angenommen, Sie erstellen ein neues Asset-Set namens MyAwesomeAssetSet. Sie müssen in diesem Verzeichnis eine Datei MyAwesomeAssetSet.xml erstellen. Sie können das Python-Skript updatelibrary.py verwenden, um diese Datei zu generieren. Es wird auch die benötigten Inventar-XML-Dateien generieren. Dieses Skript ist unten dokumentiert.

Gelände

Eine Gelände-Höhenkarte Erstellen

Inventarobjekte Generieren

Die Ordner, die in der Bibliothek angezeigt werden, sind in bin/inventory/Libraries.xml definiert. Diese XML-Datei hat einen Eintrag für jede Bibliothek; jede Bibliothek wird durch zwei XML-Dateien definiert. Eine beschreibt die Ordner in der Bibliothek (d. h. Unterordner unter einem Hauptordner, der unter der OpenSimulator Library angezeigt wird), und die andere beschreibt die Objekte in diesen Ordnern. Was Sie wahrscheinlich tun möchten, ist eine neue Bibliothek zu erstellen. Erstellen Sie ein Unterverzeichnis für diese Bibliothek. Generieren Sie die beiden XML-Dateien, die die Ordner und Objekte in dieser Bibliothek beschreiben. Fügen Sie einen Eintrag zu Libraries.xml hinzu, der die Namen der beiden XML-Dateien für Ihre Bibliothek angibt. Sie sind fertig! Das ist jedoch sehr mühsam, da es das Kopieren und Generieren vieler UUIDs erfordert. Daher möchten Sie dies, außer für die trivialsten Bibliotheken, nicht von Hand tun.

Inventar- und Asset-Dateien Generieren

Das Python-Skript updatelibrary.py kann gleichzeitig Asset- und Inventar-XML-Dateien generieren. Im Grunde genommen pflegen Sie einen Baum von Assets in einem Asset-Set-Verzeichnis und führen dieses Skript aus, um die XML-Dateien mit Ihrem Baum zu synchronisieren. (Beachten Sie, dass es im Moment nur Assets hinzufügen kann; es wird sie nicht löschen, wenn Sie sie aus Ihrem Baum entfernen.) Es kann sowohl neue Assets in Ihrem Asset-Set hinzufügen als auch vorhandene Assets, die sich bereits im Asset-Speicher Ihres Grids befinden (für die Sie nichts zu einem Asset-Set hinzufügen müssen).

Um

es zu verwenden, müssen Sie:
  • Ein Asset-Set-Verzeichnis erstellen
  • Alle Ihre Asset-Dateien (Textdateien für Skripte und Notecards, richtig formatierte j2k-Dateien für Texturen) in Verzeichnissen unter diesem Asset-Set-Verzeichnis anordnen, die den Ordnern und Unterordnern unter Ihrem Bibliothek-Hauptverzeichnis entsprechen.
  • Den Namen Ihrer Bibliothek und eine kurze Version (ohne Leerzeichen), die für Dateinamen verwendet wird, festlegen.

Wenn Sie beispielsweise eine Bibliothek erstellen, die als Ordner unter dem OpenSimulator-Bibliotheksordner als "My Awesome Library" angezeigt wird, könnten Sie sie im MyAwesomeAssetSet-Verzeichnis erstellen. Unter diesem Verzeichnis erstellen Sie Unterverzeichnisse mit den Namen Textures, Clothing, Objects und so weiter. In das Textures-Verzeichnis legen Sie Ihre richtig formatierten j2k-Dateien. Im Moment verarbeitet das Skript nur Texturen (.j2k), Notecards (.txt) und Skripte (.lsl).

Zusätzlich können Sie in jedem Verzeichnis eine Datei namens "addassets.lis" ablegen. Sie können Assets auflisten, die sich bereits im Asset-Speicher Ihres Grids befinden und die der Bibliothek im entsprechenden Ordner des Verzeichnisses der jeweiligen addassets.lis-Datei hinzugefügt werden sollen. Jeder Asset-Typ kann auf diese Weise zur Bibliothek hinzugefügt werden. Diese Datei ist eine Reihe von Zeilen, die jeweils das Format

 asset_uuid  asset_type  inventory_type  name of object in inventory

verwenden. Ein Viewer wie Imprudence kann Ihnen die asset_uuid von allem in Ihrem Inventar anzeigen; Sie können dies einfach in die addassets.lis-Datei kopieren. asset_type ist eine Zahl, die vom Asset-Typ abhängt:

Typ des Objekts asset_type Typ des Objekts asset_type
Textur 0 Notecard 7
Sound 1 LSL Text 10
Visitenkarte 2 LSL Bytecode 11
Landmarke 3 Körperteil 13
Kleidung 5 Animation 20
Primitive 6 Gestik 21

inventory_type ist eine andere Zahl, die wiederum vom Inventartyp abhängt. (Inventartyp und Asset-Typ sind nicht dasselbe, obwohl sie oft eng miteinander verbunden sind. Der Inventartyp bestimmt, welches Symbol der Viewer neben dem Namen des Inventarobjekts anzeigt.)

Typ des Objekts inventory_type Typ des Objekts inventory_type
Textur 0 Hauptkategorie 9
Sound 1 LSL Skript 10
Visitenkarte 2 Schnappschuss 15
Landmarke 3 Anhang 17
Objekt 6 Wearable 18
Notecard 7 Animation 19
Kategorie 8 Gestik 20

(Es gibt auch den "Keine" Inventartyp, der die Nummer -1 hat. Körperteile und Kleidung sind beides Wearables.)

Führen Sie das Skript aus. (Führen Sie es mit --help aus, um die Benutzungsanweisungen zu erhalten.) Es wird das gesamte Verzeichnis durchgehen, in dem Sie Ihre Asset-Dateien abgelegt haben. Es wird die bereits vorhandenen Asset-Set-, Inventarordner- und Inventarobjekt-XML-Dateien lesen. Es wird dann Einträge nach Bedarf zu diesen Dateien für alle neuen .j2k-, .txt- oder .lsl-Dateien in Ihrem Verzeichnisbaum sowie für alle neuen Einträge in einer addassets.lis-Datei hinzufügen.

Wenn das Skript abgeschlossen ist, müssen Sie nur noch inventory/Libraries.xml und assets/AssetSets.xml bearbeiten, um es über Ihr neues Asset-Set und Ihre neue Bibliothek zu informieren. Beim nächsten Start von OpenSimulator oder (im Grid-Modus) Robust sollten Ihre Assets importiert und Ihre Einträge zur Bibliothek hinzugefügt werden. Denken Sie daran, dass der Viewer die Bibliotheksliste zwischenspeichert. Sie müssen möglicherweise den Cache des Viewers löschen, um die aktuelle Version der Bibliothek zu erhalten.

Vorsicht

Bibliotheksdaten werden derzeit von der Region selbst und nicht vom Inventardienst abgerufen. Im Grid-Modus müssen die Bibliotheks-XML-Dateien also nicht nur auf dem Robust-Server, sondern auch auf jedem einzelnen Regions-OpenSimulator-Server vorhanden sein.

Dies muss sich in Zukunft ändern, damit Bibliotheksdaten direkt in den Inventardienst vom Robust-Server geladen und auf Anfrage an einzelne Grids verteilt werden (hauptsächlich beim Benutzer-Login). Dies könnte den Inventardienst stärker belasten, obwohl es im Falle des Inventars möglicherweise machbar ist, eine langlebige Cache der Daten auf der Simulator-Seite zu haben.

Kontaktieren Sie Rob Knop (rknop auf freenode, normalerweise im opensim-dev; Prospero Frobozz auf vielen Grids) bei Fragen zu updatelibrary.py.

General
About This Wiki