Unity+Oculus Rift開発メモ(Unity 5.1対応)

2015年07月08日

Oculus Riftと、PCやビデオカードの選定、Unityで対応ソフトウェアを制作するためのTipsなどについてまとめています。

更新履歴

現在Unity+Oculus Riftのソフト開発では、Unity 5.1から搭載されたVRサポート機能と、(補助的に)Oculus Utilities for Unityを使用するようになっています。旧Oculus Unity Integrationに関する記述は別のページに移しましたので、そちらをご覧ください。

(2015年7月8日)Oculus Utilities for Unityのリリースをひとまず反映
(2015年7月6日)「Oculus Rift向きのノートPCが欲しい」の表を更新
(2015年6月26日)「製品版はどうなるの?」に一件追加
(2015年6月24日)Unity 5.1.1p1の修正を反映、「不具合まとめ」を更新
(2015年6月19日)「PCの画面に別視点の映像を表示するには?」を更新

Oculus Riftについて

Oculus Riftって何?

Oculus Rift(オキュラス・リフト)は、Oculus VR社が開発中のバーチャルリアリティ用ヘッドマウントディスプレイです。比較的広視野な立体視が可能で、かつ、頭を動かして周囲を見回すことができるため、CGの世界に本当に入り込んだような体験ができるのが特徴です。適切に調整すれば、空間内の物体が現実と同じサイズ・同じ場所に見えて、手を伸ばせば触れそうに感じられます。とても面白いデバイスです。

2015年7月現在、開発者向けの二世代目のキット(DK2)が販売されています。製品版は2016年の第1四半期にリリース予定とのことです。

Unityを使うとOculus Rift対応アプリケーションが簡単に開発できます。

Oculusはラテン語由来で目の意味です。Riftは裂け目で、現実とバーチャル空間の裂け目というようなニュアンスがあるようです。

問題点はないの?

ヘッドマウントディスプレイを用いたバーチャルリアリティでは、VR酔いという乗り物酔いと同じような症状がしばしば発生します。酔いを引き起こす最大の原因は、頭や身体の動きと目で見ている光景のずれです。Oculus Riftでは、応答の速い有機ELディスプレイや、表示遅延を低減するさまざまな工夫を用いることでVR酔いをかなり低減できていますが、PCのセットアップや、アプリケーションの作り方が重要になります。

特にフレームレートの確保が必須で、左右両画面を常時最大フレームレート(DK2では75fps)で描画するために高性能なGPUが必要です。2015年現在では、最低でもGeForceやRadeonのミドルレンジ以上が必要になります。PC環境については下でもう少し詳しく触れていますので参照してください。

フレームレートを確保した上でも、視点の移動を抑えるなど、VR酔いしにくくするための制作上の工夫が必要になります。

あと、視野はかなり広いのですが(映像鑑賞のための普通のヘッドマウントディスプレイが45度程度なのに対して、Oculus Riftは約90~100度あります)、十分に広いとは言えないかもしれません。現実世界でゴーグルを装着しているような感じです。解像度も現在の片目あたり960×1080では広い視野を覆うのに十分ではなく、ディテールが見えづらいほか、ピクセルの境界で網目模様が見えます(網戸効果=screen door effect)。

また、多少重かったり、暑いと汗でレンズが曇ったりします。それと、DK2のレンズは適切なコーティングがされていないのかかなり傷が入りやすいです。さらに、次項で触れますが、メガネをかけたままでの装着が難しいです。

ただ、こうしたハードウェア上の問題は製品版ではいくらか改善されているようです(下の「製品版はどうなるの?」を参照)。

他には、原理的に、ヘッドマウントディスプレイを装着すると手元のキーボードやマウス、ゲームコントローラーなどが見えません。周囲が見えないため安全面の問題も生じます。また、VR空間内では自分の手が見えなかったり、身体を動かすと物体をすり抜けてしまったりします。こうした制約をコンテンツや運用でどうカバーするかが鍵になりそうです。おそらく最大の制約はVR酔いです。

