読者です 読者をやめる 読者になる 読者になる

【講演メモ】OculusConnect 9/20 15:30- Developing VR Experiences with the Oculus Rift

Oculus Connect Oculus Rift

=========================
(補足)
OculusConnectのサイトでは、
「BEST practices for VR development」
というタイトルで紹介されていたのですが、なぜかタイトルが変わっていました。
=========================

登壇者:Tom Forsyth, Software Architect in Oculus


講演自体がひたすら説明なので、ポイントを絞って整理しました。

前提

f:id:Takyu:20140920153643j:plain
写真:本講演の対象外(ハードウェアスペックなど、ソフト開発以外の内容)


f:id:Takyu:20140920153738j:plain
写真:本講演の対象=VRアプリケーションを作るために注意するべき8個のポイント


1.Be kind to Players

・開発しているとVRの特殊環境でのプレイを気にしなくなる。
・しかし、多くの初見プレーヤは気になるし、そこを無視すると☆1つのレビューになってしまう。
・ある人は許容できても、別の人は許容できないことはある。
・ベストプラティクスガイドにはその辺りのことが書いてあるので、チェックリストとして参考にしてほしい。

補足:ベストプラティクスガイドについては、@gamesonytabletさんを中心に日本語訳が書かれています。私も少しですが参加しました。

ゲームは初心者にやさしく: Oculus VR ベストプラクティス ガイド【DK2】(非公式翻訳)

2.VOR gain

f:id:Takyu:20140920154715j:plain
写真:頭と平行に脳を輪切りにしたときの主要部分を示した模式図

・頭の傾きは耳で検知している(10ms後、目の回転で補正)
・急に動いているわけではない。

・Vestibulo-Optical Reflex(VOR)とは、 耳の動きと目の応答の比率。普通は1対1

・VOR のgainが変化すると、慣れるに1,2週間かかる。

・VORのgainを保つこと

・「pixels per visible degree」という項目でRiftのphysical pitchを表示できる

・使用デバイスとプレーヤのサイズを入力すれば、SDKから適切なFOVとスケールを入手可能

・FOVをごくわずかにずらすだけでもプレーヤに影響するので、原則変更はしないこと

3.IPD and eye relief, and neck


IPD (Inter Pupillary Distance)
→目と目の間の距離。Nose-to-pupil(瞳孔)は、IPDの半分の距離

f:id:Takyu:20140923193357p:plain
写真:IPDの考え方

Eye relief
→レンズから目までの距離

・center eye pupil (顔の中心にあると仮定した目。oculussDKではこれを基準としている)
Audio Listener Position、crosshair(SDK標準で利用可能な照準)のraycast、などに使う

f:id:Takyu:20140923193525p:plain
写真:center eye pupilの考え方

・自分で作るソフトウェアでは、center eye pupil調整用のボタンを作るべき

・プレーヤはまっすぐ座ったままでボタンを押すこと

4. Changing world scale

・スケールは小さめの方がプレーヤが感じる影響が少ない。

・IPD 0にすると単眼モードになるが、うまく動かないので使うべきではない

f:id:Takyu:20140923200551p:plain
写真:単眼モードの考え方

・古い研究はVRにとって当てはまらないものが多い。

5. How tall is the player

・身長は現実と同じにした方が没入感が得られる。

・VR世界での他のプレーヤーと同じ身長にするとあまり良くない。なぜなら、プレーヤは座ってプレイするから。

・あらゆる状況に合うサイズはない。

6. Transition Animations

・一般的には、カメラのコントロールはしない。

トランジションが必要な場合がいくつかある。
 ・車に乗る、降りるとき
 ・ベッドに入るとき/出るとき。

・しかし、トランジションを実施してしまうと、ほとんどのプレーヤにとって刺激が強すぎてしまう

・そこで、アバターかゴーストを作って、それらに遷移をさせるとよい。

トランジションの前にはblink(点滅)をさせるとよい。
しかし、300m以内だと、働かないことがある。

7. Meathook Avators

(meat hook : 食肉用の釣り針)

f:id:Takyu:20140920161909j:plain
写真:transitionの解決方法として提案されたmeat hook


一応、意訳すると、

Avatorにアニメーションさせ、
Avatorの頭の位置を確認したら、

頭を消し(Decapitate)、
プレーヤの頭の位置を確認したら、Avatorの頭の位置をプレーヤの頭の位置に合わせ、

Avatorの頭をhookでつり下げて、プレーヤの頭の位置を固定する。


と書かれているのですが、話を聴いたときも意味がよくわかりませんでした。

いちおう、スライドのスクリーンショットを貼っておきます。

f:id:Takyu:20140920161943j:plain
写真:手順1

f:id:Takyu:20140920162045j:plain
写真:手順2

f:id:Takyu:20140920162102j:plain
写真:手順3

8 Framerate & Timewarp

・DK2 75Hz、CrescentBay 90Hzが標準

[Drawcallについて]
・Drawcallを減らすこととfillrateが主なFPS確保コスト

・目の数が2倍になれば、drawcallの数も2倍になる。
・一度設定すればよいもの
 ・カリング
 ・アニメーション
 ・shadow buffer rendering
 ・grass map、距離による反射設定、AO render

[fillrateについて]
・virtual camera rendersのサイズ変更はよいが、frame buffer sizeの変更はしてはいけない
 (DK2の場合frame bufferは常に1920×1080であり、変更してはいけない)

・camera eye rendersは、多くの場合 片目で1150×1450。
 ただし、プレーヤの目の位置で変わるので、profileかSDKから変更すること

timewarpについては、今のところ(at once?)3つの基本的な設定を行っている。
1.rolling shutterを補正
 (常にOnになっているが、心配しないこと)

2.頭の傾きと位置補正のための最新の動き予測
 (基本的に自動的に設定される)

3.illnessによってdropped frameさせない。
 (すいません、ここは意味がわかりませんでした)

Timewarpは魔法ではない。framerateが何よりも重要。


多くの観点でポイントが書かれているので参考になりますね。
まだわかってない用語もあるので、これから勉強していきたいと思います。

以上です。