Eine figments.nrw- Anwendung besteht aus einer oder mehreren figments.nrw-Scenes, in welcher eine 3D-Umgebung und relevante Objekte platziert sind. Die 3D-Umgebung ist ein statische(s) Objekt(e), welche den Hintergrund der Anwendung bilden. Innerhalb der 3D-Umgebung werden die relevanten Objekte platziert, mit welchen der Nutzer und die Logik interagieren.
Das Anlegen der 3D-Umgebung ist technisch anspruchsvoll und beeinflusst die finale Performance der Anwendung. Um den Prozess so einfach, niederschwellig und ressourcenschonend wie möglich zu gestalten, sollten zunächst folgende Überlegungen getroffen werden:
Welche 3D-Umgebungen werden benötigt? Die benötigten 3D-Umgebungen leiten sich aus den Lernabschnitten ab, welche in einzelnen Figments-Scenes gekapselt werden. Wichtig ist, dass fast keine Information zwischen Lernabschnitten/Scenes geteilt werden können und diese somit in sich geschlossenen sind.
Beispiel 1: Tutorial, Verbrennung von Kohle in Sauerstoff, Molekülebene, Lernerfolgskontrolle.
Dies ist ein gute Aufteilung der Lernabschnitte, da die Scenes klar voneinander getrennt sind und keine Informationen zwischen den Scenes geteilt werden müssen.
Beispiel 2: Tutorial, Schutzkleidung anlegen, Fräsen eines Bauteils mit Reaktion auf die angelegte Schutzkleidung.
Dies ist eine schlechte Aufteilung der Lernabschnitte, da für den zweiten Lernabschnitt die Information der angelegten Schutzkleidung aus dem ersten Lernabschnitt benötigt wird.
Nachdem diese logische Aufteilung erfolgt ist, können die benötigten 3D-Umgebungen für die Scenes definiert werden. Für Beispiel 1 wären dies zum Beispiel: Chemielabor, Chemielabor, weißer Raum und Chemielabor. Somit werden zwei 3D-Umgebungen benötigt. Für Beispiel 2 wären die Umgebungen: Werkhalle, Werkhalle und Werkhalle. Somit wird nur die 3D-Umgebung Werkhalle benötigt.
Um zeitsparend zu arbeiten, lohnt es sich in beiden Fällen Scenes anzulegen, welche nur die 3D-Umgebung enthalten und diese dann, bevor die relevanten Objekte und Logik hinzugefügt werden zu duplizieren.
Erstellen von 3D-Umgebungen
Nachfolgend wird erläutert wie eine neue VR-Umgebung in Unity angelegt wird.
Anlegen einer neuen Unity-Scene
Zuerst muss wie an vorheriger Stelle erläutert eine Figments-Scene angelegt werden (siehe "Figments.nrw Scene anlegen").
Hinzufügen des Umgebungsmodells

zu 1.: Hinzufügen des 3D-Umgebungsmodells zu der Scene.

zu 1.: Hinzugefügtes 3D-Umgebungsmodell.

zu 3.: Positionieren des Spawn-Bereichs.

zu 4.: Skalierung des 3D-Umgebungsmodels.
- 1. Um das Umgebungsmodell hinzuzufügen wird dieses, nachdem es in Unity 3D importiert (siehe "Objekte zur Szene hinzufügen") wurde, in der Szene im Hierachy-Funktionsfenster unter >Geometry< hinzugefügt.
- 2. Als nächstes müssen der Teleportationsbereich und der Boden temporär angepasst werden, damit die Skalierung der 3D-Umgebung in VR-getestet werden kann (siehe Teleportationsbereich anpassen).
- 3. Hiernach muss die Spawn-Bereich festgelegt werden, in welchem der Nutzer in die Umgebung einsteigen soll. Hierzu wird im Hierarchy-Funktionsfenster die SpawnArea ausgewählt und mit den Werkzeugen im Scene-Funktionsfenster an die gewünschte Stelle bewegt.
- 4. Anschließend wird die Anwendung auf einer angeschlossenen VR-Brille in SteamVR getestet (siehe "Testen der VR-Inhalte"), um die Skalierung und das Layout der Umgebung anzupassen. Der Fokus des Testens sollte darauf liegen, auf welcher Höhe der Zielcursor der Teleportation dargestellt wird, wo die Bodenhöhe ist (Controller auf den Boden legen) und ob die Skalierung der 3D-Umgebung korrekt ist. Anpassungen können im Inspector-Funktionsfenster in der Transformkomponente der Objekte vorgenommen werden. Dieser Schritt muss erfolgreich abgeschlossen werden, da spätere Änderungen zu Problemen und kaputten Abhängigkeiten führen können.
Teleportationsbereich anpassen