視力が低くても大丈夫?

DK2にはA、Bの二種のレンズが付属していて、視力にあわせて交換できます。ただし、近視用のBレンズを使用すると視野がやや狭くなります。空間的な余裕がないため、メガネは基本的に入りません。小さいメガネならぎりぎり入りますので、Riftの横についているダイヤルで目とレンズの距離を広げて装着することもできますが、レンズが遠くなることで視野がだいぶ狭くなりますし、レンズの接触で傷がつくリスクが生じます。100%楽しみたければコンタクトレンズがベストなのではないでしょうか。

とりあえず、かなり目の悪い自分がBレンズ・裸眼で楽しめていますが、度が弱いのと、開発時にメガネをかけたりはずしたりするのが面倒なため、コンタクトレンズを検討中という感じです。

最新プロトタイプのCrescent Bayでもメガネの入りにくさはDK2同様でした。が、製品版のOculus Riftには交換できる複数の形状の内装が付属し、メガネをかけたまま着用できるそうです。期待です。

ちなみに、現時点では入手不可能ですが、ソニーのProject Morpheusはメガネが入りやすいです。また、サムスン・Oculus VR共同開発のGear VRは上部ダイヤルで視力にあわせてピントを調整できるようになっています。

どうすれば買えるの?

DK2は公式サイトから直接注文できます。送料と消費税・関税などがかかります。納期要確認です。自分のときは本体350ドル+送料75ドルで、FedExから別途2100円の請求が来ました。

なお、残念なことに特定の輸入代行業者を通しての購入でトラブルが発生していますので注意してください。Oculus VRから直接購入するのが一番です。

(2015年5月)製品版の発売が決まったため、DK2の供給が制限される可能性があるようです。開発に必要な場合は急ぎ入手したほうがいいかもしれません。

どうすればUnityで使えるの?

Unity 5.1では標準でOculus Riftをサポートしていて、「Virtual Reality Supported」の設定をオンにするだけで使用できます。

ただし現状やや癖がありますので、適宜最新情報を追う必要があります。

UnityのPro版が必要なんでしょ?

無料版で大丈夫です。

他にも対応しているゲームエンジンはある?

Unreal Engineが標準でOculus Riftに対応しています。重量級のゲームエンジンのため、フレームレート確保のために若干工夫が必要です。

参考になる記事などはある?/新情報は?

はてなブックマークでOculus RiftタグVRタグなどでちょくちょくブクマしていますので参照してください。また、FacebookにOculusデベロッパー助け合い所VR Japanというグループがあります。

なお、このページも適宜最新情報にあわせて内容を更新しています。

製品版はどうなるの?

とりあえず実物を体験してみたい

有志によるOculus Rift体験イベントが各地で開催されています。OcuFes公式サイトなどをチェックしてみてください。

秋葉原のG-Tune : GarageでDK2の常設展示が行われています。

また、家電量販店のGalaxy ShopでGear VRのデモが行われています。


PC環境について

Oculus Rift向きのPCが欲しい

左右両画面をレンダリングしなければならないこと、常時75fpsの確保が必要なことから、高性能なビデオカードを搭載したPCが必要です。もちろん描画内容次第ですが、普通に3Dゲームを遊ぶときと比べて数倍のGPU性能が必要だと考えてください。2015年現在では、GeForceやRadeonのハイエンドクラス、せめてミドルレンジ以上が望ましいです。いわゆるゲーミングPCを購入するか、自分でそうしたPCを組む必要があります。

重要なことなので強調しておきますが、75fpsのキープは絶対条件です。PSやXboxのゲームでよく、60fpsで動きをなめらかにするか、30fpsでグラフィックを綺麗にするかというような論争がありますが、VRでは高フレームレートが出ていないと頭の動きと視界の不一致で酔います。すぐに気分が悪くなります。また、没入感も大きく変わってきます。

