自作は本物の仕様に合わせて作るもの

 自作HMD作ったものの正直重たいです。テープで固定はしているものの、重いために外れてしまうのが心配で、あまり自由に動けないでいます。何とかしたいところです。
 そもそもGoogleが出しているGoogle Cardboardの設計に合わせて作る必要があったので、そこでいろいろと制約が発生しているんですよね。 アプリのほうは使用するスマホのディスプレイ物理サイズを自動で認識して出力する映像を補正するところまではやってくれるんですけどね。

Google Cardboard v2.0登場のせいで不具合?

 先日久しぶりに、Google Cardboardで遊んでみようと、純正Google CardboardにNexus7つけてみたんですが、映像がきれいに重ならずに2重に見えてしまってうまく立体に見えない事態に遭遇。 Google Cardboardは最近出たv2.0っていうやつじゃなくて2014年に出された古いほうです。 そういえばv2.0って写真で見ただけですが、レンズと画面間の距離が短くなってるように見えるんですよね…。 比較画像が見つからないけど、もしかして原因これか?

 レンズとディスプレイの間の距離が違えば、映像もそれに合わせて違うものを用意する必要があります。 新しいGoogle Cardboardが出たのでデフォルトの設定が新しい方の仕様になったんでしょうか?
対策方法は?設定変更は?
わからないので調べてみました。

Work with Google Cardboard

 Googleが、Work with Google Cardboardというサービスを始めていたようです。
 これを利用すると各メーカーが独自に設計したVR段ボールの設計仕様をアプリに反映させ、アプリをキャリブレーションできるようです。 キャリブレーションをするとそのメーカー独自HMDで見たときに正しく快適に利用できるよう映像が調整されます。 これによりメーカーはGoogle Cardboardコピーに縛られることなく自由な設計のVR段ボールを作ることができるようになりました。

 このサービスの対応商品は「Work with Google Cardboard(Google Cardboard 対応)」バッジをつけることができます。 VR段ボール購入ユーザーはこのバッジが付いている商品を購入するようにすれば安心して快適にVRアプリを楽しむことが出来る商品を購入できるわけです。

 またGoogleはVRアプリ開発用にAPIを用意しています。 Android用とUnity用がありiOSにも対応しているようです。 おそらくですが、先ほどのキャリブレーションへの対応はこのAPI使って作る必要があるのでしょうね。

 これで映像を調整する仕組みが用意されていることが確認できました。

アプリのキャリブレーション

 VR段ボールの仕様をアプリに反映させる(キャリブレーション)方法は説明によると簡単です。

 「Work with Google Cardboard(Google Cardboard 対応)」バッジがついている商品には必ず キャリブレーションのためのQRコードがついています。 これをVR段ボールにセットするスマホに読み込ませると設定完了です。

 では早速私が持っているクラッシックタイプのGoogle CardboardのQRコードを探してキャリブレーションしてみましょう。
QRコード、QRコード…と。
そういえば購入時についてたシールにQRコードが…ってこれはハコスコサイトのURLか。
QRコード、QRコード…と。
うん。ないな。バッジもないし。
そもそもWork with Google Cardboardが始まる前の商品だしついてるわけないな。
うん、知ってた。orz

QRコードを探す

 設定用QRコードは古い商品にはついていません。 どうやらハコスコにもついていないらしいですね。 仕方がないので何とか頑張って設定する方法を探してみました。

  1. GOOGLE CARDBOARDのサイトにアクセスする。
  2. 「ビューアを手に入れよう」の「ビューアを手に入れる」をクリック。
  3. 自分が持っているものに該当する商品を探して「購入」をクリック。
    私の持ってる旧タイプのGOOGLE CARDBOARDの場合だと「CLASSIC (CARDBOARD)」が該当商品です。
  4. 商品のリストが表示されるので、自分が持っているものに該当する商品を探してクリック。
    商品ページが開く。
  5. 商品画像の中にQRコード画像があると思います。なければ、一つ戻って他の商品を当たってみてください。
    このQRコードを読み取るとこの商品をビューアとして設定できます。

もし該当商品を見つけることができなかった場合は次の方法も試してみてください。

  1. I AM CARDBOARDにアクセス。
  2. 右上の検索窓から検索。 私の持ってる旧タイプのGOOGLE CARDBOARDの場合だと「CLASSIC」などがいいようです。
  3. それらしい商品が表示されるので1つをクリック。
    商品ページが開くので、商品画像の中にQRコード画像がないか探す。

私が持ってる「CLASSIC」の場合だとこの商品が該当するようです。
I AM CARDBOARD VR CARDBOARD KIT WITHOUT NFC
QRコードを読み取ってみると「http://goo.gl/a61xB2」こんな感じの短縮URLになっているようです。

