Daemonika Nightfire: Wie man eine oeffentliche Location so optimiert, dass sich Besucher wohlfuehlen ...
Daemonika Nightfire hat mir wieder einen Beitrag geschickt, den ich sehr interessant finde und daher veröffentliche. Danke Dae, dass du immer mal wieder etwas für mich schreibst. Die gesamten Beiträge von Daemonika findet ihr gesammelt hier.
Hallo,
in diesem Beitrag möchte ich auf das Thema eingehen, wie die Gestaltung einer Szene die Performance beeinflusst. Wie ihr wisst, beschäftige ich mich seit Jahren mit dem Thema LAG und wie man diesen vermeidet.
Dieses Mal geht es nicht um die Einstellungsoptionen des Viewers – ich denke, das haben wir bereits bis zum Erbrechen durchgekaut. Vielmehr möchte ich zeigen, wie man eine öffentliche Location so optimiert, dass sich die Besucher dort wohlfühlen. Dabei beschäftigen wir uns mit Texturen, Scripten und Objekten.
![]() |
| Mainstore |
Texturen:
Fangen wir gleich mit den Texturen an. Oft haben wir nicht die Möglichkeit, Texturen selbst zu gestalten, und sind darauf angewiesen, dass der Ersteller gute Arbeit geleistet hat. Leider ist es jedoch viel zu oft so, dass Texturen für sehr kleine Details viel zu groß dimensioniert sind.
Nichtsdestotrotz legen wir alle Wert auf möglichst authentische Szenen, wodurch eine gewisse Texturvielfalt unvermeidlich ist. Wenn es möglich ist, bietet es sich an, diverse Objekte einfach zu kopieren, um Vielfalt zu simulieren.
Nehmen wir als Beispiel einen Wald: Meist merkt niemand, dass die Grünanlage aus nur wenigen, vervielfältigten Objekten besteht. Wenn man die einzelnen Kopien zusätzlich dreht und in der Größe variiert, ist die Illusion perfekt.
Technisch hat das einen klaren Vorteil: Identische Texturen müssen vom Viewer nur ein einziges Mal in den Grafikspeicher geladen werden. Je weniger unterschiedliche Texturen verwendet werden, desto seltener sind Texturwechsel nötig, was die GPU massiv entlastet. Zu große Texturen bleiben selbst dann „teuer“ (im Sinne des Leistungsverbrauchs), wenn sie nur aus der Distanz sichtbar sind, da sie weiterhin Speicher belegen und verarbeitet werden müssen.
Scripte:
In meinem letzten Beitrag habe ich bereits beschrieben, wie Scripte die Leistung des Viewers negativ beeinflussen können. Hier nun noch einige Ratschläge, wie man eine Location optimal einstellen kann.
Grundsätzlich lege ich sehr viel Wert darauf, so wenig Scripte wie möglich zu verwenden. Das hat nichts mit Eigensinn zu tun, sondern vielmehr damit, ausreichend Ressourcen für Szenarien zu haben, die ich nicht unter Kontrolle habe.
Je weniger Scripte ich für meine Location verwende – und je seltener sich diese mit sichtbaren Objekteigenschaften befassen müssen –, desto besser ist das Gesamtergebnis. Wenn ich auf einer Region nur sehr wenige Scripte einsetze, bedeutet das zwangsläufig, dass mehr freie Leistung zur Verfügung steht. Davon profitiert nicht nur die generelle Region-Performance, sondern auch die Nutzung von Scripten durch Besucher, die dadurch deutlich flüssiger läuft.
Alternativ kann man sich natürlich auch irgendwelche Tools aufstellen, mit denen man Besucher wegen eines Scripts zu viel vergrault. Sorry, dass ich das so deutlich sagen muss, aber solche Tools einzusetzen, ist ein Offenbarungseid dafür, dass man von „Tuten und Blasen“ keine Ahnung hat.
Denn diese Tools lösen kein Problem, sie kaschieren es nur. Nicht die Besucher verursachen den LAG, sondern schlecht geplante und unnötige Scripte auf der eigenen Location. Scriptlast skaliert nicht linear; jedes zusätzliche Script erhöht die Gesamtlast für alle. Wer Besucher einschränkt, statt die eigene Szene zu optimieren, verlagert die Verantwortung und vergrault am Ende genau die Leute, für die die Location eigentlich gedacht ist.
Objekte:
Bei Objekten gilt das Gleiche wie bei Texturen: Kopien sind oft die bessere Wahl. Indem man ein Objekt mehrfach verwendet, statt viele unterschiedliche Modelle zu erstellen, reduziert man die Anzahl der Root-Objekte in der Szene. Weniger Root-Objekte bedeuten weniger Zeichenbefehle an die Grafikkarte und weniger Berechnungen bei der Sichtbarkeitsprüfung (Frustum Culling), was zu einer flüssigeren Darstellung im Viewer führt. Wenn man die einzelnen Kopien dreht, skaliert oder leicht modifiziert, bleibt die Illusion vielfältiger Objekte bestehen, während die Performance stabil bleibt.
Weiterhin kann man viele Objekte mit ähnlichen Eigenschaften verlinken, solange sie keine Scripte enthalten, die individuelle Objekteigenschaften beeinflussen müssen. Beispielsweise habe ich in meiner Location jetzt alle Gräser, Sträucher und Bäume miteinander verlinkt, um die Anzahl der Einzelobjekte so gering wie möglich zu halten.
Technisch verbessert ein Linkset die Performance, weil der Viewer verlinkte Prims oft als ein einziges Objekt behandelt. Dadurch werden weniger Berechnungen für die Darstellung und Sichtprüfung benötigt, was besonders bei großen Szenen mit vielen identischen Objekten deutlich spürbar ist.
Der Grund ist einfach: Der Viewer muss jedes einzelne Objekt in der Szene prüfen, selbst wenn es sich um eine Kopie handelt, die vielleicht schon im Cache liegt. Jedes Objekt hat eine eigene Position, Rotation und Größe, und für jedes muss der Viewer entscheiden, ob es gerade im Sichtfeld liegt. Linksets reduzieren diese Aufgabe, weil viele Prims zu einem einzigen Root-Objekt zusammengefasst werden. Dadurch gibt es weniger Einheiten, die verwaltet werden müssen, und der Viewer kann die verlinkten Prims effizienter verarbeiten.
Der eine oder andere von euch kennt meine öffentlichen Locations bereits, dennoch seid ihr alle herzlich eingeladen, euch anzusehen, wie ich versucht habe, meine Ratschläge umzusetzen. Erst kürzlich habe ich meine Mainstore-Location umgebaut und dabei mit sehr vielen Kopien gearbeitet. Selbst physische Objekte, die allgemein als kritisch betrachtet werden, sind dort zuhauf vorhanden.
Liebe Grüße
Dae

.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
Kommentare
Kommentar veröffentlichen