ちなみに、解像度、フレームレートともにまだまだ不足と考えられているため、要求水準は上がっていくものと思われます。解像度が足りないのは、同じ解像度でも、普通のディスプレイに表示するのと視野全体を覆うのとではピクセルの密度がまったく違ってくるためです。DK2は解像度1920×1080・リフレッシュレート75Hzですが、製品版のOculus Riftは2160×1200/90Hzになるようです。要求性能はフレームレートと画素数に概ね比例すると考えるなら、単純計算でDK2の1.5倍のGPU性能が必要になります。また、Oculus VRからは、「完璧なVRには8Kでも足りない」、「120Hzは何としても越えないといけない壁」といった発言が出てきています。これについて行くとすれば、ほどほどの性能のビデオカードを買い換えて行くのがいいのかもしれません。

大雑把な目算ですが、最低限VRソフトを作るためには、GPUのベンチマークの一つであるPassMark - G3D Markのスコアで、DK2で1500から2000、製品版で3000か4000程度のものが必要なのではという感覚です。Oculus VRは製品版の要求スペックとしてさらに高性能なGPUを推奨しています。

Oculus Rift DK2 動作状況報告シートに多数のPC環境での動作報告がまとめられていますので参考にしてください。

(2015年5月)Oculus VRからOculus Rift製品版の推奨PCスペックが公表されました。

この推奨スペックはOculus Riftの製品ライフタイムの間維持されるので、対応ゲームやアプリケーションを開発する際にはこのターゲット環境に向けて最適化して欲しいとのことです。このスペックのPCがあれば、安心してすべてのOculus Rift用ソフトを楽しめるという状態を作りたいようです。

なお、MacとLinuxは当面サポートしないとのことです。

Oculus Rift向きのノートPCが欲しい

Oculus VR自身はノートPCの使用を推奨していません。また、製品版もノートPCは非サポートとなることが表明されています。もしデモや展示などでノートPCを使用する場合は、高性能なGPUを積んだゲーミングノートというカテゴリのものが必要です。さらに、そうしたゲーミングノートには、Intel統合グラフィックスとGeForceを自動的に切り替えるOptimusという機構が搭載されていることが多いのですが、このために、Oculus Riftに映像を直接出力するDirectモードが使えない等の支障が発生しているようなので要注意です。

また、ゲーミングノートは薄い筐体にハイパワーなGPUを搭載している都合上、発熱の問題があります。不安になるくらい熱くなったり、真夏の屋外でのOculus Riftの展示で別途冷却が必要になったというような話があります。

無理せずデスクトップPCを使うのも一つの方策かもしれません。また、MSI GT72、NEXTGEAR-NOTE i5702などが非Optimusということで注目されています。

大雑把なGPUの性能表と参考機種です。

GPU PassMark G3D 参考機種
GeForce GTX 980 9727
GeForce GTX 970 8639 Oculus Rift製品版推奨スペック
Radein R9 290 6613 Oculus Rift製品版推奨スペック
GeForce GTX 980M 6409 MSI GT72
GeForce GTX 970M 4743 NEXTGEAR-NOTE i5702
GeForce GTX 750 Ti 3687 デスクトップPC用ミドルレンジ
Radeon HD 7770 2151
GeForce GTX 860M 1632 NEXTGEAR-NOTE i420(注:Optimus)
Radeon R9 M370X 1623 15” MacBook Pro Retina (Mid 2015)
GeForce GT 750M 1374 15” MacBook Pro Retina (Mid 2014、Late 2013)
GeForce GT 650M 1234 15” MacBook Pro Retina (Early 2013)
Intel Iris Pro 5200 1194
Intel HD Graphics 6000 771 MacBook Air (Early 2015)
Intel HD Graphics 5000 599 MacBook Air (Early 2014)、Surface Pro 3
Intel HD Graphics 4400 543 Surface Pro 2
Intel HD Graphics 4000 454
Intel HD Graphics 5300 369 新しいMacBook

