【初VRなエンジニア向け】実は簡単に作れるVRアプリケーション(ツール編)
2016年 12月 02日
Advent Calendarとしては12月最初の月曜日に公開される記事ということで、気軽な気持ちで読んでいただければ。
こんにちは。Woman技術の三浦です。
実はエンジニアブログに投稿するのは2回目(第1回はこちら)でして、自己紹介は省略させていただきます。
さて、第2回目となる今回は、前回のWeb開発技術から一転、VRについて書いていきます。
というのも実は、学生の頃にVRに関する研究をしておりまして。
その時感じた「あれ、VRって意外と簡単に作れるんだな」という感覚を、その頃使っていたVRの開発環境をもとにお伝えしたいと思います。

目次
- VRへの注目
- VRとは
- VRアプリケーションを開発するには
- 終わりに
VRへの注目
最近は、VR(Virtual Reality、バーチャルリアリティ)がちょくちょく話題に出ることが多くなりました。
特にそれはPSVRのお陰ということができると思います。
このように大手の会社がVRゲーム、VRアプリケーション開発に関係してくると、一見VRとは特殊な技術がないと開発できない領域であるように感じてしまうかもしれませんが、そんなことはありません。
むしろPSVRの出現以前から、自作のVRアプリケーションを開発してきた人はたくさんいました。
というわけで、自分でVRアプリケーションの開発をするにはどうすればよいかを、簡単にではありますが、自分の経験をもとに紹介していきます。
VRとは
まずは簡単なおさらいから。
そもそもVRとは、仮想現実とある通り、現実とは異なる空間を、現実であるかのように体感させるもののことです。
これには、大きく分けて2つの要素が必要です。
1つ目は、現実との違いが少ない3D空間。
2つ目は、その3D空間を現実と同じように感じるためのデバイスです。
VRのアプリケーションを作ろうとすると、その2つが必要となるわけです。
そして同時に、それら2つをどう揃えるかが、VRアプリケーションを開発する上での足かせになるのではないでしょうか。
3D空間
VRアプリケーションを開発する上で必須な一つ目の要素が、3D空間です。

ただし、仮想空間を現実と体感させるためには、単純な3D空間では足りません。
その空間に存在する物体の見た目を決めるモデルやテクスチャ、重力や当たり判定等の物体の動きを決める物理演算など、考えるべきことはたくさんあります。
この3D空間は、一から自分で作ろうとするのはあまり現実的ではありません。
デバイス
仮に3D空間ができたとして、それだけではVRとは呼べません。
例えばPCの画面で3D空間を見ても、それを現実と同じように立体的に感じることはあまりないでしょう。
そこで、その3D空間をより現実と同じように感じるためのデバイスが必要になるのです。
もっとも代表的なVRデバイスは、HMD(Head Mounted Display、ヘッドマウントディスプレイ)といえます。