zu 1.: Anzeigen des Colliders des Teleporationsbereichs.

zu 2.: Anpassen des Teleportationsbereichs.

zu 3.: Verschieben des Teleportationsbereichs.

zu 4.: Verhältnis des Bodens zu dem Teleportationsbereich.
- 1. Der Teleportationsbereich bestimmt, wohin sich Nutzer teleportieren können und worauf der Zielcursor der Teleportation projiziert wird. Um den Teleportationsbereich anzupassen wird im Hierarchy-Funktionsfenster der TeleportationFloor selektiert und im Inspector-Funktionsfenster die Box-Collider-Komponente über die entsprechende Schaltfläche im Scene-Funktionsfenster editiert. Sollte der Collider nicht sichtbar sein, muss überprüft werden, ob die Gizmos aktiviert sind.
- 2. Die Ausdehnung des Teleportationsbereichs kann im Inspector-Funktionsfenster in der Box-Collider-Komponente oder im Scene-Funktionsfenster durch Klicken und Bewegen der Quadrate angepasst werden.
- 3. Mit den Werkzeugen in dem Scene-Funktionsfenster oder der Transform-Komponente im Inspector-Funktionsfenster kann der gesamte Teleportationsbereich verschoben werden.
- 4. Nach dem gleichem Prinzip kann auch der Boden angepasst werden. Dieser definiert den Bereich, in welchem sich Nutzer ohne Teleportation bewegen können. Somit sollte dieser immer größer als der Teleportationsbereich gewählt werden, um zu verhindern, dass Nutzer über die Kante gehen können. Des Weiteren ist zu beachten, dass der Boden immer leicht unter dem Teleportationsbereich liegen muss, da dieser sonst die Interaktion zwischen dem Zielcursor der Teleportation und dem TeleportationFloor verhindert und somit Teleportation nicht möglich ist.
Collider erstellen

zu 1.: Hinzufügen von primitiven Würfeln.

zu 1.: Setzten der Würfel als Kindobjekte.

zu 2.: Abdecken der visuellen Komponenten mit den primitiven Würfeln.

zu 3.: Deaktivieren der Mesh-Renderer der primitiven Würfel.
Da das Modell der 3D-Umgebung ein statisches, individuelles Objekt ist, hat dieses keine Collider. Um zu verhindern, dass Nutzer die Umgebung verlassen können und Oberflächen nutzbar werden, müssen Collider hinzugefügt werden.
- 1. Um die Platzierung der Collider zu vereinfachen, können >Cubes< verwendet werden. Im Hierarchy-Funktionsfenster können diese mit >+< // >3D Objects< // >Cubes< hinzugefügt werden und anschließend als Kindobjekte unter dem Collider-Objekt hinzugefügt werden. Eine weitere Strukturierung mit leeren Objekten ist sinnvoll.
- 2. Die so hinzugefügten Cubes werden im Scene-Funktionsfenster mit den Werkzeugen bzw. im Inspector-Funktionsfenster mit der Transform-Komponente platziert, um dem 3D-Modell Collider zu geben.
- 3. Wurden alle Würfel platziert und der Raum abgedeckt, können alle Cubes selektiert werden und deren Mesh-Renderer-Komponente im Inspector-Funktionsfenster deaktiviert werden. Dadurch werden die Cubes unsichtbar. Die Collider sind jedoch noch vorhanden.
- 4. Es ist empfehlenswert die 3D-Umgebung und die Collider kurz in VR zu testen.
Ausleuchten der VR-Umgebungen
Beleuchtung ist für viele Endgeräte eine hohe Rechenlast, welche in der VR-Umgebung zu einer schlechten Framerate führt, die sich in einer stockenden und ruckeligen Anwendung manifestiert. Um dieses Problem zu beheben, wird Licht statisch in die Texturen der Scene gebacken (baking).
Die Voraussetzung zum Durchführen dieses Prozesses ist, dass eine leere Scene erstellt wurde. Im Rahmen von figments bedeutet dies folgendes:
- Hintergrund / Raum wurde hinzugefügt
- Dekorative Objekte sind eingefügt (diese Objekte sind nicht relevant für den Lernprozess!)
- Systeme sind vorhanden
- Collider wurden hinzugefügt
- SpawnArea wurde gesetzt
- TeleportFloor wurde gesetzt
- Die Umgebung wurde in VR getestet, um die Größen und Layout zu bestätigen. Änderungen an den statischen Objekten sollten nach dem baking nicht mehr vorgenommen werden.
Anpassen der Skybox