QRコードを見つけたら、印刷してHMD(ビューア)本体に貼り付けておくとVR段ボールを人に貸す時などに便利だと思います。

ビューア プロフィール生成ツール

 さらに調べていると「VIEWER PROFILE GENERATOR(ビューア プロフィール生成ツール)」というものを見つけました。 メーカーはこのページで独自設計のVR段ボールのパラメータを登録し、QRコードを取得するようです。

 前半のGETTING STARTEDは何が書いてあるのか理解できないのですが、ひとまず気にしなくても問題ないようです。 設定はVIEWER PARAMETER FORMの項目で行います。 右側に表示される説明に従って情報を入力し、最後の「Generate Profile」ボタンを押せばQRコードが取得できます。

…あれ、これって個人でも登録できるんじゃない?
と思って調べてみたところどうやら個人でもViewer Profileが作れるようです。 ハコスコ(二眼タイプ)にはQRコードが付いていないため、自作している方を発見しました。とても参考になりました。
ハコスコ用GoogleCardboardプロファイルを作った
http://shujji0079.blogspot.com/2015/10/googlecardboard.html

さて、自分でViewer Profileを作成する手順は次のようになります。詳細は省きます。

  1. VIEWER PARAMETER FORMのSave or load viewer parametersボタンをクリック。
    URLが入力されたインプットボックスが表示されます。このURLに含まれる文字列にはこの下で設定した内容の情報がすべて記録されています。 後で設定をやり直したい場合は、設定終了後にこのURLを保存しておきましょう。 設定を呼び出す場合は、URLをこの入力欄に張り付けてください。瞬時に設定が読み込まれます。
  2. Your Companyから順に設定してください。
    右側に解説が表示されます。
  3. Distortion coefficientsは0.00のままにはできません。
    必ず0以外の値を設定する必要があります。ClassicのCardboardだとk1、k2ともに0.25になっているようです。
    ここが0のままだと最後のGenerate Profileボタンが押せない状態になります。
  4. Advanced viewer parametersは設定する必要はありません。
  5. すべて設定したら、一番下にGenerate Profileと書かれた青いボタンがありますのでこれをクリックします。
  6. 「SUCCESS!」の文字と一緒にQRコードが表示されます。画像はPNGとSVGでダウンロードできるので好きなものをダウンロードしておきましょう。

 ここで作成したQRコードの中身は短縮URLになっています。 短縮URLの正体はというと… Save or load viewer parameters です。 QRコードで読み取った短縮URLを短縮URLを展開するサービスで展開すると元の長いURLが取り出せます。 取り出したURLを Save or load viewer parameters の入力ボックスに張り付けると、設定を呼び出すことができます。 つまり、市販のVR段ボールについているQRコードから設定を取得することもできるわけです。 自作HMDの設定をする際の参考にちょうどよさそうですね。

自作HMDのビューア プロフィールを作成してみた

作成方法が分かったので、試しに以前作成したNexus7用自作HMDのプロフィールを作成してみました。
プロフィール QRコード
Save or load viewer parameters(設定内容です。この項目に↓このアドレスを入力すると設定が呼び出せます。)
http://google.com/cardboard/cfg?p=CgVKYXBhbhIKTmV4dXM3IEJPWB3NzMw9JY_CdT0qEAAASEIAAEhCAABIQgAASEJYATUpXA89OghmZuY-ZmbmPlAAYAA

 作ったので使ってみました。
 Cardboardを起動して右上の「…」から「設定」を開いて「ビューアを切り替え」をタップ。QRコードを読み込む…おお、設定できた。 適当なVRアプリを起動…おー、瞳孔間距離補正用のアクリル板なしでも二重に見えない。正常な画面を見ることが出来ました。アクリル板がないから軽い!!
 しかしレンズと画面の距離が100mmと離れていたので思ったほどの視界は確保できませんでした。普通のGoogle Cardboardと変わらない感じです。 大画面が生かせてませんね…。
 Google Playにあるユニティちゃんの「イチャまくら」も試してみました。 こちらはCardboard APIが使用されていないせいなのかどうかわかりませんが、プロフィールが反映されていませんでした。

 しかしこれで、対応アプリで使うのであれば瞳孔間距離やディスプレイサイズなどを気にせず作っても大丈夫だということが分かりました。 レンズを老眼鏡ではなくGoogle Cardboardやハコスコ用のレンズを流用し、ディスプレイをNexus7で作ればレンズと画面の距離が近くできるので、スマホ以上の視野角が確保できそうな気がします。 新しいGoogle Cardboard購入して古いのを潰そうかな?