Dienstag, 25. September 2012

Pathfinding FAQ von Lorca Linden

Quelle: SL Brand Center
Am 18. September hatte Lorca Linden im LL-Forum mit seinem ersten (und bisher einzigen) Beitrag eine längere FAQ zum Thema Pathfinding gepostet. Es steht zwar nicht wirklich viel Neues drin, aber es sind ein paar ganz spezifische Tipps enthalten, die vielleicht jemand gut gebrauchen kann. Ich poste das erst heute, weil ich mir mit der Übersetzung keinen Stress gemacht habe, sondern jeden Tag nur zwei bis drei Abschnitte angegangen bin.^^

Am 20. September wurde auch der offizielle Second Life Viewer 3.4.0 veröffentlicht, der in dieser Version die volle Pathfinding-Unterstützung erhalten hat. Vorher war dies nur im Beta- und Development-Viewer zu finden. Dadurch sind die Tipps aus der FAQ nun von allen nachvollziehbar, die mit diesem Viewer in Second Life einloggen. Bei vielen TPVs geht das auch, jedoch steht dort noch nicht das View/Test-Fenster zur Verfügung, mit dem das Navmesh grafisch angezeigt werden kann.

Hier nun die Übersetzung:


Pathfinding FAQ
von Lorca Linden am 18.09.2012 um 4:05pm
- Forenübersetzung -

Wir möchten uns bei allen bedanken, die an der Pathfinding Beta teilgenommen haben und bei denen, die damit begonnen haben, Objekte und Charaktere mit Pathfinding-Funktionen zu erstellen, nachdem der Pathfinding-Servercode gridweit eingeführt wurde. Wir haben Fragen gesammelt und werden auf viele davon hier eingehen. Rückmeldungen sind weiterhin sehr willkommen!

F: Wird Pathfinding starken Lag auf meiner Region / Parzelle verursachen?
A: Nein. Für den überwiegenden Teil der Pathfinding Beta war dies eine berechtigte Sorge bei Mainland Regionen und allen Regionen, bei denen die Second Life Nutzer die Pathfinding-Grundstücke mit ihren Linksets nicht aktualisiert hatten, um sie auf "Static" umzustellen. Dies wird manchmal auch als "Pemanent" bezeichnet, was bedeutet, dass die Linkset-Nutzung auf "Walkable", "Static Obstacle", "Exclusion Volume" oder "Material Phantom" gestellt wurde.

Das Aktualisieren eurer Linksets kann dennoch die Performance verbessern und es ist notwendig, um ein optimales Verhalten von Pathfinding-Kreaturen auf eurer Region zu erreichen. Die schlechtmöglichste Performance wird nun an einem bestimmten Punkt so gekappt, dass man in den meisten Regionen keinen Performance-Unterschied nach dem Einschalten von Pathfinding bemerken wird. Bei einer Fullprim Region werden durchschnittlich nicht mehr als 4ms/Frame für das Aktualisieren des Navmesh benötigt, um die Änderungen für "Movable Obstacles" (dem Standard für Prims) für jeden Frame zu berechnen.

Auf Homestead Regionen wird bereits ab 1ms/Frame gekappt. Verminderte Performance sollte nur in Regionen wahrgenommen werden, auf denen (a) die Performance schon vorher schlecht war (das heißt, die freie CPU-Zeit war bereits kleiner als 4ms auf einer Fullprim Region oder kleiner 1ms auf einer Homestead), und (b) keine Linksets auf Static umgestellt wurden.

F: Wird das Aktualisieren einer Umgebung für Pathfinding viel Zeit in Anspruch nehmen?
A: In den meisten Fällen sollte es relativ einfach sein, eine bestehende Umgebung umzustellen, damit sie mit Pathfinding funktioniert. Wir haben das neue "Linksets"-Fenster für Pathfinding so gestaltet, dass ihr Gruppen von Objekten auswählen und ihre Pathfinding-Eigenschaften in einem Schritt ändern könnt. Wir haben ebenfalls ein neues Simulator-Konsolenkommando bereitgestellt (die Simulator-Konsole kann mit Strg+Umschalt+ö geöffnet werden), die es Einwohnern erlaubt, alle Linksets (oder auch nur die nicht geskripteten Objekte) auf ihrer Parzelle (oder einer Parzelle im Gruppenbesitz) entweder auf Walkable oder Static Obstacle zu setzen.