Die Skybox bestimmt das Erscheinungsbild des Himmels, sowie die Farbe, mit welcher die Umgebung ausgeleuchtet wird. Verschiedene Skyboxes können aus dem Unity-Asset-Store teilweise kostenlos heruntergeladen werden.
Um die Skybox zu ändern kann im Lighting-Funktionsfenster (Anleitung um dieses zu öffnen) im Reiter >Evironment< das >Skybox Material< ausgetauscht werden.
Platzieren der Reflection-Probe

Die Reflection-Probe reduziert die Rechenleistung der Hardware zur Erzeugung von Reflektionen.
Um die Reflection-Probe korrekt einzustellen, wird die Refelection-Probe-Komponente im Inspector-Funktionsfenster ähnlich zu den Collidern eingestellt. Dabei sollte diese die gesamte 3D Umgebung umfassen.
Hinzufügen von Lichtquellen
Umgebungslicht

Das Umgebungslicht entspricht der Sonne in der Realität. Um dieses anzupassen wird das Sun-Objekt im Hierarchy-Funktionsfenster selektiert und mit dem Werkzeugen in Scene-Funktionsfenster oder der Transform-Komponente im Inspector-Funktionsfenster angepasst.
Weitere Einstellungen der Lichtquelle sind unter der Light-Komponente in dem Inspector-Funktionsfenster möglich.
Statische Lichtquellen

Hinzufügen von statischen Lichtquellen.

Einstellen der statischen Lichtquellen.
Statische Lichtquellen bestimmen, wie die statische Umgebung ausgeleuchtet ist. Es gibt drei Typen von Lichtquellen. Punktuelle Lichtquellen (Point) strahlen sphärisch von ihrem Ursprung ab. Lichtquellen-Flächen (Area) strahlen von einer Ebene aus Licht in eine Richtung ab. Scheinwerfer (Spot) strahlen Licht in eine bestimmte Richtung in einem begrenzten Bereich ab.
Um Lichtquellen hinzuzufügen wird im Hierarchy-Funktionsfenster unter >+< // Light // >"Typ"< eine Lichtquelle hinzugefügt. Dabei ist zu beachten, dass die Lichtquellen häufig nicht direkt zu visuellen Änderungen im Scene-Funktionsfenster führen und erst durch das Baking die Umgebung beeinflussen.
Im Inspector-Funktionsfenster kann jede Lichtquelle in der Light-Komponente angepasst werden.
Wichtig ist, dass die >Mode< auf "Baked" (falls nötig auch auf "Mixed") gestellt wird. Weitere Einstellung können in der Kategorie "Emission" vorgenommen werden. Da jede Umgebung einzigartig ist, muss mit diesen Einstellungen und der Position der Lichter innerhalb der Scene experimentiert werden.
Mit Point-Lights kann eine Grundausleuchtung der Scene durchgeführt werden. Area und Spotlight eigenen sich um Lampen, Lichtquellen und Raumlicht zu simulieren.
Setzen der Umgebung zu statisch

Setzten des selektierten Objektes zu statisch.

Dialog, um Kindobjekte ebenfalls statisch zu setzten.
Bevor das baking der Lichtquellen gestartet wird, müssen Objekte, in dessen Texturen das Licht inkludiert werden soll, markiert werden. Normalerweise sind dies alle Objekte, welche die 3D-Umgebung stellen und mit welchen der Nutzer nicht interagieren soll, bzw. welche nicht für das Lernen benötigt werden. Um Objekte statisch zu setzen, werden diese im Hierarchy-Funktionsfenster selektiert und im Inspector-Funktionsfenster als statisch markiert. Kindobjekte können über den Dialog auch als statisch gesetzt werden.
Baking der Lichtquellen

Zurücksetzen des baked Lighting.

Starten des baking-Prozesses.
Um die Lichtquellen in die Texturen zu baken muss im Lighting-Funktionsfenster im Reiter >Scene< die Schaltfläche >Generate Lighting< geklickt werden. Im Normalfall sind die vorgegebenen Einstellungen ausreichend.
Sollte das Ergebnis des Bakings nicht ausreichend sein, sollten die statischen Lichtquellen angepasst werden. Anschließend kann der vorherige Bake unter >Clear Baked Data< im Reiter >Scene< des Lighting-Funktionsfensters gelöscht werden und ein neuer Bake durgeführt werden.
Vorbereiten für Echtzeitlicht (optional)

In manchen Anwendung ist dynamisches Licht notwendig, damit bestimmte Effekte kommuniziert werden können. Ein Beispiel hierfür ist ein brennendes Objekt, welche die Umgebung ausleuchten soll. Damit dieser Effekt auf allen Endgeräten funktioniert, muss die folgende Einstellung angepasst werden:
In der Menubar >Edit< // >Project Settings...< // >Quality< alle Settings auf "High" setzen.