Im Oculus-VR Forum, haben sich einige Entwickler zusammengefunden, die versuchen aus dem aktuellen Developer Kit die beste Bildqualität herauszuholen. Allerdings nicht wie viele andere durch Hardware-Mods, sondern durch Software. Hier stelle ich euch mal die Demos vor und zeige euch was ihr tun müsst, um das in eure eigenen Unity-Projekte einzubauen.

Der Trick die Auflösung der Spiele auf 1920*1080 zu stellen und dann die Rift Hardware das Bild runter skalieren zu lassen, um durch das höher berechnete Antialiasing zu erhalten, ist mittlerweile in der Szene weit verbreitet und wird auch von den meisten verwendet. Durch ein paar Änderungen in der Oculus Rift Unity Implementierung wird das ganze nun auf ein noch höheres Level gehoben:

Das normale Oculus Rift Bild
Das normale Oculus Rift Bild

Ohne zu tief ins Detail zu gehen, ist die Funktionsweise relativ einfach: Man rendert das Bild mit Antialiasing in einen deutlich höher aufgelösten Offscreen-Buffer, der für den Spieler nicht sichtbar ist. Die Technik dazu ist im Videospiel Bereich Gang und Gebe und nennt sich SSAA. Auch die Entwickler der Unity Engine haben vor einiger Zeit die Möglichkeit hinzugefügt solche Offscreen-Buffer zu verwenden. Zusammen mit dem Oculus Rift SDK funktioniert dies jedoch wiederum nicht. Zwar hat Oculus VR in der OVRCamera-Klasse bereits eine Implementierung mitgeliefert („CameraTextureScale“), diese ist jedoch aufgrund dessen, dass sie noch nicht korrekt mit allen Einstellungen funktioniert, deaktiviert.

Eine Demo die jeder ausprobieren kann, hat der User boone188 veröffentlicht:

Das selbe Bild unter Verwendung eines 4x größeren Buffers
Das selbe Bild unter Verwendung eines 4x größeren Buffers

Tuscana Demo SSAA von boone188 via Dropbox
(Der Download Link ist, aufgrund von eventuellen Updates der Originale von boone188, daher keine Garantie auf die Verfügbarkeit)

Die Demo könnt ihr einfach starten und mit den Tasten 1-5 die Größe des SSAA Buffers verändern und mit der Linken Maustaste SSAA komplett deaktivieren. 5xEnabled würde bei einer Auflösung von 1280*800 bedeuten, dass ihr einen Offscreen Buffer von 6400 x 4000 verwendet. Dies erfordert natürlich eine Grafikkarte die zum einen genügend Speicher, zum anderen aber auch über genügend Rechenleistung verfügt. Aktuelle Modelle sollten damit jedoch keine Probleme haben.

Durch das Rift betrachtet ist der Unterschied noch erheblich größer.
Durch das Rift betrachtet ist der Unterschied noch erheblich größer.

Wer SSAA in seinem eigene Projekt ausprobieren möchte, kann dies mittels dieser Klasse tun:
OVRCameraScaler.zip by boone188

Um SSAA zu aktivieren, muss lediglich das OVRCameraScaler Script als Componente zu den beiden OVRCameras (CameraLeft und CamraRight) hinzugefügt werden.

SSAACompnentDer Scale Factor sollte bei beiden Komponenten gleich sein, da ansonsten ein unscharfes Bild entsteht. Um einen Vergleich zu erhalten, bietet es sich jedoch an, den OVRCameraScaler nur auf einer der beiden Rift Kameras zu aktivieren und abwechselnd mit einem Auge das gerenderte Bild anzusehen.

Ein weiterer Ansatz ist anstelle von SSAA, MSAA zu verwenden. Dieser Ansatz ist aber noch sehr experimentell und führt bei einigen Grafikkarten zu unschönen Clipping Problemen mit den Schatten. Die neuste Version der Unity 3D Engine soll dieses Problem jedoch behoben haben.

Eine Version der Tuscana Demo mit MSAA, welche mit Unity 4.2 erstellt wurde, findet man hier:

Download MSAA Tuscana Demo von TeddyOk
(Der Download Link ist auch hier, aufgrund von eventuellen Updates der Originale von TeddyOk, daher keine Garantie auf die Verfügbarkeit)

Wer MSAA in seinem eigenen Projekt und mit der neusten Unity Engine testen möchte, kann dies mithilfe dieser Klasse tun:

TeddysOVRCamera3 von TeddyOk

Hier ist die Qualität jedoch von der Grafik-Einstellung des Projekts abhängig: (Good 1.35x, Fantastic 1.5x, Beautiful 2.0x)

Der Original Thread im Oculus VR Entwickler Forum.

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 6 comments

  1. Musti Antworten

    Danke für die Spitzenarbeit in dem Blog, mitlerweile schau ich jeden tag rein : ) wird sobald ich zuhause mal ausprobiert

    • Daniel Korgel Antworten

      In der Standard Ansicht von Unity befindet er sich auf der rechten Seite.
      Du musst dich allerdings zuerst oben links durch die Objekte in der Szene klicken.
      Wenn du die Standard Unity Scene geöffnet hast sollte die die Hierarchie so sein (Aus dem Kopf, Namen weichen ggf. ab):
      OVR Player Controller -> OVR Camera Controller -> Camera Left / Camera Right
      diese letzten beiden musst du anklicken und die Komponente hinzufügen

      • korun Antworten

        achso,du meinst die programme zum programmieren(unity)?weil ich bin nur ein user der demos usw.heisst also als nicht kenner von unity programmierung hab ich wohl probleme damit.

        • Daniel Korgel Antworten

          Hehe, ja exakt. Wenn du nur die Demo testen möchtest, dann lad dir einfach die fertige Demo im oben im Beitrag. Die Entwickler müssen diese SSAA Komponente in das Spiel einfügen, ein nachträgliches Einfügen durch den User ist nicht möglich ;)

Antworten

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