Estate Manager können die Konsole benutzen, um alle Linksets auf einer Region zu ändern. Man benötigt auch keine Mod-Rechte für ein Linkset, um dessen Pathfinding-Eigenschaften zu verändern. Sie können von jedem geändert werden, der (a) Eigentümer des Objektes ist, (b) Mod-Rechte für das Objekt hat, oder (c) Eigentümer der Parzelle oder Region ist, auf der sich das Objekt befindet. (Achtet darauf, dass man bei Änderungen für Objekte die nicht in eurem Besitz sind und für die man keine Mod-Rechte hat, aber die sich auf eurer Parzelle befinden, das Konsolen-Kommando verwenden muss und das Linkset-Fenster hier nicht funktioniert). Weitere Informationen über das Pathfinding Tool für Mehrfachktualisierungen könnt ihr hier nachlesen.

F: Wann werden die Pathfinding Tools im SL Viewer veröffentlicht und woher bekomme ich eine Beta-Version der Viewer-Tools?
A: Wir erwarten, dass wir die Pathfinding Tools bis Ende September in den Hauptviewer integriert haben! Bis dahin könnt ihr Zugang zu den Tools durch den Download des neuesten Beta Viewers erhalten - das ist sehr hilfreich für alle, die Pathfinding freundliche Umgebungen bauen oder nachbearbeiten wollen. Anm.: Wie oben schon angesprochen, hat inzwischen auch der SL-Viewer die Pathfinding-Tools.

F: Kann ich meine Objekte bewegen, nachdem ich sie einmal auf Static umgestellt habe?
A: Wenn ihr ein Linkset bewegt oder verändert, das auf Static gesetzt wurde, wird das Navmesh auf "unsauber" gesetzt und euch wird ein Button angezeigt, mit dem ihr ein "Rebake" ausführen könnt, was eine Aktualisierung unter Beachtung eurer Änderungen durchführt. Dabei gibt es zwei Einschränkungen: (1) Ihr könnt ein Static Linkset nicht ändern, wenn ihr nicht in der gleichen Region seid, wie das Rootprim und (2) Skripten in statischen Objekten ist es nicht erlaubt, Objekte in einer Weise zu verändern, die das Navmesh unsauber werden lassen (z.B. Verlinkung oder Aufheben der Verlinkung von Prims, Veränderung der Form, oder transformieren aller Prims, die nicht auf die physikalische Form "Keine" gesetzt sind.) Wenn ihr euch fragt, wie ihr die Türen von eurem Haus unter Pathfinding zum Funktionieren bringt, dann seht euch die nächste Frage an.

F: Wie kann ich Pathfinding für mein Haus aktivieren, dass eine geskriptete Tür eingebaut hat?
A: Wegen der Regel, die es Skripten in einem Walkable Objekt (wie z.B. einem Haus) nicht erlaubt, das Linkset auf eine Weise zu verändern, die das Navmesh ungültig werden lässt (z.B. durch Änderung der physischen Form beim Öffnen der Tür), ist es notwendig, Häuser und ähnliche Linksets etwas anders zu gestalten.

Anstatt die Tür mit dem Skript zum Öffnen und Schließen als Teil in einem Linkset zu verwenden, sollte das Linkset stattdessen die Tür aus seinem Inventar als separates Objekt "heraus rezzen". So kann die Tür mit einem Skript versehen werden, das llSetKeyframedMotion zum Schwingen oder Verschieben nutzt. Damit wird es Pathfinding Objekten ermöglicht, sauber auf die Tür zu reagieren und gleichzeitig den aufwendigen Vorgang einer Neuberechnung des Navmesh zu vermeiden. In Kürze planen wir Beispiele für diese Bauweise zu erstellen, und sie gemeinsam mit einer Anleitung für einfaches Umgestalten eines bestehenden Hauses in Bezug auf Pathfinding zur Verfügung zu stellen.