自分はGeForce GT 750M搭載のMacBook Pro Retina (Late 2013)の最上位機種にBoot CampでWindows 7をインストールしてイベント展示などに使用しています。DK2で自作のソフトがDirectモードでほぼ75fps出ていますが、正直、スペック的に厳しいので、最近はデスクトップPCを持ち運びはじめました。製品版のOculus Riftには完全に性能不足だと思います。

こんな感じで外部電源なしでVRできます。HDMI端子とUSBポート2つ(Rift本体と付属の位置トラッキング用カメラ)を使っています。

Macじゃダメなんですか?

(2015年5月)Oculus VRより、Oculus Rift製品版ではWindowsに注力するため、MacとLinuxのサポートを停止するとのアナウンスが出ました。再開を検討しているものの時期は未定とのことです。

Windowsをおすすめします。Boot CampでインストールしたWindowsでも使用できます。

まず、ハードウェアとしてのMacの大きな問題として、GPUの制約があります。Windowsでは自作やBTOで高性能なビデオカードの載ったPCを入手しやすいのですが、MacでOculus Riftを快適に動かすためには、iMacの最上位機種か、Mac Proが必要になってきます。また、Windowsにはゲーミングノートがあるのに対して、MacBook Proは最上位のRadeonやGeForce搭載機種でもデスクトップのローエンドのビデオカード程度のGPU性能しかありません(とはいえ、Optimus問題がなくノートPCとしての実用性もあるMacBook Pro Retinaはそれはそれでありな雰囲気です)。

また、UnityやUnreal Engineといったゲームエンジンも、OS XよりもBoot Camp上のWindowsで動かしたほうがフレームレートが出ているように思います。Oculus Rift対応ゲームもWindowsのほうが多いです。

Oculus Riftは、3Dゲームにより没入感をという文脈から登場したデバイスという一面がありますので、現時点ではゲームに強いWindowsがホームグラウンドだと言えるかもしれません。

さらに、Oculus Riftと他の特殊なデバイスを組み合わせて使う場合があるのですが、そうしたデバイスのSDKがMacに対応していないことがあります。


開発Tips

以下、開発Tipsです。Unity 5.1.2とOculus Utilities for Unity V0.1.0-betaに基づいています。一部内容が古い場合があります。

セットアップするには(Windows)

まず、Oculus Runtime for Windowsをダウンロードしてインストールします。インストールしたら、タスクトレイのOculusのアイコンからConfiguration Utilityを起動して、Riftが認識されているか確認してください(「Oculus Rift DK2 Ready」の表示と画像が出ます)。また、Rift Display Modeを確認してください。使えるならRiftのドライバに映像を直接出力するDirect HMDモードがおすすめです。

初めて使用する場合、ファームウェアをアップデートする必要がある場合があります。メニューのTools > Advanced > Update Firmware… を使って更新します。

Userのところの+ボタンを押してユーザープロファイルを作成します。左下のShow Demo Sceneをクリックして、デモが動作すれば成功です。また、Oculus SDK for WindowsをダウンロードしてOculus World Demoも実行してみてください。この2つが一番安定して動作するデモです。

Unityで対応ソフトを作るには

Unity 5.1から標準でVRヘッドセットがサポートされていますので、これを使用します。なお、Unityは5.1.2以降か、パッチリリースで提供されている新しめのバージョンを使用してください。

Player SettingsのOther Settingsにある「Virtual Reality Supported」をチェックしてオンにします。エディタの再生ボタンを押すか、Standaloneでビルドして実行するとOculus Riftで表示されます。

さらに、Oculus VRのOculus Utilities for Unityをインポートすることで、Oculus Rift固有の機能が使えるようになります。

動かない/スムーズに動かない

今のところだいぶ癖があるようで、試行錯誤することになるかもしれません。上手く行けば、ビルドしたものがDemo SceneやOculus World Demoと同じようにスムーズに動いてヘッドトラッキングもぴったりついてくるはずですが、そうでない場合、何かがおかしいです。

以下のようなことを試してみてください。

エディタで再生するとカクつくんだけど

