Oculus Rift SDK Update 2015

#2015年のOculus VRの出来事

##1. 製品版（Consumer Version 1）発表 
　2015年5月、Oculus Riftの製品版が発表されました。2160x1200＠90Hzの有機ELパネルと取り外し可能ヘッドホン、マイク、IPD（瞳孔間距離）調節機構を搭載したHMD、位置追跡用の赤外線トラッキングカメラ、Xbox Oneコントローラのセットで2016年第1四半期発売が予定されています。予約開始は2015年後半と言われており、価格等は未定です。

##2. Oculus Touch発表
　Oculus Rift製品版と一緒に発表されたのがOculus Touchです。Oculus Riftは「眼」「頭の位置」をVR空間に持ち込むデバイスですが、Oculus Touchは「手の位置」「指」をVR空間に持ち込むためのデバイスです。6月のE3で展示され、私もOculus Connect 2で体験しましたがこれまでのハンドトラッキングデバイスとは一線を画したクオリティに驚きました。

##3. Gear VR製品版（2015 Edition）発売
　2015年4月、サムスンのフラッグシップスマートフォンGalaxy S6/S6 Edgeが発売され、それに対応した第2世代Gear VR Innovator Editionも発売されました。しかし、それ以前から2015年中のGear VR製品版発売も予告されており、予告通り2015年11月にGalaxy S6/S6 EdgeとファブレットサイズのNote5/S6 Edge Plus（日本未発売）に対応したGear VRの正式製品版がローンチされました。国外での名称は2015 Editionとされており、今後も早いペースで新バージョンが発売されることが予想されます。（12月3日現在国内発売は未定）

##4. Oculus Story Studio開設
 2015年1月、Oculus VR社の映像制作部門であるOculus Story Studioの解説が発表されました。VR HMDでストーリーを表現する360度の映像作品を制作するスタジオとなっており、元Pixarでウォーリーやモンスターズ・ユニバーシティのテクニカルディレクターを務めたMaxwell Planck氏がテクニカルディレクター、同じくPixarでトイ・ストーリー3やカーズ2のレイアウトアーティストを務めたSaschka Unseld氏がクリエイティブディレクターという体勢で、2015年にはHenryとLostという2つの映像作品を発表しています。

　<blockquote class="twitter-tweet" lang="ja"><p lang="en" dir="ltr">An unbelievable night and beginning for Story Studio. Our seed of a website is now up at <a href="http://t.co/ZY20yUz8FI">http://t.co/ZY20yUz8FI</a> . <a href="http://t.co/X4ycaV4OWp">pic.twitter.com/X4ycaV4OWp</a></p>&mdash; Oculus Story Studio (@ovrstorystudio) <a href="https://twitter.com/ovrstorystudio/status/560136761272049664">2015, 1月 27</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#2015年のOculus SDK 主な新機能
##ランタイムのDLL化 [0.5.0.1]
　0.4以前のOculus SDKでは各処理の実体であるランタイム部分のコードもアプリケーションと一緒に静的リンクライブラリとしてコンパイルされていましたが、それがDLLに分離されました。これによって後述するSDK 1.0以降で再コンパイル無しで改善された新しいランタイムに対応することが可能となり、長期の互換性を保つことが容易になりました。

##DirectX 9が非推奨に [0.5.0.1]
　0.4以前のSDKではDirectX 9とDirectX 11が混在しており、ビルド設定によって動いたり動かなかったりという悲劇を招いていましたが、0.5.0.1からDirectX 9が非推奨となり、DirectX 11に一本化されました。これからアプリケーションを作る場合は必ずDirectX 11で開発しましょう（OpenGLは引き続き利用することが可能です）。

##コンポジターサービス追加 [0.6.0.0]
 Oculus Riftのパネルに合わせたディストーション（歪み）処理を行うコンポジターがバックグラウンドサービスとして分離されました。これによって、同時にアプリケーションを起動した場合の処理が改善されました。

