You are currently in guest mode. Log in or register to fully use the HOOU platform.
Your advantages when registering:
- You can use chat and forums to exchange ideas.
- We will confirm your participation in some courses.
Extended Realities - VR in performativen, interaktiven und musikalischen Kunstformen
Topic outline
-
-
Die Nutzung von Virtual Reality (VR) als Technik und die Virtualität als ästhetischer Diskurs sind gesellschaftlich und auch in der Kunstwelt zu sehr präsenten Themen geworden. Die Alltageswelt, unsere Kommunikation und Interaktion spielt sich zunehmend an der Schnittstelle von einer realen physischen und einer digitalen, simulierten Welt ab. Unter dem Schlagwort Extended Realities (XR) kommt es außerdem zu einer immer stärkeren Verstrickung dieser Sphären. Aus dieser Omnipräsenz ergibt sich ein zunehmender Auftrag für die Künste diesen Aspekt zu thematisieren und abzubilden. Der technische Fortschritt ermöglicht zu diesem Zeitpunkt eine verbesserte Integration in performative und installative Kontexte.
Darstellende, narrative, dramaturgische und musik-performative Ansätze sind per Definition immer auch Fiktion, Simulation und Abstraktion. Ebenso lassen sich auf inhaltlicher und philosophischer Ebene auch Aspekte unseres Lebens auf Artifizilität, Konstrukivität und damit auch Virtualität hinterfragen. Die künstlerische Praxis stellt hier also ein Werkzeug dar diese Techniken nicht nur einfach zu benutzen, sondern sie als Metapher oder Werkzeug zu nutzen. Darüber hinaus kann in diesem Kontext das Interface, die Verschaltung, das Embodiment, die Simulation zum Gegenstand der künstlerischen Forschung werden.
Im Bereich Gaming existiert online bereits ein umfangreiches Angebot an technischen Lösungen – bedeutend weniger aber zu einer gezielten Integration für künstlerische Projekte. Gerade hier kann das Angebot einen neuen Schwerpunkt setzen. Mit der Bereitstellung von Skripten, Anleitungen, Case Films und Projektdateien ist außerdem ein Startpunkt für praktische Arbeit gelegt. Es soll im Rahmen dieses Moduls explizit Techniken entwickelt, diskutiert und erprobt werden, welche VR und XR im Kontext einer Bühnensituation nutzbar machen. Zentral hierbei sind die Fragen, wie das Publikum eingebunden wird; wie die Performenden mit den Inhalten interagieren; wie virtuelle Körper dargestellt werden und wie Musik, VR, Licht und andere Gewerke miteinander verbunden werden können.
Ergänzt werden soll das Angebot durch inhaltliche, künstlerische und ästhetische Impulse in dem Gebiet, welche über eine technische Anwendung hinausgehen und die Potenziale dieser Ansätze darstellt. Hier stehen Elemente der Interaktion, Philosophie, Dramaturgie und Ästhetik im Vordergrund.
-
-
-
Einrichtung des Headsets
- Für die Einrichtung des HTC-Headsets am PC muss zunächst Steam und anschließend SteamVR installiert werden.
- Als nächstes müssen die Basisstationen (mindestens 2) aufgebaut bzw. aufgestellt werden. Eine Anleitung dazu gibt es hier. Tipps für die Ausrichtung der Basisstationen gibt es hier.
Außerdem sollte bei der Einrichtung überprüft werden, ob die Basisstationen auf dem neusten Software-Stand sind und ggf. geupdatet werden:
Nun kann das Headset an den PC angeschlossen werden. Eine detaillierte Anleitung dafür gibt es hier.
Kabellose Inbetriebnahme des Headsets
Wenn das Headset kabellos betrieben werden soll, muss zusätzlich der VIVE Kabellos-Adapter installiert werden. Eine Anleitung dafür gibt es hier. Die nötige Software für den Adapter ist ebenfalls online verfügbar.
WICHTIG: Für die Nutzung des VIVE Kabellos-Adapters ist ein Desktop-PC mit einem freien PCIe-Slot nötig!Verbindung des VIVA Trackers mit dem System
Abschließend müssen nun die VIVE Tracker mit dem System verbunden werden: Anleitung & Updates
Um die VIVE Tracker später mit der Unreal Engine nutzen zu können, müssen die Tracker jeweils einem Körperteil zugewiesen werden. Die Tracker werden in SteamVR zugeordnet. Dafür muss wie in den beiden folgenden Screenshots vorgegangen werden:edu sharing object
edu sharing object
-
-
-
Beim erstmaligen Starten der Unreal Engine (Version 5.2. oder höher) muss ein neues Projekt angelegt werden. Dieses Projekt soll als Grundlage für die Umsetzung der VR-MotionTracking-Anwendung dienen.
edu sharing objectAls Basis wird das Virtual Reality Preset von Unreal genutzt. Dies befindet sich unter dem Reiter „GAMES“. Der Pfad für das Projekt sowie ein entsprechender Name kann eingestellt werden. Über einen Klick auf „Create“ wird das Projekt für uns erstellt und geöffnet. Beim ersten Öffnen der Projektdatei können erhöhte Ladezeiten auftreten, da im Hintergrund noch einige Shader kompiliert werden müssen.
B.1. Basic Projekt-Einstellungen
B.1.1. Plugins und Projekteinstellungen
Sobald das Projekt vollständig geladen und geöffnet wurde, müssen zunächst einige grundlegende Einstellungen vorgenommen werden.
Für die Nutzung vom HTC Headset sowie den HTC Trackern müssen unterschiedliche Plugins aktiviert werden. Außerdem wird ein Plugin für die Control-Rig Funktion sowie die OSC-Integration benötigt.
- Öffnen der Plugins-Einstellungen unter: Edit – Plugins
- Notwendige Plugins:
o OpenXR
o OpenXRViveTracker
o Control Rig
o OSC (Open Sound Control)
Nachdem die Plugins aktiviert wurden, muss die Unreal Engine einen Neustart durchführen. Jetzt ist das Projekt so eingestellt, dass die VIVE Tracker genutzt und OSC-Daten empfangen sowie gesendet werden können. Außerdem ist das ControlRig nun verfügbar (weitere Informationen zur Einrichtung in Abschnitt B.4.).
B.1.2. VR-Pawn
Das Pawn-Blueprint ist die zentrale Komponente für die Umsetzung der Anwendung. Als Grundlage wird das VRPawn-Blueprint genutzt, dass sich im VRTemplate-Ordner befindet. Dieses Pawn beinhaltet bereits einige wichtige Voreinstellungen, sodass es gut für einen schnellen Einstieg genutzt werden kann. Es befindet sich im Content Browser:
All – Content – VR Template – Blueprints
- Für die weitere Bearbeitung sollte eine Kopie vom VRPawn erstellt werden
- VRPawn auswählen, STRG+D
- Kopie vom VRPawn umbenennen, individuellen Namen geben, zB. VRPawn_MotionTracking
Es werden unterschiedliche Components benötigt, um das VRPawn so zu konfigurieren, dass es für das FullBody-MotionTracking zur Steuerung eines Avatars genutzt werden kann (mehr dazu im Abschnitt B.1.4. sowie B.5.)
B.1.3. GameMode Setup
Sobald ein neues VRPawn-Blueprint erstellt wurde muss dieses als Default-Pawn eingestellt werden, damit die Anwendung erkennt, welcher Pawn vom Controller beim Starten der Anwendung übernommen werden soll.
- Neuen VRPawn als Standard einstellen in Project-Settings
- Edit – Project-Settings – Maps&Modes
- Default Pawn Class
- Neuen VRPawn im Drop-DownMenü auswählen
- Project Settings minimieren
edu sharing objectWenn für die Anwendung individuell eingestellte Klassen erstellt werden, können diese in diesem Bereich der Project-Settings verknüpft und für den Start der Anwendung übernommen werden.
B.1.4. Integration der Tracker
In Teil A wurde bereits erläutert, wie die Tracker in Steam VR eingerichtet und für die Nutzung in Unreal vorbereitet werden. Für jeden der fünf Tracker wird im VRPawn-Blueprint eine Motion-Controller-Component hinzugefügt. Dies funktioniert folgendermaßen:
- VR-Pawn-Blueprint öffnen
- In der Components-Übersicht auf „Add“ klicken
- Nach der „Motion-Controller“-Component suchen und durch einfachen Klick hinzufügen
- Motion-Controller-Component 4x duplizieren (STRG+D) und entsprechend den Tracker-Positionen umbenennen
edu sharing object
- Für jede einzelne Motion-Controller-Component eine Verlinkung zur Zuweisung in SteamVR herstellen
- Component auswählen à Details à Motion Source
- Beispiel: Tracker_RightFoot_5 Motion-Source „RightFoot“ festlegen
B.2. Basic Scene Setup
Neues Level erstellen im Content Browser
- Rechtsklick im Content Browser
- Level
- Neuem Level einen Namen geben
edu sharing object
Neues Level als Standardlevel einstellen in Project Settings:
- Edit – Project Settings – Maps&Modes
- Default Maps Menü ausklappen
- In Editor Startup Map sowie Game Default Map jeweils neu erstelltes Level auswählen
B.3. Import “Standard” Skeletal Mesh als Standard-Avatar
edu sharing object- Im Content Browser „Add“ à „Add Feature or Content Pack…“ à Third Person à Add to Project
- Verschiedene „Standard“ Skeletal Meshes können jetzt im Pawn als Mesh für den Avatar genutzt werden
B.4. Control Rig für Standard-Avatar erstellen
- Skeletal Mesh für die Nutzung als Mesh für den Avatar auswählen
- Die „Standard“ Skeletal Meshes befinden sich in All – Content – Characters – Mannequins – Meshes
edu sharing objectIm weiteren Verlauf wird das Skeletal Mesh „SKM_Quinn“ verwendet.
Ein Control Rig ist eine Funktion, die in Unreal mithilfe eines Plugins integriert ist. Diese Funktion ermöglicht es, ein Skeletal Mesh mit einer komplexen Rig/Skelett-Struktur mit wenigen „Controls“ zu bewegen. Besonders hilfreich sind dafür die IK (inverse Kinematik)- Nodes, da somit alle Teile des Körpers auf Basis simpler Regeln in Abhängigkeit zu den Controls mitbewegt werden.
Sobald also die Controls mithilfe der separaten Tracker angesteuert werden können, ermöglicht dieses Setup eine indirekte Echtzeit-Steuerung des virtuellen Körpers vom Avatar. Die Positionen der Controls im Control-Rig entsprechen somit idealerweise den Positionen der Tracker, die mithilfe der Straps am Körper der PerformerIn befestigt wurde.
Ein neues Control Rig kann für ein fest zugewiesenes Skeletal Mesh hinzugefügt werden, da die Struktur des Rigs vom Skeletal Mesh fest mit der Struktur des Control Rigs verknüpft wird.
edu sharing object- Rechtsklick auf das Skeletal Mesh
- Create
- Control Rig
- Control Rig entsprechend benennen, z.B. SKM_Quinn_CtrlRig
Zusätzlich erklärendes Video zum Erstellen des ControlRigs:
Video B_4
Die entsprechenden Nodes können jeweils im Blueprint vom Control Rig per Rechtsklick gesucht und hinzugefügt werden. Die Pole-Vektoren müssen, nachdem sie als Child-Objekte des Pelvis-Contols hinzugefügt und korrekt platziert wurden, noch in die Forward-Solve-Struktur eingebunden werden.
Aus Sicht des Avatars:
1. Pole Left Foot: Vorne Links
2. Pole Right Foot: Vorne Rechts
3. Pole Left Hand: Hinten Links
4. Pole Right Hand: Hinten Rechts
Per Get-Transform-Node können die Transform-Daten der Pole-Controls abgegriffen und als Vector-Input für die BasicIK-Nodes verfügbar gemacht werden.
edu sharing objectB.5. VR Pawn Blueprinting
B.5.1. Control Rig für Live-Tracking integrieren
- Custom VRPawn Blueprint öffnen
- Control Rig Component hinzufügen
edu sharing object- Control Rig Component auswählen und in Details mit neu erstellter Control Rig Class verknüpfen
- Control Rig – Control Rig Class - SKM_Quinn_CtrlRig auswählen
edu sharing objectIm folgenden Video wird gezeigt, wie das erstellte ControlRig mit dem VRPawn verbunden werden kann:
Video B_5_1
Für alle Motion-Controller-Components sowie auch die Kamera ist es sehr sinnvoll jeweils ein Child-Object zu erstellen, welches als transformiertes, repräsentatives Objekt für die jeweilige Komponente genutzt werden kann. In diesem Fall wurde dafür das simples Static Mesh Object benutzt. Dies ist sehr hilfreich, da so jeweils die Default-Rotation sowie bestimmte Offsets zwischen den tatsächlichen Tracker-Positionsdaten und deren Nutzung innerhalb des ControlRig-Systems eingestellt werden können. So können die Transform-Daten des transformierten Child-Objekts genutzt werden, da es sich ja ansonsten aufgrund der Parent-Child-Hierarchie mit dem Tracker, also der MotionController-Komponente „mitbewegt“.
Im Beispielbild sowie im Video werden die Hände und somit sämtliche Armbewegungen mittels zwei VIVE-Trackern gesteuert, die jeweils nah am Handgelenk befestigt sind. Die Controller können ebenfalls – und auch zusätzlich – als MotionController-Komponente im VRPawn eingebunden und genutzt werden. Dies bietet sich beispielsweise gut an, um die Controller in eine Performance einzubinden und ein virtuelles Objekt daran zu binden, mit dem die PerformerIn interagieren kann.
edu sharing objectB.5.2. Aktivieren / Deaktivieren Live-Tracking
Im VRPawn-Blueprint können nun viele weitere Features hinzugefügt werden, wie beispielsweise das Aktivieren und Deaktivieren des Live-Trackings.
In diesem Beispiel wird ein starrer Body Dummy eingeblendet, sobald das Tracking deaktiviert wird. Auch die Sichtbarkeit des getrackten Body Meshes wird entsprechend umgeschaltet.
edu sharing object
Die Bool-Variable „Set Full Body Tracking Active“ kann nun per Branch-Node die Verbindung des Forward-Solve-Events im VRPawn-Blueprint kontrollieren:
edu sharing object
-
-
-
Im Folgenden wird beschrieben, wie eine einfache OSC-Kommunikation mit der Unreal Engine erstellt werden kann. Wichtig hierfür ist, dass das OSC-Plugin in der Unreal Engine aktiviert wurde. Um eine solche OSC-Kommunikation zu testen, kann beispielsweise das Programm TouchDesigner genutzt werden.
C.1. OSC-Receiver in Unreal-Projekt erstellen
1. Für die OSC-Kommunikation muss zunächst ein neues Blueprint erstellt und geöffnet werden.
2. Der erste Schritt ist die Erstellung eines OSC-Servers, der eingehende OCS-Nachrichten empfangen kann. Dafür muss zunächst ein CreateOSCServer-Node eingefügt werden, welches mit dem BeginPlay-Node verbunden werden muss. Das Feld Receive IP Address kann freigelassen werden und als Port kann ein beliebiger Wert gewählt werden, üblich wäre z.B. 8000. Wichtig ist hier, dass der Haken bei Start Listening gesetzt wird.
3. Der ausgegebene Wert (Return Value) muss eine Variable des Typs OSCServer zugewiesen werden. Dafür einen Rechtsklick auf Return Value machen und Promote to Variable auswählen.
4. Aus dem Return Value-Pin des neu erstellten Set-Nodes muss anschließend eine neue Verbindung gezogen werden, an dessen Ende ein BindEventtoOnOscMessageReceived-Node gesetzt werden muss.
5. Das Ganze sollte wie folgt aussehen:
edu sharing objectC.2. OSC-Kommunikation zwischen Max und Unreal einrichten
1. Um OSC-Nachrichten empfangen zu können, muss ein passendes Event erstellt werden, welches beim Empfang neuer OSC-Nachrichten ausgelöst wird.
2. Um ein solches Event zu erstellen, muss aus dem Event-Pin des BindEventtoOnOscMessageReceived-Nodes eine neue Verbindung gezogen werden. Anschließend kann an dessen Ende ein neues Custom Event erstellt werden.
edu sharing object3. Da nun OSC-Nachrichten empfangen werden können und der Empfang ein Event auslöst, müssen die OSC-Nachrichten im nächsten Schritt konvertiert werden. Hierfür ist zunächst das Node GetOSCMessageAddress notwendig.
4. Die extrahierte OSC-Adresse kann mit dem Node ConvertOSCAddressToString in einen String konvertiert werden. Dieser könnte dann beispielsweise mit dem Node PrintString auf dem Bildschirm ausgegeben werden. Das Ausgeben der OSC-Adressen bzw. der OSC-Nachriten auf dem Bildschirm ist eine gute Möglichkeit, um die empfangenen Nachrichten zu überprüfen.
5. Im Folgenden ein Beispiel, wie das Ganze nun aussehen könnte:
edu sharing objectC.2.1.1. Unterstützte Datentypen
6. Um nun auch die Nachricht selbst auslösen und verarbeiten zu können, müssen die entsprechenden Werte aus den Nachrichten extrahiert werden. Im Folgenden sind die entsprechenden Nodes für Integer, Floats und Strings zu sehen:
edu sharing objectC.2.1.2. Parameter von Objekten in der Szene steuern
7. Der folgende Screenshot zeigt ein Beispiel, wie die empfangenen OSC-Nachriten verarbeitet werden können. In diesem Fall werden Integer-Werte empfangen, mit denen die Farbe des Sonnenlichts verändert werden.
edu sharing object
-
-
-
D.1.1. Anlegen unterschiedlicher virtueller Szenen in Unreal
Innerhalb des bereits erstellten Levels können verschiedene Szenen miteinander kombiniert werden. So können Ladezeiten vermieten werden, die anfallen würden, wenn für jede einzelne Szene ein neues Level angelegt werden würde. Da in einer VR-Anwendung ohnehin stets beachtet werden muss, dass eine gewisse Anzahl der 3D-Objekte bzw. Polygone in einem Level nicht überschritten wird, reicht ein Level innerhalb der Entwicklungsstruktur von Unreal aus, um ein oder mehrere Szenarien miteinander zu kombinieren. Für größere Produktionen wäre auch das Kombinieren mehrerer Levels möglich. Für dieses Beispiel reicht jedoch ein Level vollkommen aus.
Im Folgenden soll erläutert werden, wie mehrere 3D-Objekte zu einer 3D-Szene kombiniert und dann als Ganzes ein- und ausgeblendet werden können. Unreal bietet die Möglichkeit, mit dem sogenannten „Actor“-Blueprint eine Art Container bereitzustellen, der mit einer Vielzahl an unterschiedlichen Komponenten gefüllt werden kann. Die verschiedenen Komponenten bestehen aus unterschiedlichen Datentypen. Für eine 3D-Szene werden mehrere separate Static Mesh Components benötigt.
Neuen Actor erstellen:
- Im Content Browser: Rechtsklick à Blueprint Class à Actor
- per Doppelklick auf das neu erstellte Actor-Blueprint klicken, um Blueprint zu öffnen
- Links im Component-Fenster können über „Add“ neue Komponenten hinzugefügt
- Im Beispielbild sind einige Static Mesh Components in der Übersicht aufgelistet, die jeweils eine Verlinkung zu einem Static Mesh Objekt (3D-Objekt) beinhalten
- Per Drag-and-Drop können bereits vorhandene Static Mesh Objekte aus dem Content-Browser in das Components-Fenster hinzugefügt werden. Dann werden automatisch entsprechende Komponenten erstellt inklusive einer korrekten Verbindung zum Objekt.
- Der neu erstellte Actor kann per Drag-and-Drop aus dem Content Browser in das Level eingefügt und platziert werden
edu sharing objectSo können 3D-Objekte sehr effizient gruppiert und zu verschiedenen Szenen innerhalb eines Levels angeordnet werden.
D.1.2. Blueprinting: Switchen zwischen unterschiedlichen Szenen
Sobald die unterschiedlichen Szenen als Actor angelegt wurden, können diese separat voneinander ein- und ausgeblendet werden. Im Details-Panel des Actors kann eingestellt werden, ob der Actor auch im Play-Mode sichtbar sein soll. Diese Einstellung befindet sich unter dem Reiter „Rendering“ und heißt „Actor Hidden In Game“.
edu sharing objectSobald ein Actor während der laufenden Anwendung ein- bzw. ausgeblendet werden soll, wird eine entsprechende Funktion benötigt, die dies ermöglicht. Dafür nutzen wir die Blueprint-Nodes innerhalb des Actor-Blueprints.
- Blueprint des Actors öffnen
- Event Graph öffnen
edu sharing objectInnerhalb des Event Graphs können neue Node-Strukturen angelegt werden, die während der laufenden Anwendung ausgeführt werden. Das „Event BeginPlay“ ist ein Event, das in jedem Event Graph nur ein einziges Mal vorkommt und es wird ausgeführt, sobald die Anwendung gestartet wird. Das „Event Tick“ ist ebenfalls nur ein einziges Mal vorhanden und es wird zu jedem Tick, also einmalig pro Frameberechnung, aktiviert. Besonders rechenintensive Funktionen sollten also nur mit Bedacht per Tick ausgeführt werden. Eine besonders nützliche Funktion ist allerdings das Anlegen eigener, sogenannter „Custom Events“. Für das Ein- und Ausblenden der jeweiligen Actor kann so über eine simple Node-Struktur jeweils ein eigenes Event angelegt und angesteuert werden.
- Rechtsklick im Event Graph
- Search for „Custom“
- Add Custom Event…
- Zwei Custom Events anlegen, benennen und anordnen
- Execution Pin per Drag and Drop erweitern, neuen Node „Set Actor Hidden In Game“ hinzufügen
edu sharing objectDiese Custom Events können nun beispielsweise per OSC in Echtzeit getriggert werden (siehe Kapitel 2.1.).
D.2. Timing / Struktur des Stückes
D.2.1. Level-Sequences als Cues anlegen
Für das Anlegen einer VR-Performance ist es sehr wahrscheinlich, dass zeitlich sequenzierte Veränderungen der 3D-Umgebung benötigt werden. Wie verschiedene Parameter bzw. Objekte per OSC angesteuert und verändert werden können, wurde bereits thematisiert. Sobald jedoch zeitlich sehr klar strukturierte Veränderungen der Objekte angedacht sind, können auch Level-Sequenzen sehr hilfreich sein, um Parameter in einem festgelegten Ablauf zu verändern – mit einem klassischen Key-System, wie auch aus anderer Editing-Software bekannt.
Mehrere Level-Sequenzen können nacheinander aber auch parallel abgespielt und gesteuert werden. Unterschiedliche Cues in einem Stück können auf verschiedene Level-Sequenzen aufgeteilt und gut planbar nacheinander, beispielsweise per OSC, getriggert werden.
- Klick auf Sequenz-Symbol rechts vom Play-Button
- Add Level Sequence
- Sequenz benennen und in neuem Order im Content Browser abspeichern
edu sharing objectNeue, in diesem Fall noch leere, Level-Sequenz beliebig oft duplizieren, je nach Anzahl des Cues.
Cue-System erstellen:
Video D_2_1
D.2.2. Parameter von Objekten in der Szene steuern
….
Video D_2_2
D.2.3. Blueprinting: Triggern von Cues mittels OSC
…
Video D_2_3
D.2.4. Blueprinting: Triggern von Cues mittels Overlap-Events/Kollision
…
Video D_2_4
-