GameビューのMaximize on Playをオンにしておくと、いくらかカクつきが減るかもしれません。

Virtual Reality Supportedをオンにすると何が起きるの?

ビルドするとプラグインが出力ファイルに同梱され、Oculus Riftが接続されていると自動的にOculus Riftに出力するようになります。Render Textureの設定されていないカメラが自動的にステレオレンダリングになり、左右両画面のカリングやシャドウマップの共通化などの最適化が行われます。

また、実行時にカメラのField of ViewがHMDにあわせて変更され、PositionとRotationがトラッキングの動きで上書きされるようになります。このため、スクリプトなどでカメラを動かす場合には、他のオブジェクトの子オブジェクトにする必要があります。

Oculus Riftが接続されていなければ通常通りPCに表示されます(が、CPUに異常負荷がかかる不具合があるので、今のところ、Oculus Rift以外向けにはVirtual Reality Supportedをオフにしてビルドしたほうがいいです)。

位置トラッキングの合わせ方を教えて

まず、シーン内のカメラをプレイヤーの頭の位置(正確には両目の中間)に配置してください。その上で、実行中にプレイポジションを決めて(ちょうどいい場所に立つ、椅子に深く座るなど)、キーなどで位置・方向をリセットします。以下のようなスクリプトを適当なゲームオブジェクトにアタッチして使います。

using UnityEngine;
using UnityEngine.VR;

public class RKeyToRecenter : MonoBehaviour
{
    void Update()
    {
        // Rキーで位置トラッキングをリセットする
        if (Input.GetKeyDown(KeyCode.R)) {
            InputTracking.Recenter();
        }
    }
}

位置トラッキングカメラの有効範囲は、カメラからの距離0.4メートルから2.5メートル、水平74度、垂直54度の錐台です。Oculus Configuration UtilityのShow Demo SceneでCamera Boundsをオンにして表示してみると分かりやすいです。

Riftがカメラの視界に入ってさえいれば、位置・向きとも比較的自由にトラッキングされますので、必ずしもカメラをプレイヤーの真正面に置く必要はありません。ただし、DK2後方の一定角度は死角になりトラッキングがはずれます。

なお、新型プロトタイプのCrescent Bayでは真後ろを向いてもトラッキングできるようになっていました。トラッキング範囲も広いようです。

Sceneビューのカメラアイコンが大きくて位置がよく分からない

SceneビューのバーにあるGizmosをクリックして、3D Gizmosのスライダーを左に動かしてみてください。

「HEALTH & SAFETY WARNING」の警告メッセージはなくせないの?

隠しオプションで消すことができます。レジストリの

にLibOVRというキーを作って、その中にHSWToggleEnabledという文字列キーで1を設定します。

Oculus Configuration Utilityを開いてAdvanced…をクリックすると、「Disable Health and Safety Warning」というチェックボックスができているはずです(Windowsを再起動しなくても大丈夫です)。警告をきちんと読んだこと、他の人が警告画面を読まずにOculus Riftを使用しないことに同意する必要があります。

公式のドキュメントでは、Oculus Developer Guideの7.2 Health and Safety Warningを参照してください。

Unity GUIを使うには?

Canvasを作成しRender ModeをWorld Spaceにして、Scaleを0.01などに設定して小さくしてシーンに配置します。

UIをカメラの向きに追随させて常に同じ位置に表示する場合は、Render ModeをScreen Space - CameraにしてRender Cameraにカメラを割り当て、Plane Distanceに表示する距離(メートル)を設定します。

Unity 5.1のリリースノートには、「Overlayはサポートされていません。Screen Space - CameraまたはWorld Spaceを使用することを推奨します。UIがGear VRで同じように見えるようにするために”Scale With Screen Size”を推奨します」とあります。

なお、Oculus VRのベストプラクティスでは、UIは3D空間の構成要素として作成し、視点から2~3メートル=ユニットの距離に表示することが推奨されています。

頭の向きでインタラクションしたい場合には、凹さんのエントリが参考になりそうです。

