日常的に使うVRへ: 使い始めやすさと使い続けやすさ


この記事はOculus Rift Advent Calendar 2018の20日目です。

技術や実装の話からちょっと離れて、ここのところ考えていた話を。

VR元年と囃し立てられた2016年から3年近くが経ち、最近は市場の伸びが期待したほどの勢いではないのではないかという声も聞かれます。その一方、日本では特に5月に発売されたOculus Goがその低価格から大きく注目され、同じスタンドアローン型の本命として来年発売のOculus Questに期待がかかったりもしています。

また、去年後半から今年にかけては施設型VRやVTuberなど、末端のエンドユーザーに対して直接VR機材の所有を要求しないユースケースも大きく注目を浴びました。本記事ではあえて、「いかにしてより多くの人にVR技術を直接所有し、使用し、更には使用し続けてもらうか?」という問題を、「使い始めやすさと使い続けやすさ」という概念から考えていきたいと思います。

Continue reading

Oculus Unity Integrationクロスプラットフォーム開発ドキュメンテーション 私家訳版



この記事はOculus Rift Advent Calendar 2018の4日目です。

はじめに

先日11月15日、Oculus SDKの一部であり、Oculus公式のUnity統合であるOculus Integration (Oculus Utilities for Unity)の最新版1.31が公開されました。このバージョンの大きな新機能が、Oculus Integrationを使ったままHTC Viveの動作がサポートされる、クロスプラットフォーム開発機能です。

以前からSteamVR SDKはViveにネイティブ対応しているのに加えRiftをサポートしていましたが、今回の対応により、Oculus側のSDKを使用した場合も、両方のヘッドセットに向けた開発が(少なくともUnityにおいては)可能になります。

前述の通りSteamVR SDKはViveとRift両方に対応していますが、問題なのが、SteamVR SDKを使用した場合はそのままではOculus Storeへの提出ができないという点です(その逆、つまり今回のOculus SDKのクロスプラットフォーム機能を使って実装したアプリをSteamに出すのは問題ないはず)。また、注目度の高いOculus Goや今後登場するOculus QuestはOculus SDKでしか動作しないため、これらにも対応したい場合いずれにしてもOculus SDKを避けて通ることはできません。もちろん、移植は色々な要素が絡むため、こういった機能があってもボタン一発とまではいきません。しかし、なるべく同じ機能の再実装を避けながら、PC・スタンドアローンを含む多くのプラットフォームに対応するという点においては、本機能は便利に使えるのではないでしょうか。

以下はOculusデベロッパードキュメンテーションのクロスプラットフォーム開発についてのページの私家版翻訳となります。2019/6/19追記: Integration 1.38に合わせて更新
Continue reading

Oculus Rift/Gear VRアプリでローディング画面の視界端に見える黒枠を別の色にする



Oculus RiftやGear VRのVRアプリにおいて、ローディング画面などでレンダリングがリフレッシュレートに間に合わず、Asynchronous Timewarp (ATW)処理で擬似的に生成されたフレームが表示されることがあります。このような時、ATWが前の絵の位置をずらしているため、ずれた分だけ表示領域の端に黒い枠が見えてきます。

現状こちらの色を一発で変更する方法はないのですが、Compositor Layerという機能を応用することで色を変えることが可能です。Oculus Utilities for UnityではOVROverlayというコンポーネント名、Unreal EngineではStereo Layersという名前で組み込まれています。

「Compositor Layer (Timewarp Layer)」はOculus SDKに内蔵されている、一部のオブジェクトを通常のレンダリングと別枠で、出力直前に合成して表示することができる機能です。Compositor Layerを使って表示できるものは板ポリゴン(Quad)やキューブマップ、円筒など形状が限定されます1が、レンダリングのフレームレートではなくコンポジターのフレームレートで動作するため、通常のレンダリングが間に合っていない時であっても常時滑らかに表示されます。(名前が似ていますが、Unityのレイヤー機能とは無関係です。)