F: Warum ist das Bearbeiten des Landbodens jetzt anders als früher?
A: Aus Gründen der Performance, erzeugen wir den Landboden für Kollisionsberechnungen auf dem Server nicht länger als Heightfield (das ist so etwas wie eine topografische Karte). Stattdessen verwenden wir ein "gebogenes Mesh". Kollisionen werden damit sehr viel effizienter auf den meisten Untergründen berechnet, aber das Aktualisieren des Mesh (bei Änderungen) dauert viel länger.

Um dem Rechnung zu tragen, gibt es nun eine Änderungsverzögerung von etwa 30 Sekunden, nachdem man mit dem Bearbeiten des Landbodens aufgehört hat und bevor damit begonnen wird, das Mesh neu aufzubauen (was dann nochmal ein bis zwei Minuten dauern kann). Bis das Mesh komplett aktualisiert wurde, werden Objekte und Avatare nicht sauber mit dem Mesh kollidieren und man wird eventuell Fehler bemerken, wie Avatare, die auf und ab hüpfen, wenn sie auf dem bearbeiteten Mesh des Landbodens laufen.

F: Was bedeuten die Prozentzahlen, die im Linkset-Fenster angezeigt werden? (Beachtet, dass die Mehrheit der Nutzer sich nie um diese erweiterten Funktionen kümmern müssen).
A: Diese Zahlen sind die Begehbarkeits-Koeffizienten des Linksets für jeden Charakter-Typ. Das ist wahrscheinlich die umfangreichste, komplexeste und am wenigsten intuitive Funktion von Pathfinding.

Angenommen, ihr habt etwas gebaut, das für Tiere und menschliche NPCs vorgesehen ist. Der Aufbau enthält ein Netzwerk von Straßen und etwas Graslandschaft. Für die meiste Zeit wollt ihr, dass die Tiere auf dem Gras und die Menschen auf den Straßen bleiben. Wenn nun aber ein menschlicher NPC versucht, von Punkt A nach Punkt B zu kommen und die Straße wäre 100x länger (weil sie sehr kurvenreich ist), als der direkte Weg über das Gras, dann wollt ihr vielleicht, dass sie dann den direkten Weg nehmen. Dies ist genau das, wofür Begehbarkeits-Koeffizienten und Charakter-Typen gedacht sind.

Um das anzuwenden, sollte man die menschlichen NPCs so skripten, dass sie CHARACTER_TYPE_A und die Tiere CHARACTER_TYPE_B verwenden. Dann kann man das Linksets-Fenster öffnen und den Begehbarkeits-Koeffizienten für das Gelände auf "A=1%, B=100%" einstellen. Das bedeutet, dass Pathfinding-Charaktere, die den CHARACTER_TYPE_A verwenden, sich 100x langsamer auf dem Gelände bewegen (und Wege bevorzugen, die dieses Gelände vermeiden, außer sie sind wesentlich länger), während Kreaturen, die den CHARACTER_TYPE_B verwenden, sich mit voller Geschwindigkeit auf dem Gelände bewegen können. Anschließend wählt man alle Straßen im Linksets-Fenster aus und stellt sie auf "A=100%, B=0%". Das bewirkt, dass Charaktere die CHARACTER_TYPE_A verwenden, sich mit voller Geschwindigkeit auf den Straßen bewegen, während Kreaturen mit CHARACTER_TYPE_B diese Straßen unter allen Umständen vermeiden werden.