左右の目で、わずかにずれた異なる映像を見えるようにすることで、現実の空間と同じような立体感を3D空間でも味わえるようにするディスプレイです。
しかしアプリケーションによっては、それだけでは十分ではない場合もあります。
視覚だけでなく、操作方法もより現実に近づけたい、という場合も考えられます。
こういったデバイスには、どういうものがあるのでしょうか?
また、手に入れたとして、それらデバイスと3D空間は、どのようにつなげれば良いのでしょうか?
VRアプリケーションを開発するためには
実は、これらの問題はそこまで難しい問題ではなかったりします。
それぞれの問題点の解決方法を、実際私がかつて行った方法に沿って紹介していきます。
3D空間
モデル、テクスチャ、物理演算など、数えだしたら考えるべきことにキリがない3D空間。
一から自分で作るのが難しいなら、すでに存在する3D空間エンジンを使用するのが良いでしょう。
私が使ったのは、Unityというゲームエンジンです。
ゲームエンジンと銘打たれていますが、私は研究で使った、と言えば分かる通り、その応用範囲は非常に広いです。
デフォルトで詰め込まれているモデルやテクスチャも存在しますし、自分で作ってそれを導入することもできます。
また、アセットストアと呼ばれるUnityのウェブサイトで、様々な人が公開しているものを取り入れることも容易にできるようになっています。
物理演算も各種取りそろえられており、例えばコーディングの技術がなくても、重力の演算やモノ同士の衝突演算などが簡単にできるようになっています。
さらに、簡単なJavaScriptかC#の知識さえあれば、もっと多種多様な挙動をさせることができるのです。
そして驚異的なことに、それだけ揃っていて、Unityは基本的に無料で使うことができます。
pro版やアセットストアの有料コンテンツなど、お金を払えばより良質で、より幅広いことができるようになるのは事実ですが、とりあえずVRアプリケーションを開発するにあたっては、無料で十二分です。
Unityのサイトには開発のためのチュートリアルが存在しますし、ネット上にもUnityに関して取り扱った様々なサイトがあります。
もちろん、VR以外にも様々な応用範囲があるエンジンですので、興味を持たれた方は、とりあえず使ってみることをおすすめします。
デバイス
さて、3D空間に関しては、Unityを使うこととしましょう。
では、デバイスはどうすればよいでしょうか?
まずは、VRといえばこれ、HMDについて考えていきましょう。
HDM
今巷で最も有名なHMDは、PSVRのHMDかもしれません。
大々的な宣伝や、元々の会社の知名度から、それもやむ無しと行った所です。
ですが、私が研究をしていた当時はPSVRはなく、別のものを使っていました。
それがOculus Riftと呼ばれるHMDです。
これは当時、開発用のHMDの草分け的存在の一つでした。
このHMDの特徴は色々とありますが、その一つに、Unityとの接続が容易、と言うものがあります。
公式にUnityとOculus Riftをつなげるためのプラグインが提供されているため、Unityで作ったプロジェクトに、簡単にOculus Riftをつなぐことができます。
HMDの動きをセンサーで感知しているため、首を傾けたり見る方向を変えたりすると、見えている角度や範囲もその通りに変化してくれます。
自分で作ったプロジェクトをHMDを通して見ることは、非常に感動的な体験になるはずです。
Oculus RiftはUnityと違い無料ではないので購入する必要がありますが、今後自分でVRのプロジェクトを作ってみたい、という方は、検討してみても良いと思います。
コントローラ
さて、3D空間もHMDも手に入れて、だいぶVRらしくなってきました。
ただ、プロジェクトの内容によっては、それでは不十分だと感じるかもしれません。
操作方法が、原因になりうる要素の一つといえます。
VRは現実を模したものですが、操作方法に気を配らなければ、マウスやキーボード、ゲームパッドなどを使うことになります。
これはもちろん現実でのモノを動かしたりする方法とは異なるわけで、もしそういった部分まで現実に似か寄らせるのであれば、そのためのコントローラが必要になります。
私がそのために使っていたのは、Leap Motionというものです。
大きさは、手にすっぽり収まるくらいに小さなものですが、これが非常に高精度なコントローラとなっています。
誤差1mm以下で手のひらや指を感知し、その動きをそのままプロジェクト側に伝えることができます。
もちろんこれも公式にUnityと接続するためのプラグインが公開されているため、Leap Motionを購入しさえすれば、簡単にUnityのプロジェクトとつなげることができます。
デモも用意されているのですが、初めて触ると非常に感動するくらい、動きも精密ですし、画面内でモノを「触っている」気分になります。
こちらも無料とは行きませんが、興味があれば一度ぜひサイトを見てみることをおすすめします。
終わりに
いかがだったでしょうか?
実はVRのプロジェクトを自分で作るのは可能である、ということが理解していただけたでしょうか?
PSVRが出たことで賑わっているVR界隈ですが、だからこそいま、VRのプロジェクトを開発してみる、というのも良いと思います。
また、今回紹介した以外にも、例えば3D空間であればUnrealエンジンですとか、HMDであればGearVR、コントローラであればMicrosoftKinectなど、様々なエンジンやデバイスがありますし、今後は触覚や嗅覚などにも訴えかけられるデバイスが登場することでしょう。
そういったものを使うと、今回紹介した事以外にも色々と表現できる幅が広がるはずです。
この記事を読んだみなさんに、少しでもVRプロジェクトの開発に興味を持っていただけたら幸いです。
さて、Advent Calendarはまだまだ始まったばかりです。
明日はどのようなどのようなお話が見られるのでしょうか?どうぞお楽しみに!
エンジニア募集
エキサイトではエンジニアとして一緒に働いてくださる方を新卒採用と中途採用で募集しています。
詳しくは、こちらの採用情報ページをご覧ください。