また、Unity 5.1のVRサポートのドキュメントに、開発中の機能として「頭の向きに基づいたUGUIの入力メソッド」という記述が見えます。

レンダリング解像度を変更するには?

GPUの描画負荷は、描画するピクセル数とシェーダの複雑さに比例することが多いです。パフォーマンスが出ない場合、VRSettings.renderScaleでレンダリング解像度を下げると効果がある場合があります。

using UnityEngine.VR;
...
VRSettings.renderScale = 0.5f; // デフォルトは1.0f

Oculus Riftの位置・向きを取得するには?

InputTracking.GetLocalPosition/GetLocalRotationでカメラオブジェクトを基点にしたローカル座標と向きが取得できます。

using UnityEngine.VR;
...
Vector3 position = InputTracking.GetLocalPosition(VRNode.CenterEye);
Quaternion rotation = InputTracking.GetLocalRotation(VRNode.CenterEye);

VRNode.LeftEye/RightEye/CenterEye/Headでそれぞれ左右の目と、目の中間、頭部の位置・向きが取得できます。CenterEyeとHeadは同じ値が戻ってくるようです。

また、Oculus Riftの位置・向きによってカメラのtransformが変化しますので、これを参照してもいいようです。

Oculus Riftの接続チェックをするには?

Riftが接続されていれば、VRDevice.isPresentがtrueになります。

using UnityEngine.VR;
...
if (VRDevice.isPresent) { /* Riftあり */ }

接続しているデバイスの種類を知るには?

VRDevice.family/modelを使用します。

using UnityEngine.VR;
...
Debug.Log("VRDevice.family = " + VRDevice.family);
Debug.Log("VRDevice.model = " + VRDevice.model);

このような出力が得られます。

VRDevice.family = oculus
VRDevice.model = Oculus Rift DK2

PCの画面に別視点の映像を表示するには?

Noraさん制作のOVRMirrorで実現できます。新しくカメラを作り、Projectビューで作ったRender Textureを割り当ててOVRMirror.csをアタッチしてください。また、余分なAudio Listenerを削除してください。ビルドして実行すると別視点のウィンドウが開きます。

オフィシャルで同様の機能がついて欲しいのですが、要望はたくさん来ているができるかどうか分からないとのことです。

シーンにカメラを複数設置して同時描画できる?

通常のプロジェクトと同じようにカメラを複数使用してレイヤー表示できるようです。後から描画する方のカメラのClear FlagsをDon’t Clearに、Depthを1以上に変更してください。また、余分なAudio Listenerを削除してください。

OculusのSDKを配布物に含めてもいいの?

Unity Asset Storeでアセットに含めて配布する場合や、GitHubにプロジェクトを公開する場合などが考えられると思います。商業・クローズドソースのものに含めても問題なしとのことです。

酔いを低減するには?

VR酔いは、乗り物酔いと同じように、自分が予測・体感している動きと視覚情報との間にずれがあると発生します。ですので、とにかくまず描画負荷を低減する、レンダリング解像度を下げる、高性能なビデオカードを使うなどして、最大フレームレートを確保するのが重要です。スムーズに75fps再生できないとあっという間に酔います。それと、現状ゲーム等ではプレイ時間を短めにするのがいいのではないでしょうか。

また、公式からOculus VR Best Practices Guideというガイドラインが公開されています。非公式の日本語訳もあります。縮尺や移動速度を正確にする、頭の動きとは無関係なカメラ移動をしない、ユーザーが常に(ポーズ中やカットシーンでも)周囲を見回せるようにする、水平線や大きな表示要素を動かさない、加減速は短くあるいは即座に、残弾数は浮いているHUDではなく武器それ自体に表示する、等々、非常に多数の注意事項がありますので、じっくり読んでおいたほうがいいと思います。ここで挙げたものはほんの一部です。

オブジェクトに載せたカメラをロールしないようにするには?

