2014年6月30日月曜日

【自作】1分で作れる Oculus Rift っぽいスマホ VR HMD (ヘッドマウントディスプレイ)【安価】

※もはや百均で VR ゴーグルや VR メガネそのものが買えるので、自作する意味はほぼ失われました。
ただしそれらは高価な製品に比べるとレンズなどの質が落ちるので注意です。
楽しみかた(コンテンツ)はこちら

まずは完成品の写真をご覧ください↓


おっと!バカにするのは実際に試してからにしてもらおうか!(`・ω・´)

Oculus Rift を体験した衝撃から自作する方が多いようですが、どうも工作に自信のある方のハイレベルな物ばかりなので、もっと究極に手軽なものを考えてみました。

また、先日 Google I/O で配布されたダンボールで自作できる Cardboard もかなりお手軽な感じはありますが、自作するには部品点数も多くダンボールといえど高いカッティング技術が要求されるなど、まだまだ難度は高いように感じます。

※ 最近では簡単に作れるキットも発売されています。
ハコスコ
タオバイザー|TaoVisor

このページでは簡易 VR HMD の作り方や楽しみ方の紹介をしています。
こうやって使うのデス!

■ では早速作り方!

完成品を見れば一秒で理解できる構造(?)ですが、実は色々と注意点もあるので最後までよく読んでね。
まず以下のものを用意してください。
  1. 画面サイズ5~7インチ程度のスマホ
  2. 置き型ルーペ(2個)
  3. セロハンテープ
手軽とか謳っておきながら初っ端にスマホを要求するところが詐欺臭いですが、電子工作なしでディスプレイからトラッキングまでを実装できる唯一の方法なので、これを外すことはできません;

☆ 注意点その1:画面サイズについて

[2016/12/28追記]
Google 先生が画面サイズに依存しない方法を考案してくれました。
これで画面サイズの問題はほとんど解決できます。
詳しくは「iPhone で VR (YouTube・Cardboard )がずれる場合の対処法(android もOK)」の解決策その3をご確認ください。

スマホなら何でも良いというわけではありません。
特に画面サイズ(幅)が重要です。
詳しくは下の図をご覧ください。


つまり中心が大きくズレないことが条件です。
多少のズレ(特に内側へのズレ)は眼球がどうにかしてくれます。(疲れやすくなるけど)
個人差もありますが、昨今の5インチディスプレイ端末であればたぶんOKです。
7インチでもいけるらしいのですが、モノがないので未確認です。(FakeRift では7インチを採用してる)

次に至近距離からディスプレイを見れるようにするための、凸レンズが必要になります。
置き型ルーペであればピント調整や外装を用意する必要もなく、取り付けるだけで完成させることができるのでお勧めです。

ただし恐らくこのルーペを調達することが、最も困難な工程になるかと思います。

☆ 注意点その2:ルーペの選び方

置き型ルーペであれば何でも良いというわけではありません。
そもそも画面内に2つ置ける大きさである必要があります。


没入感に大きく関わる部分なので、余裕のある方は色々な製品で試してみることをおすすめします。
私は運良く丁度いいサイズのルーペが100均で用意できたのですが、そうでない方はこの部分を自作する必要があります。
その方法は後記『置き型ルーペを自作する』を参照してください。
(実は写真のルーペも一手間加えることでより良くできることが後で分かりました⇒『改良してみた』)
先の完成品の写真では以下のものを使用しています。
  1. Samsung Galaxy S III
  2. 100均のルーペ


ちなみに百均でルーペは文房具コーナーではなく老眼鏡コーナーにあることが多いです。
ルーペの位置は個人差があるので一概には言えませんが、まずは両画面の中心にルーペを置き、実際に映像を確認しながら見やすいと思う位置に微調整しましょう。
あとはルーペをテープで固定すれば完成です。


なお、テープはスマホを持った時の上側一箇所だけで止めておけば、ルーペをペロンとひっくり返すだけでタッチ操作ができるようになるので楽チンです。

■ 楽しみ方(コンテンツ)

追記:Youtube ではヘッドトラッキング機能を利用した360°動画も楽しめます。
下記の3D検索と同様に360°動画も絞り込み検索できます。
「#360Video」で検索してチャンネルにアクセスし、360Video のハウス チャンネルを開きましょう!
動画のメニューで Cardboard を選択すれば左右の2画面にできます。
ただし360°=3D動画ではありません!(これ超重要)
ただの 360°動画を左右2画面にしても立体視の効果はないので騙されないようにしてくださいw(360° 3D 動画も無くはない)
最も手軽なのは YouTube の3D動画やニコ動にある立体視(平行法)の画像や動画です。
ヘッドトラッキング機能は利用できませんが、数も多く再生するだけで手軽に楽しめます。
「立体視」や「平行法」などのキーワードで検索すると捗ります。
※ただしスマホの画面と縦横比率が異なり中心がズレるタイプのものは利用できません(ニコ動に多い)
また、YouTube では3D動画を絞り込み検索できます。



専用アプリであればヘッドトラッキング機能を利用した、より没入感の高いコンテンツを楽しむことができます。
同じようなアイデアで作られた自作 VR HMD 用アプリも色々と出ているので、いくつかご紹介します。
ちなみにここで紹介しているものは全部 Android 用です。



Tuscany Dive


Dive City Rollercoaster


The Height Demo

足元にボタンがあって視点を数秒合わせると歩き始めるとか色々工夫されていて面白いです。
Android 対応ゲームパッドがあれば、より本格的なゲームも楽しめます。
まぁ本機では両手がふさがってるから無理ですがねw



REFUGIO 3D Space-Station


Hang Gliding


Shadowgun VR

この他にも色々あります↓
ハコスコに対応している iOS、Androidアプリの紹介(ハコスコ以外でも利用できるもの多数)
divegames のゲーム一覧ページ
REFUGIO3D のゲーム&動画紹介ページ(消えた?)
なお残念ながら Oculus Rift 対応のゲームを遊ぶことはできません。
あと、部屋を暗くしたりイヤホンを使用したりすると、臨場感&没入感がましてイイ感じになります。

■ 置き型ルーペを自作する

そもそも置き型ルーペ自体手に入りにくいので、比較的どこの百均にもある虫眼鏡タイプのルーペで代用する方法を考えてみました。
ルーペは以下のようなものを選びましょう。
  1. できるだけ画面上に2つ収まるサイズ
  2. それでいて、できるだけ大きいもの
  3. できるだけ拡大率(倍率)がいい感じのものw
てか「拡大率がいい感じ」ってナンヤネン!と思われるかもしれませんが、画面やレンズのサイズによって最適な倍率は異なるので、実際に店頭でスマホにかざして試してみることをおすすめします。
(そもそも「○倍率」とかの表示自体が微妙に信用できないです…)

なお、2~3倍のレンズでは数枚重ねなければ、まったく話しにならないレベルです。
そのため、手に入るレンズのサイズと倍率にもよりますが、少なくともこれが2セット(計4個)くらい必要になることが多いです。
小さいお店だとデカイくせに倍率2倍とかのしか無い場合があります。
(そもそも大きいレンズより小さいレンズのほうが倍率を高くしやすい)

どうしても2~3倍のものしか無いという場合は、片側4枚重ねの計8個とかになる場合もありますので覚悟してください。
では、具体的な試し方を説明します。


  1. レンズと目の距離を可能な限り近づける
    (レンズの外が見えないようにするため。大きいほうが許容範囲が広くメガネにも対応しやすい)
  2. その状態でピントが合う位置まで画面に近づく
    (目は遠くを見る感覚のまま、距離でピントを合わせること!)
  3. その状態の視野によって判断する
    • A.広すぎる(余計なものが見えてしまう)
      ⇒倍率が低いので、より倍率の高いものに替えるか、もう一枚重ねて再度1.からやり直し。
      ※妥協点:既に3枚以上重ねてる
    • B.丁度いい
      ⇒その組み合わせで利用できそうです。
    • C.狭すぎる
      ⇒倍率が高すぎる。倍率が低いものに替えて再度1.からやり直し。
      ※妥協点:ほかにない
※この試し方は片目でもおこなえます。
※多少広かったり狭かったりしても、使えないわけではないのである程度は妥協も必要です。


先にも書きましたが文房具コーナーではなく老眼鏡コーナーにあることが多いです。
「やだあの人、老眼鏡でスマホ見てるプププ」という視線に晒されることもありますが、とにかく根性でいい感じのものを探してくださいw

ルーペが用意できたら、早速取り付け作業に入りましょう。
あらかじめ実際に映像(ヘッドトラッキングしない動画や静止画)を再生しながら、ルーペの組み合わせを確認したり、画面との距離や位置などを測り、最適な状態をメモしておくと良いでしょう。


土台(?)には加工しやすい紙コップを使用します。
高さ調節も簡単ですし、なにより円錐形なので視野も保たれます。
紙コップの底をカッターで切り取り、ピントが合うよう高さもカットしてルーペを載せれば完成です!
わ~カンタン!

まぁ組み合わせによっては使えない方法かもしれないけど、各自こんな感じで工夫してみてね!
なお、上記の例では3.5倍ルーペを2枚重ねで使用していますが、それでも視界に余計なものが入ってしまいます。

同じ製品を使用している方は3枚重ねにして距離を縮めることをお勧めします。

■ もう一手間加える

コップの内側を黒く塗りさらに室内を暗くすれば、余計な部分が目立たなくなり見やすくなります。


特に両目で見た時の反射によるチラツキが抑えられます。

レンズだけにするとコンパクトにできます。
重ねにくくなりますが、重い場合や幅があり過ぎる場合に有効です。
ノコギリなどで写真のように一部をカットすればレンズだけ取り外せます。
取っ手を切り取るだけでも軽量化になります。

■ 改良してみた

市販の置き型ルーペをそのまま利用してもそれなりの成果を得られましたが、少し視野が狭いと感じたので、その点を改良してみました。

特定の製品を使用しているため、参考になるか分かりませんが何かの足しになれば幸いです。
さて、「視野が狭い」ということは「倍率が高過ぎる」ということなので、そこを調整する必要があります。

当該置形ルーペはキャップを開けるように回せば、簡単に分解できます。

幸いなことにこのルーペではレンズを2枚使用していたので、1枚外すだけで倍率を下げることができます。
(商品は3倍率と謳っていますが、これ一枚で3.5倍と謳っているルーペより拡大率が高かったです…
何をどう信じたらいいのか分かりません;)

ただし、それだけでは今度はピントがズレてしまい使い物になりません。

ピントを合わせるには画面から少し離す必要がありました。
そこで、下に倍率低め(といっても3.5倍)のルーペを敷いてみたところ、ぴったりと合いました。


あ、あとキャップも外しています。(縦にした時レンズが落ちないようにもした)
結果これだけの効果がありました。(実際にレンズ越しに撮影したものです)


周りがよく見えるようになり、ドットの荒さも気にならなくなりました。
同じような製品が手に入る方は、ぜひお試しください。(/・ω・)/

■ 過度な期待は禁物ですw

当たり前ですが、いろいろな面で Oculus Rift には及びません。
  1. 期待したほどの没入感はない(組み合わせにもよるけど)
  2. Oculus Rift のゲームは遊べない
  3. トラッキング遅延
  4. そもそもヘッドにマウントしてないよね
ディスプレイやレンズのサイズによっては期待したほどの没入感は得られないかもしれません。
多くの手作り VR HMD では7インチを採用しているので、その方がいいのかもしれません。
私は5インチでジェットコースターのアプリをワクワクしながら起動してみましたが、別に全然ギャーとかなりませんでしたw
より高品質な体験を希望する方は、素直に Oculus Rift を注文しましょう。

■ 参考資料

タオバイザー|TaoVisor
FakeRift関連
FakeRiftクラウドファンディングのためのメモ
https://media.dmm-make.com/maker/379/
Google Cardboard
Durovis Dive
REFUGIO 3D
iPhone 向けダンボール製の簡易 HMD キット『ハコスコ
「スマートフォン用ポータブル・VRケース」

2014年6月22日日曜日

windows の stencyl 3.0 系で Extensions が正しく読み込まれない場合の対処法

まず、Extension は windows 版であれば
C:\Users\[ユーザー名]\AppData\Roaming\Stencyl\stencylworks\engine-extensions\
フォルダの中にインストールされます。

それ以外にも
C:\Program Files\Stencyl\plaf\haxe\extensions\
というフォルダ内にもそれっぽいのが入っていますが、ここは違うようです。(現在は使用されていない?)

で、外国で「Extensions ガ、ヨミコマレナイデース」とか「Extensions ガ、インストールデキナイデース」とかの問題の多くは前者のフォルダに解凍した extensions をぶち込めば解決するぜブラザー!とかいう回答ばかりなのですが、私の場合は違いました。
もしかして日本語環境でのみ発生する問題なのでしょうか?

そもそも既存の Extension (Tile API や Test Extension)ですら有効化してもブロックが追加されないので、よくよく調べてみたところ各フォルダ内の blocks.xml が正しく読み込まれていないことがわかりました。

どうもこの XML には Unicode の BOM (byte order mark)が追加されているようで、それをテキストエディタで無しにすることで Extension が機能する(拡張ブロックが利用できる)ようになりました。

上記が直接の原因かはわかりませんが、単にインストールするだけではダメな場合は一度お試しください。