例えばUnityでは以下のように:

  • Main Cameraの子としてQuadオブジェクトを作成(位置は0,0,0
  • Quadオブジェクトのマテリアルとして白一色の画像テクスチャ(ここではwhitesquare)を貼り付けたマテリアルを指定
  • QuadオブジェクトにOVROverlayコンポーネントを貼り付ける
  • OVROverlayCurrent Overlay TypeUnderlayCurrent Overlay ShapeQuadに指定。これにより、通常のレンダリングが行われていない(はみ出した)領域にのみ、このQuadが表示されます。
  • OVROverlayの中にあるTextures変数に先程と同じ白一色のテクスチャを2箇所とも指定する

こうすると、ATWで生成されたフレームが見えている間も、普段ならはみ出して黒い背景が表示されている部分に白いQuadが表示されるため、背景の色が白に見えるようになります。2
なお、挙動の確認のためにわざとレンダリングの処理落ちを起こすには、Update()内にSystem.Threading.Thread.Sleep(500);などを入れたコンポーネントをどこかに貼っておくと起こせます。

このほか、Compositor Layerは処理落ち中でもガタつかない注視カーソルの実装や、画質が高いことを活かしたUI/テキスト/画像などの表示、またそもそもローディング画面自体をCompositor Layerで作るといった使い方もできます。Compositor Layerについてより詳しくはこちら。

Unity: https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovroverlay/
Unreal: https://developer.oculus.com/documentation/unreal/latest/concepts/unreal-overlay/


  1. 使える形状はPCとモバイルで多少異なります。QuadやCubemapは両方で利用可。 
  2. ただし、白色は人によってはチラツキを視認しやすくなるためお勧めしません。実際に変える場合は暗めの色をお勧めします。 

Oculus RiftとLiveViewRiftで全方位パノラマを再生する



2016/10追記: LiveViewRiftは現在更新されないまま大分古くなっており、現在のRift製品版やOculus Softwareに追随できていません。現在は全天球動画などを再生する場合、他のソフトの使用をお勧めします。

最近見つけたLiveViewRiftというソフトが非常に強力だったので紹介したいと思います。

LiveViewRiftはMac/Windows用の、Oculus Riftを使って動画や静止画、全方位・全天球映像等の再生ができるソフトです。

こういったソフトは他にも

等いくつかありますが、LiveViewRiftは非常に設定項目が柔軟で、およそどんな形式でデータが作られていても調整次第で表示が可能である点が大きな特徴です。RICOH THETA等で撮影された全天球画像はもちろんの事、例えば立体視でデータが左目と右目のファイルに分かれている場合や、パノラマが床・空・それ以外のファイルに分かれている場合であっても、複数のファイルをレイヤーとして同時に表示再生する事ができるので対応可能です。

なお、このソフトは現在Oculus RuntimeのExtendモードにのみ対応しています。Windowsの場合、Open Broadcaster Software等を併用しないと表示内容のミラーリングが出来ないので、ご注意ください。

スマホ差込形HMD Durovis Diveを使う


はじめに

ここのところは相変わらずOculus RiftをはじめとしたVRヘッドマウントディスプレイにご執心な日々ですが、最近はOculusに加えてDurovis Diveにも手を出しました。

Oculus Riftに見た目も構造も似ていますが、開発元が異なる別のHMDです。正確には、この枠の中にスマートフォンを差し込むことでHMDとして機能するようになるマウントパーツということになります。

マウント部を開いたDurovis Dive

マウント部を開いてスマホを外すとこんな感じ。

Oculus RiftとDurovis Dive

左がOculus Rift、右がDurovis Dive

利点と欠点

Oculus Riftを開発したPalmer Luckeyは、かつてFOV2GOというスマートフォンを活用したHMDの研究プロジェクトに関わっていました。その後彼は専用ハードを作る方向に転じ、掲示板などでもスマホの性能の限界を指摘していることからも、体験のクオリティを重視するのであればそれに合わせた専用のハードウェアを作らなければならないという意見のようです。

確かに、Durovis DiveはOculus Riftに比べて

  • 視野が80〜90度程度とやや狭い
  • 次期Oculus Riftの売りであるポジショントラッキングやLow Persistenceモードの搭載は望めない
  • 加速度計やジャイロのトラッキング頻度・精度は低い1
  • 実行環境がモバイルアプリなので、リッチな表現はできない
  • 本体がそのまま頭の前に来るので、首の向き以外での操作ができない

といった欠点があり、基本的にRiftよりも体験の質は劣ります。とはいえ、このアプローチはOculus Riftに勝る点もいくつかあります:

  • PCやケーブルいらずで単体稼働できる
  • スマホ次第で高解像度な画面が使える
  • 実行環境がモバイルアプリなので、Unity3D Free版でも開発できる2
  • なにより既にスマホを持っていればそのまま使えるので安い

特に最後の2点は重要です。実際、Oculus Rift本体やらゲーミングPCやらUnity Proやら3DCGソフトやらで、出費がとんでもない事になってる人を知っています。w
極端な話、Durovisを買わなくとも、FOV2GO方式のレンズとボール紙の即席HMD + Unity Freeで超低コストに最低限の開発スタートが可能です。


  1. iPhone 5Sでも加速度センサの更新頻度は秒間100回程度ですが、頭の動きに低遅延で追随することにこだわったOculus Riftのセンサ更新頻度は秒間1000回と桁違いの高さです。 

  2. Oculus Riftの場合はPCから外部ハードウェアに直接アクセスすることになるため、Unity Pro版ライセンスが必要です。