VR酔いを軽減する方法の一つに、水平線を動かさないようにするというものがあります(参考:Oculus Rift用シューティングの制作・展示メモ)。簡単なやり方としては、カメラの親子関係を切って、LateUpdateで視点の向きを加工して追従させます。参考コードです。

using UnityEngine;

public class VRCamera : MonoBehaviour
{
    public GameObject viewpoint;
    
    void LateUpdate()
    {
        transform.position = viewpoint.transform.position;
        
        Vector3 angles = viewpoint.transform.eulerAngles;
        // ロールとピッチを消す
        angles.x = 0f;
        angles.z = 0f;
        transform.eulerAngles = angles;
    }
}

下のような構成にして使います。自動車などの子に視点の位置・向きをあらわす空のGame Objectを作り、スクリプトのViewpointから参照します。

カメラのPositionとRotationがRiftの動きで上書きされるため、Main Cameraを空オブジェクトの子にして親のオブジェクトを動かしています。

さらに進めて、視点のぶれ補正などを行ってもいいかもしれません。人間は、頭の動き(前庭感覚)に対して反射的に眼球、首、四肢を動かし視界を安定化させているのですが、それを代わりに行うような感じです。

スケール(縮尺)に関する注意

Riftの左右の映像はUnityのシーン内で左右の目の間隔(デフォルトでは6.4cm)ぶんずらした位置からレンダリングされ、この両眼視差によってVR空間の物体が現実的な大きさに感じられるようになっています。Unityは1ユニット=1メートルが基本になっていますので、特に実写系のコンテンツではこれを守りましょう。例えば、身長170cmのキャラクターを出すときは、Unity上で頭頂まできっかり縦1.7になるようにサイズを調整しましょう。これをはずすとちょっともったいない気がします。

VR空間の物体が現実より大きく感じたり、小さく感じたりする場合には、Oculus Configuration UtilityのIPD(interpupillary distance=瞳孔間距離)というのが両目の間隔の設定ですので、これを変更してみてください。視差を広げるほどVR空間が小さく感じるようになります。

IPDが多少ずれていてもスケール感を合わせられるように、普段の生活で大きさをよく知っているものをVR空間に出して手がかりにするのも良いかと思います。

また、オブジェクトのサイズを調整する際には、エディタ上でCubeオブジェクトを作って適当なスケールを入力して、定規代わりにすると便利です。

キャラクターのスケールを変更したい

既存のプロジェクトが1ユニット=1メートルになっていない場合や、巨人の視界などを表現したいというような場合があります。

カメラを別のオブジェクトの子にして、親オブジェクトのScaleを変更すれば実現できます。カメラ自身のScaleを変更しても反応しないので注意です。

サウンドに関する注意

スピーカーとヘッドホンでは音声の定位が異なります。ヘッドホンは頭を動かすと一緒に回りますが、スピーカーは回りません。スピーカーで音声を出力する場合は、カメラからAudio Listenerを削除して別のオブジェクトにアタッチする必要があります。

なお、製品版のOculus Riftにはヘッドホンが標準装備されていますので、ヘッドホン使用が基本になるかと思います。

APIリファレンスはないの?

Oculus SDKの技術的な詳細が知りたい

下記スライドにSDKやOculus Riftの原理上の非常に詳しい解説があります。

depthSurface == NULL(略)というエラーで動かない

安定版のUnity 5.1.1はリニアカラースペースに対応しておらず、Project SettingsのColor SpaceをLinearにすると、

SUCCEEDED(hr)
depthSurface == NULL || rcolorZero->backBuffer == depthSurface->backBuffer

というエラーが出ます。パッチリリースのUnity 5.1.1p1で修正されています。

unsupported graphics APIと怒られる

VRサポートを有効にしても、

[Compositor] ERROR: Cannot start with unsupported graphics API.
Bad config or LibOVR not found. VR disabled.

と表示されてVRモードにならない場合、Player SettingsのGraphics APIs for WindowsでDirect3D9が使用されている可能性があります。すぐ上のAutomatic Graphics APIをチェックしDirect3D11が使用されるようにして、Unityを再起動してください。

不具合まとめ

個人的に遭遇・把握している不具合を載せます。


番外編

Oculus Riftアプリケーションの配布方法は?

普通に自分のウェブサイトで公開する以外には、Oculus VR公式のOculus Shareに登録して配信することができます(アプリ審査あり)。さらに、これとは別にOculus Homeという公式ストアを準備中だそうです。

また、SteamではOculus Riftに対応しているゲームに「VR サポート」というタグがついています。

ブラウザ(HTML5)では使えないの?

現在、FirefoxとChromeにおいて、WebVRというAPIの検討が始まっています。Oculus Riftなどの方向・位置センサーの状態をこのAPIで取得して、Three.jsなどを使って3D描画、変形表示をすることになります。はてなブックマークでWebVRタグで追っていますので参照してください。

個人的には、VRというのは表示遅延や描画負荷など非常にシビアな処理ですし、また、ゲームエディタなしでVR空間を構築するのは困難なので、UnityやUnreal Engineなどのネイティブなゲームエンジンに頼ったほうがいいのではと思っています。Unity 5のWebGL出力などもいずれWebVRに対応するのではないでしょうか。

オープンなVRヘッドセットやゲームエンジンの発展にも期待したいところです。

なお、UnityのJonas Echterhoff氏が、「(WebVRの)サポートを追加することはおそらく難しくないので、将来のある時点でそうすることはあり得ると思います。が、我々のゴールは(WebGL)リリースの安定化です。現時点では新機能の追加はしないでしょう」とコメントしていました。

*_DirectToRift.exeって何?

従来のOculus Unity Integrationでは、ビルドすると通常のexeファイルとあわせて*_DirectToRift.exeが作られ、Riftに出力するにはこちらを実行する必要がありました。Unity 5.1からは不要になっています。

Oculus Riftの取り扱いで気をつけることは?

DK2のレンズは非常に傷つきやすいので注意です。眼鏡の接触で傷が入ったり、袋に入れて持ち運んでいたらいつのまにか細かい傷がたくさん入っていたりというようなことが起きています。拭くときは、カメラ用のレンズクリーナーを使うといいようです。

なお、傷が入ってしまったレンズを研磨剤で磨いてみたところ、一応修復できました。自己責任でお願いします。

また、スポンジを取り外すと楽に洗えます。ツメを折らないように注意してください。

イベント展示について

展示作品を検討している場合、手妻師さんのスライド「VRソフトのプロデュース」は必見です。特に、26ページからの「VR体験ソフトの評価」はとても参考になります。

また、Oculus VRから一般展示にOculus RiftやGear VRを使用する際のガイドラインが公開されています。厳しい項目もあり議論があるのですが、要確認です。Oculus Riftはまだ開発機だということと、事故を起こさないようにすることが基本軸かと思います。

展示でたくさんの人に被ってもらうとDK2のスポンジが汗や化粧などを吸ってしまい敬遠されるので、何らかの対処が必要です。

VR Coverから展示用の防水カバーが販売されていて気になっています。

ノートPCを使用する場合、発熱の問題があります。Open Hardware Monitorを使えば、CPUやGPUの使用率や温度などをリアルタイムでチェックできます。

位置トラッキングカメラは赤外線を使用します。周辺環境やデバイスの組み合わせによっては誤作動することが報告されていますので注意です。西日などに弱いそうです。

参考になる本はある?

Oculus Riftよりも前の情報になりますが、VR全般を包括的に扱っている日本バーチャルリアリティ学会の本があります。

また、OcuFes桜花一門さんとゆーじさんが初のOculus Rift本を執筆されました。拙作も1ページ紹介されています。

このページ書いてる人はどんなの作ってるの?

「3D駐車シミュレーター」その他、各種ゲームや展示物などを制作しています。
Oculus Rift対応ソフトコーナーにぜひお立ち寄りください。

書いた人:こりん(@k0rin / id:korinchan
ブログトップへ RSS