Beachtet bitte, dass zur Vermeidung von Unstimmigkeiten ein Pathfinding-Charakter, der sich in einem Bereich wiederfindet, der Null Begehbarkeit für dessen CHARACTER_TYPE verwendet, sich mit voller Geschwindigkeit bewegen kann, um von dort flüchten zu können. Das kann passieren, wenn der Charakter durch Kollissionen in einen solchen Bereich gestoßen wird, oder durch seine Bewegungseinstellungen dazu gezwungen wird, sich dort hinein zu bewegen (z.B. durch einen Bewegungsradius).

F: Welchen Charakter-Typ sollte ich als Hersteller verwenden, wenn ich ein Haustier erstellen möchte (oder einen Fisch, oder ein KI-Auto)?
A: Um das Zusammenspiel zwischen Linksets und Charakteren zu unterstützen, empfehlen wir folgende Charakter, die für den allgemeinen Gebrauch vorgesehen sind.
  • Menschen / menschenähnlich: CHARACTER_TYPE_A
  • Wilde Tiere / Geländefahrzeuge: CHARACTER_TYPE_B
  • Straßenfahrzeuge: CHARACTER_TYPE_C
  • Sonstiges: CHARACTER_TYPE_D
Achtet darauf, dass das entscheidende Merkmal nicht der gewählte Charakter ist, sondern die Oberflächen, auf denen sie sich bevorzugt bewegen sollen - und wie schnell sie dabei sind. Zum Beispiel könnte man ein reitbares Pferd als Haustier ansehen, aber es ist wahrscheinlich besser, es als wildes Tier/Geländefahrzeug einzustufen, so dass es nicht versuchen wird, in die Häuser seiner Besitzer zu laufen. Ähnliches gilt, wenn ihr vorgefertigte Straßenbauelemente verkauft. Dann werdet ihr es wahrscheinlich bevorzugen, wenn diese einen hohen Begehbarkeit-Koeffizienten für die Typen A und C haben und einen niedrigen Koeffizienten für Typ B.

F: Was kann ich mit dem View/Test Fenster machen, wenn ich kein Pathfinding verwende?
A: Die Ansichten, die im View/Test Fenster zur Verfügung stehen, sind nicht nur nützlich für Pathfinding. Wenn ihr Walkables, Static Obstacles, Material Volumes und Exclusion Volumes betrachtet (aber nicht "Moveable Obstacles"), dann erhaltet ihr einen Einblick in die Physik-Engine. Dies ist derzeit die einzige verfügbare Methode in einem Second Life Viewer, mit der Second Life-Nutzer die realen physischen Darstellungen ihrer Objekte sehen können, was ein nützliches Werkzeug für die Optimierung der Physik eurer Region sein kann.

Wenn ihr euch zum Beispiel fragt, wie der Simulator ein Fahrzeug oder eine seltsame Sculpty-Wiese "sieht", die ihr gebaut habt, dann versucht dieses Linkset vorrübergehend in das Navmesh aufzunehmen, ein Re-Baking auszuführen und es anzusehen. Wir hoffen, dies in Zukunft noch mehr zu einer Funktion auszubauen.

Es gibt auch eine Einschränkung, die es zu beachten gilt: Die Visualisierung von Pathfinding berücksichtigt nicht den konvexen Radius eines Objektes, der intern als zusätzliches Toleranzelement bei Kollissionen verwendet wird. Aus diesem Grund können bestimmte Linksets etwas kleiner im Viewer erscheinen, als sie in der Engine sind.

Wir haben auch eine praktische Funktion in die Pathfinding Tools aufgenommen, mit der ihr direkt zu Objekten teleportieren könnt, für die ihr die Änderungsrechte habt.

Quelle: [LL Forum] - Pathfinding FAQ

Weitere Informationen (wenn auch schon etwas älter), hatte ich bereits zum Start von Pathfinding hier im Blog mal zusammengefasst. Das findet man unter folgendem Link:
>> Pathfinding ab heute im kompletten Main Grid von SL

Keine Kommentare:

Kommentar veröffentlichen