##マルチレイヤー対応 [0.6.0.0]
　Oculus Riftに表示する画面を複数のレイヤーに分けることが可能となりました。これにより、UIだけTimeWarpを行わない（TimeWarpは2D画像処理なのでUIに適用されるとボヤケた画像になってしまう）ことや、肉眼では見えにくい視界の外側の解像度を落とすという処理が可能になりました。このマルチレイヤーを活用し[酔いの軽減を試みた人も居ます](https://share.oculus.com/app/tunneling-locomotion-demo)。

##パフォーマンスHUD追加 [0.6.0.1]
　アプリケーションのパフォーマンスを確認できるUIが追加されました。これによりアプリケーションの遅延や処理時間を正確な数値で実行中に確認することが可能となりました。

![Latency Timing](https://developer.oculus.com/images/documentation/pcsdk/latest/hud-latency-timing.jpg)

![Render Timing](https://developer.oculus.com/images/documentation/pcsdk/latest/hud-render-timing.jpg)

![Performance HUD](https://developer.oculus.com/images/documentation/pcsdk/latest/hud-performance-headroom.jpg)

##Queue Ahead（キューの先行処理）[0.6.0.1]
　VRの命題は絶対に処理落ちを発生させないことです。処理落ちを起こさせないためには、1フレーム内にGPUの描画処理を終わらせる必要がありますが、そうするとGPU処理をかなり削減する必要があります。GPU処理をそこまで減らさず、むしろ長い時間処理しても処理落ちを発生させないよう、ディスプレイの垂直同期周期の1フレームが始まる時間軸よりも前にCPU処理を始めることで、処理落ちを抑えつつGPUの処理可能な時間を増やす機能がQueue Aheadです。弊害として、適用前よりも少し早くセンサー情報を読取る必要があるため数ミリ秒遅延が増加してしまいます。これは後述するLate Latchingで将来的に改善される見込みです。

Queue Ahead適用前![Queue Ahead適用前](https://developer.oculus.com/images/documentation/pcsdk/latest/queue-ahead-01.png)

Queue Ahead適用後![Queue Ahead適用後](https://developer.oculus.com/images/documentation/pcsdk/latest/queue-ahead-02.png)

##Direct Driverモードの追加。Extend廃止 [0.7.0.0]
　AMDのLiquid VR、nVidiaのGameWorks VR（2014年時の旧称VR Direct）に対応し、GPUメーカーのドライバが提供するVR向け機能を利用することで0.6以前のDirectモードより改善された動作を提供するDirect Driverモードが新設されました。メリットとして、より低レベル層にOculus VRがアクセスできるようになったことによる遅延の改善や、接続しただけでOculus Rift製品版を認識することが可能になるユーザビリティ面の向上などが期待されています。しかし、現在はゲームエンジン側がLiquid VRやGameWorks VRに完全対応していない事からDirect Driver Modeの性能は発揮されておらず、またExtendモードが廃止された事によるハードルの上昇など、現状は要改善点が多くなっています。Direct Driverモードに対応していないGPU・ドライバの組み合わせの場合はこれまでのDirectモードが動作します。

##Windows 10の暫定サポート [0.7.0.0]
　Windows 10での動作も公式で可能となりました。しかし動作にはDirect Driverモードへの対応が必須のため、Directモードしか動かない旧端末では利用不可能となっています。

##HMDデバッグのサポート [0.7.0.0]
　Oculus Config ToolでHMDを挿していない状態でもOculus Riftアプリのデバッグが可能となりました。DK1/DK2/Crescent Bayのいずれかを選んでそれぞれのHMDでアプリケーションが起動された際の状態を確認できます。

##Oculus Touchサポート [0.8.0.0]
　Oculus TouchのボタンやトリガーのステートをSDKから参照できるようになりました。参照：[Oculus Touch Controllers](https://developer.oculus.com/documentation/pcsdk/latest/concepts/dg-input-touch/)

##Oculus Debug Toolの追加 [0.8.0.0]
　Oculus Riftアプリケーションの組み込みデバッグが実装されました。Oculus Config Toolでデバッグツールを有効にすると前述のパフォーマンスHUDの他、立体視やレイヤー情報のデバッグが可能となります。（対応SDKでビルドされていればアプリケーション側でのデバッグ操作の実装が不要）

![Stereo Debug HUD](https://developer.oculus.com/images/documentation/pcsdk/latest/debug-tool-stereo.png)

![Layer Debug HUD](https://developer.oculus.com/images/documentation/pcsdk/latest/debug-tool-layer.png)

##DXGI2 Previewモードの追加 [0.8.0.0]
 ドキュメントにはまだ記載されていませんが、0.8からWindows 10で搭載されるDXGI2に対応する描画モードが追加されました。これはDirect Driverモードとは違いWindows 10のDXGI2に対応していれば動作するため、Optimusノートでの動作も確認されており今後の改善が期待されます。参照：[Oculus DK2の新しい描画モードDXGI 2 Previewの話](http://masafumi.cocolog-nifty.com/masafumis_diary/2015/10/oculus-dk2dxgi-.html)

##対応機種の追加（Oculus Mobile SDK）
　2014年にリリースされたOculus Mobile SDKは日本未発売のGalaxy Note4のみでしたが、2015年には日本でも発売されたスマートフォンのGalaxy S6/S6 Edge、またNote4後継のNote5/S6 Edge Plusにも対応しました。

#2015年のOculus SDKバージョンアップデート
##1. Oculus Mobile SDK 1.0リリース（2015年11月）
　Gear VRの製品版発売に合わせ、Oculus Mobile SDKも1.0正式版となりました。

##2. Oculus Audio SDK 1.0.0 βリリース（2015年11月）
　こちらもGear VRに合わせたのか、立体音響を提供するOculus Audio SDKも1.0.0がリリースされています。恐らく次のバージョンが正式版となるでしょう。

##3. Oculus Platform SDK プレビューリリース（2015年12月予定）
　Oculus Connect 2で発表された、Oculus VR社が提供するマルチ・プレイヤー、プラットフォーム機能などを提供するネットワークライブラリです。主な機能として

1. Oculus IDによるユーザ管理
2. ルーム作成とルーム内マルチプレイ
3. アプリ内課金
4. ボイスチャット

などがあります。Oculus Connect 2では年内リリースが発表されました。

##4. Oculus PC SDK 1.0リリース（2015年12月予定）
　Oculus Rift製品版に対応するPC SDKの1.0正式版も2015年内予定となっています。1.0からは互換性が重視され、1.0でビルドされたアプリケーションは1.1、1.2…とランタイムのバージョンアップがされていっても動作が保証されるようになります。

# 2016年以降のOculus SDKアップデート
## Asynchronus TimeWarp
　Gear VRでは、TimeWarpを行うスレッドがアプリケーションと分離されているため、多少処理落ちを起こしてもヘッドトラッキングがしっかり60fpsで実行されます（酷く処理落ちした場合は別です）。問題は、現在のPCで同じことを行おうとするとOSやドライバの制約でTimeWarpの別スレッド化が困難なことです。これについては、今後のWindows 10のOSアップデートや前述のDirect Driverモードへの対応が改善されることによりPCでもAsynchronus TimeWarpを実行可能にする計画となっています。

## Late Latching
　前述のQueue Aheadでは処理時間を増やすために遅延が増えていると書きました。遅延が増える理由はCPU処理の始めにセンサー情報を読み取る必要があるからです。ではCPU処理の初めではなくGPU処理中にセンサー情報を読み取ればどうでしょうか？それを実現するのがLate Latchingです。

**通常の3Dアプリケーション。OSの制約で描画が行われるのはCPU処理から数フレーム後。遅延が30ミリ秒も。**
![](https://s3.amazonaws.com/static.oculus.com/website/2015/04/latelatchingblog-figure1.jpg)

**フレームの遅延を一切無くしたアプリケーション。上の図よりも遅延が減るがCPUもGPUも処理に割ける時間が8ミリ秒・7ミリ秒から6ミリ秒・5ミリ秒に減ったため、非常に処理落ちが起きやすくなってしまう（現在のSDKでのQueue Aheadオフ状態の動作がこの図）。**
![](https://s3.amazonaws.com/static.oculus.com/website/2015/04/latelatchingblog-figure2.jpg)

**CPU処理の方向センサーの読み取りをGPU処理が終わった直後に割り込んだ状態。方向の遅延は3ミリ秒まで縮んだが、処理時間の余裕は少ないまま。**
![](https://s3.amazonaws.com/static.oculus.com/website/2015/04/latelatchingblog-figure3.jpg)

**1フレーム内に処理をまとめるのをやめ、方向センサーのLate Latchingを有効にした状態。GPUが直接方向センサーの情報を読み取るようになり、方向の遅延が3ミリ秒のままGPUの処理時間が5ミリ秒から8ミリ秒へ増えた。**
![](https://s3.amazonaws.com/static.oculus.com/website/2015/04/latelatchingblog-figure4.jpg)

**方向だけでなく位置のLate Latchingも有効にした状態。GPU処理の初めに位置センサーの情報をGPUが直接読み取ることで、位置の遅延も20msから11msに減らすことができた。Late LatchingのためにGPUの処理時間は7ミリ秒へ。**
![](https://s3.amazonaws.com/static.oculus.com/website/2015/04/latelatchingblog-figure5.jpg)

　最初は各30ミリ秒もあった遅延が、Late Latchingを使うことで11・3ミリ秒まで縮まりました。しかも、GPUが処理可能な時間を最初の7ミリ秒から一切減らすことなく、です。ただ、「GPUが直接HMDのセンサー情報を読み取る」という奇策を用いているため、Late Latchingを利用するためのハードルはかなり高くなっています。センサー情報を読み取るためにGPUの低レベル層にアクセスするため、PCのDirect Driverモード対応は必須となります。しかし、正式リリースされた際には遅延の削減と処理落ちの減少によるユーザーの圧倒的な体験向上が期待できます。開発者にとっても、同じ環境向けにより高度なグラフィックスを実装できるようになります。

# 2016年のOculus Riftの出来事？
　2016年はOculus Riftにとって大きな年です。延期しなければ2016年第1四半期にはOculus Riftの製品版が出荷開始されます。第2四半期中には4月のHTC Vive（Valve SteamVR第一弾）、Oculus Touch、Playstation VRの発売も予定されています。Gear VRも更に改善されることでしょう。Oculus RiftとGear VRの場合、既にSDKは公開されています。Gear VR製品版はInnovator Editionと同じく家電量販店で買えるようになるでしょうし、DK1しか持っていない方でも最新のSDKで作ったソフトが動きます。ぜひ[Oculusのサイト](https://developer.oculus.com/)から最新のSDKをダウンロードして開発しましょう。

# 告知
　2015年12月31日に東京ビッグサイトで開催されるコミックマーケット81 3日目 東モ43aブースにて、UnityのVRサポートを使ったOculus Rift/Gear VR開発入門の技術電子書籍を頒布します。
　隣の43bブースではMikuMikuVR for Oculus Riftの作者たこルカさんによるC++ネイティブでOculus Riftを使うソース付きCD-R電子書籍が頒布されるようなので、大晦日に関東に居る方は是非有明までお越し下さい。

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">12月に入ったので告知&#10;冬コミ 12/31(木) 東モ43b でサークル出すらしいです。&#10;MikuMikuVR for OculusRift(<a href="https://t.co/lgOt0mJveC">https://t.co/lgOt0mJveC</a>)のソース&amp;解説書のCD-Rを頒布予定です。&#10;<a href="https://t.co/d8DYgxao6h">https://t.co/d8DYgxao6h</a></p>&mdash; たこルカさんV4X (@takolukasan) <a href="https://twitter.com/takolukasan/status/673013829756841985">2015, 12月 5</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

P.S. Oculus VR日本スタッフの方へ
　THETA S VRアプリやGear VRアプリの日本語ローカライズも良いですがOculus Developersサイトの日本語翻訳も早くｵﾅｼｬｽ！