Wenn man für das Rift entwickeln möchte, steht man als erstes vor der Frage: Welche Engine soll man benutzen? Neben dem Unreal Development Kit (UDK) greifen viele zur Unity Engine. Sie ist einfach zu bedienen, unterstützt viele Programmiersprachen und das größte Argument ist wahrscheinlich: Mit dem Developer Kit erhielten die meisten einen Gutschein für 4 Monate Unity Pro kostenlos. Doch was passiert nach den 4 Monaten? Hier zeige ich euch wie man auch ohne Unity Pro für das Rift entwickeln kann.

Das Tutorial ist veraltet! Der beschriebene Umweg funktioniert nicht mit aktuellen Unity Versionen.

Welche die Letzte funktionierende Versionsnummer ist, weiß ich leider nicht. 4.2.3 wäre möglich (ohne Gewähr)

Um mit Unity für das Rift entwickeln zu können, benötigt man derzeit leider noch Unity Pro. Denn nur diese Pro- Version unterstützt die benötigten Posteffect Shader, die das Spiel für die Rift Linsen verzerren. Um dies zu vermeiden, werden wir einen Trick verwenden, den die bekannten „3rd Party Oculus Treiber“ ebenfalls verwenden: Wir werden die Posteffect Shader in das Spiel injizieren. Das klingt nun vielleicht kompliziert, ist aber im Endeffekt ganz einfach. Bevor die Frage aufkommt: Für unsere Lösung wird es nicht nötig sein zuvor Programme wie VorpX oder ähnliches zu starten.

Wie funktioniert’s? Ganz einfach: Wir rendern durch Unity das Bild als Side By Side 3D Content und nutzen dann eine modifizierte Vireio Perception dll und eine Shader Datei, die lediglich per Drag and Drop eingefügt werden müssen um die korrekte Verzerrung für das Rift zu erhalten.

Schritt für Schritt:

Downloads:

D1: Unity 3D Download

D2:  „Oculus Unity Tuscany Demo“

D3: „Unity 4 Pro Integration“

D4: OculusUnityIntegration_Bloculus_de.zip (falls SDK 0.2.5 noch aktuell, siehe 3.0) Aufgrund eines Bugs entfernt.

D5:  UnityRiftWarp_v0_1b.zip

D6: optional: Demo Spiel mit der Unity Free Implementierung

Vorbereitung:

1.1. Ladet euch Unity3D sowie alle anderen nicht optionalen Downloads

1.2. Installiert Unity (D1), bei der Frage nach der Lizenz bzw. dem Serial, wählt ihr, dass ihr Unity Free aktivieren möchtet.

1.3. Legt ein neues Projekt an und erstellt eine Szene (oder ladet eine fertige Szene aus dem Unity Asset Store)

Einrichten:

2.1 Nun benötigt ihr die neuste Version der Unity Implementierung. (D2)

2.2 In der „ovr_unity_0.X.Y_demo.zip“ findet ihr unter „Win_OculusUnityDemoScene_Data/Plugins/“ eine oder mehrere Dll Dateien, diese müssen in das „Editor“ Verzeichnis von Unity kopiert werden.
Falls ihr kein anderes angegeben habt, ist dies: „C:\Programme (x86)\Unity\Editor„.

In Unity:

3.0 Sollte das SDK 0.2.5 noch aktuell sein, könnt ihr anstelle der „Unity 4 Pro Integration“ auch mein Asset (D4) benutzen und die Schritte 3.4 bis 3.6.2 überspringen.

3.1 Verwendet ihr die „Unity 4 Pro Integration“ müsst ihr aus der „ovr_unity_0.X.Y_lib.zip“ (D3) den Ordner „OculusUnityIntegration“ öffnen und das sich darin befindliche Paket „OculusUnityIntegration.unitypackage“ mittels Doppelklick öffnen und in Unity importieren.

3.2 Wenn ihr meine Assets (D4) verwendet: Einfach das Zip entpacken und mittels Doppelklick auf die „OculusUnityIntegration_Bloculus_de.unitypackage“ das Paket öffnen und in Unity den gesamten Inhalt importieren. Die folgenden Schritte können dann bis einschließlich 3.6.2 übersprungen werden!

3.3 War der Import erfolgreich, sollte in dem Editor unten links unter „Projekt“ ein Ordner „OVR“ aufgeführt sein. -Ggf. muss der Reiter „Projekt“ einmal angeklickt werden. Über den Pfeil daneben kann der OVR Ordner expandiert werden. Macht dies und wählt anschließend den Ordner „Scripts“ aus.

3.4 In dem Auswahlfenster daneben sollten nun die OVR Scripte aufgeführt werden, öffnet die „OVRMainMenu.cs“ mit einem Doppelklick.

scripts

3.5 Es öffnet sich Mono. Hier müsst ihr bis zur Methode „void OnGUI()“ herunter scrollen (evtl. Suche benutzen).

3.6 Jetzt müsst ihr den kompletten Inhalt der Methode, bis auf die Zeile „Crosshair.OnGUICrosshair();“, auskommentieren:

3.6.1 Fügt dafür hinter der Schweif-Klammer das Zeichen für den Kommentar-Anfang ein:

	// * * * * * * * * * * * * * * * * *
	// OnGUI
 	void OnGUI()
 	{	
		/* <-- Hier beginnt der Kommentar-Block
		// Important to keep from skipping render events
		if (Event.current.type != EventType.Repaint)
			return;

Scrollt nun bis zur Zeile „Crosshair.OnGUICrosshair();“ und fügt in der Zeile davor das Zeichen für das Kommentar- Ende ein.
Alle anderen Zeilen nach dieser Zeile sollten ebenfalls auskommentiert werden.

			GUIShowVRVariables();
		}
		Hier endet der Kommentar-Block ->*/
		Crosshair.OnGUICrosshair();
		/* <----
		// Restore active render texture
		RenderTexture.active = previousActive;

		// ***
		// Restore previous GUI matrix
		GUI.matrix = svMat;
----> */
 	}

