Ein Vob ist ein „virtuelles Objekt“. Es hat eine Position und Orientierung im Raum und kann durch ein explizit wählbares „Visual“ visualisiert werden. Die Welt wird mit Vobs bevölkert. Jedes Vob gehört einer Klasse an, die die Eigenschaften und Fähigkeiten dieses Objektes festlegt (z.B. „oCNPC“ oder „zCTrigger“). Eine genauere Auflistung bietet das Spacer-Dokument zu den Vob-Klassen.
Beispiele einiger Vobs:
Die Hauptarbeit im Spacer beschäftigt sich mit dem Einfügen, Löschen und Modizieren von Vobs in der Welt. Das Modifizieren umfasst das Positionieren in der Welt sowie die Änderung der Vob-Eigenschaften, die je nach VobKlasse unterschiedlich sind.
Die Objekte in der Welt werden in einer Hierarchie gespeichert. Die meisten Vobs werden wohl als einzelnes Objekt in der Welt „liegen“. Doch einige Vobs sollte man als „Kind“ anderer Vobs einfügen.
Ein gutes Beispiel hierfür ist eine Feuerstelle: Das Hauptvob stellt ein mit Steinen umrahmtes Gluthäufchen dar. An dieses Vob hängen wir nun einen Partikeleffekt (Feuer) als KindVob (ChildVob). Ein Feuer raucht in der Regel und strahlt Licht aus. Daher hängen wir zwei weitere Vobs als Kinder an das FeuerVob: Einen Rauch-Partikeleffekt und ein Licht-Vob. Insgesamt sieht die Hierarchie dann wie folgt aus (die Visualnamen sind erfunden):
Der Vorteil einer solchen Hierarchie ist, dass die KindVobs automatisch bewegt werden, wenn man das ElternVob bewegt. Verschiebe ich also das FeuerstellenVob an eine andere Stelle, so brauche ich mich nicht um die Positionierung von Feuer, Rauch und Licht kümmern. Auf die gleiche Weise sind die Fackeln in der Welt modelliert, so dass bei der Bewegung des Fackelschafts automatisch die als KindVob angehängten Feuer- und LichtVobs mitbewegt werden.
Als zentraler Dialog für (fast) alle Operationen mit Vobs dient der Objekt-Dialog. Er besitzt drei Seiten:
In der Objekt-Liste werden alle Vobs der geladenen Welt aufgelistet. Dabei bleibt die Hierarchie erhalten.
Jeder Levelbaustein (zCVobLevelCompo) wird in der Liste aufgeführt. Jeder Vob eines solchen Levelbausteins ist in speziellen Ordnern (mit dem Namen der jeweiligen Vob-Klasse) einsortiert. Besitzt der Vob weitere KindVobs, so werden diese entsprechend angezeigt (ggf. auf das Pluszeichen klicken).
Mit einem Doppelklick auf ein Vob in der Objekt-Liste springt man im Hauptfenster zu dem gewählten Vob (diese Funktion funktioniert erst ab Spacer-Version 1.5 korrekt).
Neu eingefügte Vobs haben anfangs ein grünes Icon (Kreis) vorangestellt, alle anderen haben ein rotes Icon.
Für einige VobKlassen gibt es spezielle Dialoge, die man über die Objekt-Toolbar aktivieren kann. Dies sind vor allem die vier Buttons, die mit einem roten Pfeil in der rechten oberen Ecke markiert sind:
Die weiteren Dialoge bieten folgende Möglichkeit:
Eine wichtige Eigenschaft von Vobs ist sein „Visual“. Ein Visual regelt die Darstellung des Vobs. Dabei gibt es verschiedene Arten von Visuals:
Besitzt ein Vob als Visual ein Mesh (3ds), so wird es als das dreidimensionales Objekt dargestellt, das durch das Mesh beschrieben wird. Ein Mesh besteht aus aneinander gereihten Polygonen, die wiederum durch Vertices (ihre Eckpunkte) definiert sind.
Wichtig! Bei Meshes gibt es eine Einschränkung: Maximal darf ein „normales“ Mesh 2048 Verteces besitzen. Eine Ausnahme spielt das Visual einer Levelkomponente (zCVobLevelCompo), das keiner solchen Beschränkung unterliegt. Allerdings können Levelkomponenten nur am Ursprung der Welt eingefügt und auch nicht bewegt oder rotiert werden. Deshalb muss das Mesh einer Levelkomponente (z.B. der Turm von Xardas) bereits an den korrekten Koordinaten im 3D-Editor positioniert werden.
Die zSpy-Meldung 'Degenerated Polygon' ist übrigens nicht tragisch, da diese autom. aus den Vob-Meshes entfernt werden, sollte aber vom Ersteller des Meshes beachtet werden: Ein 'Degenerate Polygon' ist ein Polygon/Triangle, das den Flächeninhalt 0 besitzt (beispielsweise durch kolineare Vertices).
Partikeleffekt-Vobs werden über Scripte erzeugt. Die entsprechenden Datei befinden sich im Ordner _work\\data\\scripts\\system\\pfx. Der Name einer PFX-Instanz kann als Visual angegeben werden, wobei ein „.pfx“ angehängt werden muss.
DECALs sind zweidimensionale Meshes, zur Darstellung von zweidimensionalen Strukturen. Beispiele hierfür sind Spinnenweben, Vorhänge, Bilder an der Wand und mehr. Die Meshes werden automatisch erzeugt und die als Visual angegebene Textur darauf gemappt.
Es gibt neben all den offensichtlichen Vobs auch eine Reihe unsichtbarer Objekte. Dabei treten diese durch Effekte oder Ereignisse in Erscheinung. Ein LichtObjekt ist nicht direkt sichtbar, sondern macht sich nur durch die Beleuchtung seiner Umgebung bemerkbar. Ähnlich verhält es sich mit Soundobjekten. Musikzonen bestimmen, welche Hintergrundmusik in einem Levelbereich gespielt wird und Triggerfelder reagieren auf Berührung mit NPCs. Ein bekanntes Beispiel sind auch die Wegpunkte, die miteinander verknüpft das Wegenetz erzeugen.
All diese Objekte sind im Spacer sichtbar, wenn man die sogenannten „HelperVobs“ anzeigen läßt. Dies geschieht über die Objekt-Toolbar: .
Diese Helpervobs für Lichter, Sounds, Wegpunkte und mehr sind Meshes, die im Ordner _work\\data\\meshes\\_intern zu finden sind und den Namen der entsprechenden Vobklasse tragen (mit vorangestelltem „invisible_“):