OculusRiftデモ展示Tips

[Oculus Rift Advent Calendar 2015](http://qiita.com/advent-calendar/2015/oculus-rift)の10日目の記事になります。

製品版の発売が近づいてきてはいますが、内容としてはUnity+OculusRift DK2を想定したデモ展示Tipsになります。８時間も展示を行うと、ちょっとした効率化で体験者の総数を十人単位で増やすことができたりしますので、特にこれからOcuFesなどの場で一般展示を考えている方には参考になる内容かと思います。

（※この記事はUnity5.2.2p2+OculusRuntime0.8で書かれています）

# 機材編

## カメラ用一脚セット
DK2から付属になったポジショントラック用カメラは画角の関係から体験者からある程度離して設置することが望ましいのですが、展示スペースによっては机に奥行きが無く、設置場所が限られることがあります。一脚セットは三脚に比べ持ち運びが簡単でカメラ設置場所の選択肢が増えるため、展示の際には是非用意しておきたい機材になります。

⇒[(Amazon)マンフロット PIXI ミニ三脚ホワイト MTPIXI-WH]( http://www.amazon.co.jp/dp/B00GUND8XM/)
⇒[(Amazon)monopod(モノポッド) グリップ付き一脚 ブラック SP068]( http://www.amazon.co.jp/dp/B004W133F2/)

![monopod.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/71df90c8-b55f-5f85-dfcc-81a5ff01f7c1.jpeg)
カメラケーブルを引っ掛けたときにその形状から端子に力が掛かって端子ごとカメラ基盤から外れ、故障してしまうことがあります。筆者は事故防止のため一脚のポールにケーブルを巻き付け、たとえケーブルが引っ張られても直接端子に力が掛からないようにしています。



## USB接続
DK2にはACアダプターが付いてはいますが、USBからの電源供給のみでも動作させることも可能です。DK2はUSB3.0規格でギリギリアウトくらいの消費電力のようなのですが、電源供給の大きいUSB端子のあるノートPCであれば安定して動作させることができます。DK2はUSB端子を２つ接続する必要があり、一つはDK2本体、もう一つはポジショントラックカメラで、電源容量が必要なのはDK2側の端子で目のマークが付いている方になります。
![USB_Power.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/4915fb1b-32e4-3ca9-595a-b48f02b3c4c8.jpeg)

また、電源供給が足りない場合、カメラのトラッキングが効いたり効かなかったりする症状が出るようです。そのような症状のときは、差すUSB端子を変える/付属のACアダプタを使用するなど電源不足を疑ってみるのがいいかもしれません。

安定して動作する接続端子の組み合わせを発見したら、常に接続はそこに行うようにすることをオススメします。他の人に展示を手伝ってもらう際なども、いつもの場所にケーブルが刺さっているかの確認を行うようにしましょう。


## ケーブルをビニタイでまとめる
DK2でカメラケーブルが増えたこともあり、ビニタイ（針金がビニールでコーティングされてるアレ）などで束ねておくと運用し易くなります。筆者は50cmおきくらいに約7ヶ所ほど止めて運用しています。![cable.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/15bb67fc-5673-198d-249d-048a80fdd251.jpeg)



## ケーブルをヘッドバンドから分離しておく
展示の際はPCとの位置関係からケーブルが体験者の前方に伸びることが多く、本体出荷時で上バンドに通されているケーブルは分離しておいた方が機材の取り回しが楽になります。体験者の入れ替え時のHMD付け外しの時間も短縮され、後述の上バンド調整もやり易くなります。

DK2の前面カバーを開け、端子からケーブルを一時的に外して、二ヶ所あるバンド穴から外してしまいましょう。
![cover.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/dcd2c19f-18f6-e429-3a89-072633aa9b8f.jpeg)



## 汗/汚れ対策

### スポンジ保護
肌触りのストレスが少なくなりますので、紙製のよりも布/革製のスポンジ保護製品をオススメします。革製のものであれば、体験終了後、ウェットティッシュで拭くことができ衛生的でも安心ですし、女性の化粧の付着量も減り、運用もしやすいです。

今は販売が終了していますが筆者はこれを愛用しています。
⇒[(Amazon)Wizapply Oculus Rift用フェイスレザー](http://www.amazon.co.jp/dp/B00R962O6Q)
布製であればVR Coverもオススメです。
⇒[VR Cover](http://vrcover.com/product/vr-cover/)

### ウェットティッシュ
体験者の方の額の汗などを拭いてもらう、革製のスポンジカバーを拭くなど、展示の際にはウェットティッシュを用意しておくと衛生面でも安心です。アレルギー反応を起こす人がいますので可能であればアルコールの入っていないものを選ぶのがいいでしょう。また片手で運用できるよう、横置きのケース付きのものをオススメします。
⇒[(Amazon)シルコット ウェットティッシュ ノンアルコール ピュアウォーター](http://www.amazon.co.jp/dp/B0012R61XA/)

### メガネ拭き
展示をしていると意外とレンズに汚れが付着します。体験者ごとにレンズも拭くことをオススメします。DK2付属のレンズ拭きは傷がつきやすいという話もありますので、マイクロファイバーのメガネ用レンズ拭きを別途用意しておくと安心です。




# アプリケーション編

## マウスでカメラ回転を行わない
展示中に意図せずマウスやトラックパッドに触れてしまうことがままあります。デモ中であれば体験者のカメラが強制的に動いてしまうのはVR酔いを引き起こす要因になる上、センターがズレてしまうためよろしくありません。マウスなどでカメラが回転する処理は行わないようにしましょう。

Unity上でOVRPlayerを使用している場合は、以下の部分を削除することでマウスでのカメラの向きを変更する機能を無効化することができます。
（Assets/OVR/Scripts/Util/OVRPlayerController.csのpublic virtual void UpdateMovement()内の以下２行をコメントアウト）

```OVRPlayerController.cs
if (!SkipMouseRotation)
 euler.y += Input.GetAxis("Mouse X") * rotateInfluence * 3.25f;
```


## HMDを脱着/首振りテストのためのシーケンスを用意する

いきなりコンテンツが始まってしまうと、HMDの装着に手間取った場合、コンテンツの最初の方を体験できないことになりかねません。HMDの脱着/首振りテスト用にキーを押さないと本編が始まらないようなシーケンスを組むことをオススメします。
また、Unityのシーンロードは時間が掛かるため、シーンの切り替えは行わず、親GameObjectをSetActive関数で切り替えるような構成にしておくと、リソースの初期化処理をシーン開始時に集めることができるため、場面の切り替えがスムーズになります。
![151210_OneScene.png](https://qiita-image-store.s3.amazonaws.com/0/33572/4bed2455-df44-aa6e-b316-54e8fe9faf9f.png)




## 映像がボヤけて見えていないかを体験者の方に確認してもらう

前述のHMD確認用のタイトル画面などで、映像がボヤけて見えないかの確認を行います。その際の声がけは「タイトル文字がハッキリ見えますでしょうか？」など具体的に質問します。**体験者の方は開発者と違い、本来の正しい状態が分からないので「大丈夫ですか？」などの曖昧な質問には答えられません**ので。

OculusRiftを初めて体験される方であるなら「上下左右、後ろも見てください」など、HMDの特性も試してもらうといいです。あらかじめ首振り可能なことを実際に試してもらうことは重要です。一般展示を行っていると、事前に説明をしていても体験中、**微動だにしない方**が一定数おられます。折角のHMDですので、首を振った状態を体験として持ち帰ってもらいたいものです。


## スクリプトで体験者数をカウントする

体験者数はアプリの体験時間から概ね逆算できるのですが、スクリプトで再生回数をカウントできるようにしておくと、その数字の説得力が増します。展示を実績として提示する機会があるのであれば、アプリにログを仕込んでおくことをオススメします。

以下のサンプルコードは、GameObjectが初期化されるタイミングで、日付＋アプリケーション名＋PC名のcsv形式でファイルに一行ログが追記されていくスクリプトです。ファイル名にPC名が含まれるので複数台の展示でも安全に集計を行うことができます。

```PlayLogCSV.cs
using UnityEngine;
using System.Collections;
using System;
using System.IO;

public class PlayLogCSV : MonoBehaviour 
{
	public string log_application_name = "VRDemo";
	protected string machine_name="";
	protected string log_filename="";

	public void writeLog( string value )
	{
		string s = "";
		s += "," + DateTime.Now.ToString("yyyy/MM/dd");
		s += "," + DateTime.Now.ToString("HH:mm:ss");
		s += "," + machine_name;
		s += "," + value;
		//Debug.Log( s );
#if !UNITY_EDITOR
		StreamWriter sw = new StreamWriter(log_filename,true);
		sw.WriteLine(s);
		sw.Close();
#endif
	}

	void Awake(){
		machine_name = Environment.MachineName;
		log_filename = Application.dataPath+"/"+DateTime.Now.ToString("yyyyMMdd") + "_"+log_application_name+"_"+machine_name+".csv";
		//Debug.Log( "log_filename = "+log_filename );
		writeLog( "awake" );
	}
}
```


## VR酔い対策

### まずは移動を伴なわないコンテンツで経験を積みましょう
VR酔いは生牡蠣の食あたりに例えられるほど身体的に厳しい体験で、アプリ体験者にVRに対しての強烈なトラウマを植えつけることになります。特に加速減速を伴なう移動は酔い易いことが知られており、開発者としてVR酔いの知見が溜まるまでは、移動を伴なわないコンテンツでフレームレートのキープを意識した制作することをオススメします。

移動に関していえば、正面移動は酔いにくい/加速せず一定速度での移動は酔いにくい/回転は一瞬で大きく回すと酔いにくい/ワープ移動は酔いにくい、などの知見はありますが、ケースバイケースですので実際に試行錯誤しながらの調整が必要になります。

Oculus社が配布している「ベストプラクティスガイド」の内容は最低限目を通しておきましょう。
⇒[Oculusベストプラクティスガイド 日本語版(pdf)](http://static.oculus.com/documentation/pdfs/ja-jp/intro-vr/latest/bp.pdf)


### フレームレートのキープ

OculusRift DK2であれば75fps、OculusRift CV1（製品版）であれば90fpsの維持が要求されます。フレームレートとVR酔いは相関関係が強く、HMDの首振りが映像に反映されるのが遅れるということは、映像的に眩暈を起こしているような表現になってしまします（体験者が向いている方向に遅れて映像が付いてくる状態）。フレームレートの維持ができていないと一般展示の際にVR酔いを引き起こす人数がそれだけ多くなってしまいます。一般展示においてフレームレートの維持は必須項目と考えてください。
パフォーマンスのチューニングは技術的に高度な内容になってしまいますので、慣れないうちは表示するオブジェクト数を絞る、背景を簡単なものにするなど軽量なコンテンツ制作を心がけるのがよいと思います。

どうにもならないときは、解像度を下げてフレームレートをキープする方法もあります。[VRSettings.renderScale](http://docs.unity3d.com/ja/current/ScriptReference/VR.VRSettings-renderScale.html)関数で実行時の解像度を下げることができ、Scaleの値を0.8~0.5あたりに設定しておくと処理する面積が減って負荷を下げることができます。画質は下がるものの、その効果は劇的ですのでフレームレートが維持できないときは是非活用してください。

```VRRenderScale.cs
using UnityEngine;
using UnityEngine.VR;
using System.Collections;

public class VRRenderScale : MonoBehaviour 
{
	public float VR_RenderScale = 1.0f;

	void Start () {
		VRSettings.renderScale = VR_RenderScale;
		Debug.Log ( "VRSettings.renderScale="+VR_RenderScale );
	}
}
```

## 年齢制限について
現在Oculus社のガイドラインでは13歳未満の視聴は制限されています。これは成長期の子供に3D映像の視聴が健康上の被害を及ぼす可能性を考慮したものと言われており、11月7日に開催されたVRCカンファレンスでの講演が参考になるかと思います。
⇒[13歳以下のOculus Rift利用は是か非か？ 医学的見地から考えるVRの年齢制限](http://panora.tokyo/3767/)

こういった問題はハコスコのような単眼パノラマの視聴（レンズが一個で映像も右目/左目用に分かれていないもの）では起きないとされており、一般展示の際には子供用に単眼パノラマ映像を用意して運用することも検討するのがよろしいかと思います。Unity上でパノラマ映像を作成するためのAssetもいくつかありますので活用して頂ければと。

## SDKやゲームエンジンのバージョンについて
軽い気持ちでデモ展示の直前にSDKなどのバージョンを上げるのは止めましょう。VRの開発環境は複数の組織が日進月歩で作業を行っているため、組み合わせが変わると動作しなくなることが頻繁に起きています。展示の際は安定動作を基本姿勢としましょう。

特にノートPCでの展示の場合はOptimus問題などで特定の古いバージョンの組み合わせでないと動作しないこともありますので注意が必要です。また、開発はデスクトップPCで行い、展示はノートPCで行うような場合は特に展示環境での動作検証を**事前に**充分に行うことをオススメします。



# 展示編

## HMDを着けるときの注意

### メガネ対策
DK2本体横のダイアルを回すことで奥行きを調整することができます。メガネとDK2のレンズが干渉しないよう、奥行き調整は最大に延ばしておきましょう。さらにDK2付属のレンズBを使用すると内部の空間がより増えて安心です。
![DK2_Dial.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/5b3fde00-24ab-ee4a-a0a1-4c183d3cc660.jpeg)



メガネをお使いの体験者の方には、メガネを一旦外し、メガネだけ先にHMDにはめ込んでから被ってもらう方法が主流ではありますが、筆者は装着時間短縮のため、スポンジ部分を指で広げた状態で体験者に差し出して被ってもらうようにしています。レンズの大きなメガネは厳しいですが、慣れしてくるとメガネが入る/入らないはなんとなく判断できるようになると思います。
![151210_DK2_stretch.jpg](https://qiita-image-store.s3.amazonaws.com/0/33572/1fbfaa59-9aad-bfb7-6725-697fe443cef0.jpeg)




### 髪型/帽子対策
髪を結んでいる方もその位置によってはヘッドバンドと干渉してしまうため、場合によっては解いてもらうようお願いすることがあります。帽子を被っている方も同様に外してもらった方が安定した運用ができます。動きの少ないコンテンツであれば、HMDを手で支えてもらうことでヘッドバンドを使用しない運用も選択肢として考慮してもよろしいかと思います。


### 上バンドのマジックテープは毎回外して装着～調節してもらう
一般展示を行ってみて気付くのですが、人の頭の大きさというのは相当個人差があります。特に女性の方で極端に頭の小さい方もおられ、横バンドの調節だけではHMDがずり下がり、快適な視聴が困難になることがあります。

また、HMDのレンズと眼球の高さが合わないと映像がボヤけて見えるため、高さ調節は非常に重要です。ミリ単位のズレでボヤけたりハッキリ見えたりが変化しますので、上バンドは毎回外して運用し、体験者ごとに高さ調節を行うようにしましょう。
装着時には**「レンズと眼球の高さを合わせると映像がハッキリ見えるようになります」**など説明し、装着後に「タイトル文字がハッキリ見えますでしょうか？」など確認しましょう。映像がボヤけて見えるなら、HMDを上下に動かしながら**「上下に少し動かして、ハッキリ見える位置を御自分で探してみてください」**とお願いするようにします。ピントが合っているかは体験者本人にしか分かりませんので、本人に調節してもらう必要があります。このピント調整のためにも前述のタイトルなどの画面遷移を用意しておきたいんですよね。



## HMDを外す時の注意
メガネの掛けている方が自分でHMDを外そうとすると高確率でメガネを引っ掛けてしまい「痛たたた」となります。体験者よりも速くHMDに手を掛け、こちらの方で外してあげるようにしましょう。その際にやはりメガネに引っ掛けないよう、バンドの方を先に外し、HMD本体は前方に移動させるようにするとスムーズに外すことができます。


ヘッドフォン使用時も、体験者の方がヘッドフォンをつけたままHMDを外そうとすることが多く（没入してヘッドフォンをつけていることを忘れてしまっている）、体験者の方よりも速くこちらからヘッドフォン⇒HMDの順に外してあげるようにしましょう。HMDやヘッドフォンを外してもらうようVRコンテンツ内で手順を表示するのも良い方法かと思います。

あと、HMDを外したとき、体験者の髪がボサボサに崩れてしまっていることがありますので、その旨を伝えてあげると親切ですね。

## 荷物の置き場所を決めておく
体験中は目隠し状態になりますので、手荷物を膝の上に置いていると途中で落とされる方が多く出ます。荷物置きのスペースを確保してそこに置いて貰うようにすると体験がスムーズに行えます。カゴや折り畳み箱などを用意するなら、ある程度大きめ/倒れないよう底の浅いorしっかりしたものを用意するようと良いでしょう。


## 体験時間を把握し、待ち時間を提示しましょう
例えば、コンテンツ体験時間5分+体験者の入れ替えに1分、合計6分かかるとすると「１時間に体験できる人数は10名、8時間の展示時間で80名、待機列5名で30分待ち」という展示になります。OcuFesでは初期から言われているとこではありますが、体験者の総数や待ち時間を考慮するとコンテンツ側は90秒～2分くらいが程よいのではと個人的には考えています。入れ替え時間込みで1人につき3分で運用できるものですと「１時間に体験できる人数は20名、8時間で160名、待機列5名で15分待ち」の展示になります。
特に待ち時間を把握するのは重要です。お客さんの方も待ち時間によって列に加わるかどうかの判断をされることも多く、展示を行っていると待ち時間はよく質問される内容でもあります。また、展示終了時間が近づいたときに待機列を止める際にも体験時間の把握は必要不可欠です。

参考までにOcuFesの来場者数を提示しますと、2015/8/24に行われたOcuFes2015夏では平日の秋葉原にも関わらず1300名弱くらいの来場者数がありました。気負う必要はないと思いますが、好評だった場合にそれなりの人数を相手に展示することになる可能性は考慮しておいてもよろしいかと思います。（待機列を前にして休憩が取りづらく、結局飲まず食わずで展示することになったりするのはよく聞く話ではあります…、交代要員も確保しておくことをオススメします）
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/ocufes?src=hash">#ocufes</a>　本日のOcuFes2015夏、ご来場いただいた方々、出展していただいた方々、ご協力いただいた方々、本当にありがとうございました。おかげさまで来場者数1286名となりました。月曜日で人が来るのか実は心配でしたが、無事満員御礼となりました。改めてありがとうございました</p>&mdash; 桜花一門 (VR師匠) (@oukaichimon) <a href="https://twitter.com/oukaichimon/status/635815314484137984">2015, 8月 24</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>




## 内容をポスターなどで提示しましょう
VRコンテンツはどうしても体験してみないと内容が分からないという問題を抱えており、**お客さんの方も限られた時間の中でどの展示を体験するか悩んでおられます**（展示をお手伝いしていると、他の展示でオススメなのがないかよく聞かれます。が、スタッフ参加してても別途体験時間があるわけではなかったりしますので答えれないのです！　ブースによっては展示開始時間を過ぎてからスタッフが到着することもありますし…）。そのためにコンテンツの内容が体験前からある程度分かる情報の提示は強く求められる要素になっています。iPadなどのタブレット端末で動画を流しておくなどもよい方法かと思います。

最終的には体験してみないとその内容は分からないのですが、ポスターなどを用意することでお客さんのことを考えている/伝えたいことがあることはアピールできます。引いてはコンテンツの内容も体験者のことを考えて作られているという印象を受けます。コンテンツ制作だけでも大変なことになっていることは重々承知の上ですが、一般展示を行うのでしたら、コンテンツ制作だけではなく、ブース設置や接客も含めて楽しんでもらえるとありがたいなぁ、と個人的には思います。


## 呼び込み時の注意
会場で大声を上げての呼び込みはあまり好意的に受け止められません。場合によっては隣のブースごとお客さんが避けてしまうことがあり、他の出展者に迷惑が掛かることになりかねません。

お客さんに声を掛けるのは、あくまで**「お客さんがこちらに興味を持った瞬間」**に絞りましょう。それ以外のタイミングで声を掛けても避けられる可能性が高いです。逆に、タイミング良く「興味があれば是非～」など声を掛けることができれば、誘導率をかなり上げることができます。（経験上１０人に声を掛ければ7~8人くらいは誘導できます）

OcuFesなどの場合、VRに興味のある人がお客さんとして集まっているわけですから、呼び込みの難易度としてはかなり低い部類かと思います。それでも前述「内容をポスターなどで提示」し、お客さんがこちらの興味を持つタイミング（回数）を増やすことも誘導率を上げる手助けになります。

ある程度待機列が出来てしまえば、行列自体がお客さんの興味を引き、お客さんがお客さんを呼んでくれますので更に誘導率を上げることができます。（呼び込みよりも待機列を維持させる方がはるかに簡単なんですよね。待機列が５人くらいできると後が凄く楽になります）



# 最後に

特に今はVRというだけで喜んでもらえる時期でもあり、また体験者のその姿を含めてコンテンツになってしまう展示独自の面白さがあります。一般展示に足を運んだことのない人には是非足を運んでもらいたいですし、また体験側から展示側にまわる人が増えてくれると嬉しいなぁ、と個人的には思います。開発者にとって一般展示は見ず知らずの人が自分の作成したコンテンツで楽しんでくれる様子を直に見ることができる数少ない場所ですので、OcuFesなどの場を積極的に活用して頂ければと思います。

長々と書いてきましたが、これが唯一の正解というものではなく、OcuFes第0回からスタッフ参加し、商業を含めVRコンテンツの開発・展示に関わってきた身としての個人的な経験・試行錯誤に基づいた内容であること、ご了承ください。

明日のOculus Rift Advent Calendarは[MuRo](https://twitter.com/MuRo_CG)さんの「アニメの雰囲気をVRに持ってくる方法」です、よろしくお願いします。
それでは皆さま、よきVRライフを( ･ω･)ﾉｼ


---
使用モデル＞よ式初音ミク http://piapro.jp/t/QcRy
※この記事はピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「初音ミク」を使用したものです。