3.6.2 Mit Strg + S oder File -> Save speichern.

3.7 Zieht nun ein „OVRPlayerController“-Prefab in eure Scene (zu finden im Projekt Exlporer unter OVR -> Prefabs

3.8 Mittels des Play Buttons oben kann die Scene gestartet werden. Ihr solltet ein Side by Side Bild ohne Linsen- Korrektur sehen:

Side By Side

3.9  Nun kompilieren wir das Spiel zu einer Exe: File -> Build Settings:
3.9.1 Mit einem Click auf „Add Current“ fügt ihr die aktuelle Scene dem Build Process hinzu. Als Plattform sollte „PC, Mac und Linux Standalone“ ausgewählt werden.
3.9.2 Mit einem Click auf „Build“ kann man die Exe erstellen lassen.

Injection:

4.1 Die letzten Schritte! Entpackt die UnityRiftWarp_v0_1b.zip (D5), sie enthält eine modifizierte Vireio Perception dll und eine Shader Datei.

4.2 Die beiden Dateien „WarpRift.fx“ und „d3d9.dll“ aus der Zip müssen nun lediglich zu eurer Exe in den Ordner kopiert werden.

4.3 Startet ihr nun die Exe sollte die für das Rift typische Linsen Verzerrung vorhanden sein!

4.3.1 Stürzt das Spiel nach dem Unity Logo ab, wählt im Launcher einen höheren Grafik Modus, bei dem V-Sync aktiviert ist. („Good“ oder besser)

Ende!

Unbenannt-1

Das war’s! Es ist zwar ein wenig aufwendiger einzurichten und man kann in Unity nur ohne die Verzerrung debuggen, doch im Vergleich zu $1500 ist dies doch ein geringer Preis?
Ich hoffe alles war verständlich. Fragen können gerne im Kommentar- Bereich oder im Forum gepostet werden!

Danke an die MTBS User boone188 und Baristian6 für die modifizierte Vreio Dll sowie die Shader Datei.

Viel Spaß!

Tagged: , , , ,

Geschrieben von Daniel Korgel

Ich bin Daniel Korgel und bin ein selbständiger Software Entwickler im Bereich Virtual Reality. Ich programmiere in meiner Freizeit schon sehr lange und bin gut unterwegs mit C# (& .Net), Java, HTML, PHP und MYSQL. Kenntnisse in C, C++ und Assembler sind aber auch vorhanden. Zudem arbeite ich derzeit auch an meinem Bachelor. In meiner Freizeit sammle ich alte Spielekonsolen und bin auch hin und wieder im Skatepark anzutreffen. Twitter: @DakorVR , @Bloculus_de| Xing: xing.com/profiles/Daniel_Korgel

This article has 9 comments

  1. sander Antworten

    Wenn ich sie Szene builde und ausführe ist einfach alles schwarz.
    Im Unity Inspector selbst funktioniert es einwandfrei.

    Gibt es da vll. Abhilfe ?

  2. sander Antworten

    Ok es muss wohl an der d3d9.dll liegen die ich in den selben Ordner packe wo die .exe liegt.
    Wenn ich die dll lösche funktioniert es einwandfrei, mit der dll bleibt der schwarze Bildschrirm.

    • Daniel Korgel Antworten

      Diese dll ist für die Verzerrung des Bildes zuständig und somit eigentlich notwendig. Ich hatte noch keine Gelegenheit diese kostenlose alternative mit der neusten Unity Version zu testen. (Ich selbst nutze die Pro Version, welche man als Student übrigens deutlich günstiger bekommt). Wichtig ist jedenfalls dass du in den Build Settings nicht den Haken bei „use DirectX 11“ hast, denn die dll funktioniert nur mit DirectX 9. (File -> Build Settings -> Player Settings -> Other Settings -> use DirectX 11 Checkbox)

      • sander Antworten

        Danke für deine Antwort. Ich habe keinen Haken bei DirectX 11 drin. Allerdings kann ich die .exe nun ausführen nachdem ich in den build Optionen eingestellt habe „Architecture x86_64“. Nun gibts aber keine Verzerrung. Ich werden mal weiter schauen. Aber irgendwas scheint die dll zu hindern korrekt zu funktionieren.

        • Benni Antworten

          Bei mir ist es leider genauso. Spiel startet mit der DLL nur bei einem 64Bit-Build. Dann gibt es aber keine Verzerrung. Schade

  3. tim Antworten

    Since my german is not good enough to reply, here’s an English comment passing through:
    I have the same problem as those before me. A black screen shows when I run the build. Have tried with earlier versions of the oculus unity integrations, that did nog work either. Any idea which version of Unity you were using when this worked? I am using 4.3

    • tim Antworten

      I tried to run the demo game (D6), but that gave the same result, so I suspect that it is a hardware issue. The game creates a log file after failing. It starts like this:

      nitialize engine version: 4.2.2f1 (54f0fc09defb)
      GfxDevice: creating device client; threaded=1
      d3d: no D3D9 installed
      D3D9 initialization failed, trying OpenGL
      GfxDevice: creating device client; threaded=1

      Again, when removing the dll, it does work, but without distortion. Any ideas on what causes this problem would be greatly appreciated.

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert