【雑記】スクリーンレスタイプのVRを流行らせたい
はじめに
私が大学の研究室でVRの研究をするなかで、ずっと考えていることがあります。
それは『もっとVRを一般的に広めたい』ということです。
もちろんのこと、"VR"は日本のみではなく世界中に周知、注目されています。
しかし一般の人はVRを知ってはいても、実際にVRを体験する機会というのはなかなか無いと思います。
実際にVRの現状に関してこんな記事が書かれています。
(引用:https://wrap-vr.com/archives/36981)
こちらの記事では、"スマートフォンを使ったVRがおすすめ"と書かれています。
本タイトルにもある通り、私もこの考えには大いに賛成します。スクリーンタイプはこれから大きく進歩します。
私がここまでスクリーンレスタイプにこだわるのには理由があります。本記事ではその理由について話していきます。
1.価格が安い
皆さんは"VR"といえばどんなものを思い描きますか?
もしかしたら海外の方だと「スタンドアロン」と言う方もいらっしゃるかもしれませんが、日本では一般的にはPlayStation VRやHTC Viveなどのケーブルタイプが挙がるかと思います。
では、そのPlayStation VRやHTC Viveは一体どういった価格で流通しているのでしょうか?
実は・・・、
Oculus Rift : 50,000円
HTC Vive : 69,390円
PlayStation VR : 37,770円
高過ぎるわけではありませんが、買うとなると手の出しにくい価格なのです。
しかしスクリーンレスタイプはこの問題を解決してくれます。
スクリーンレスタイプはハコスコやGear VRなどが代表的であり、その価格は700~12,000円と非常にリーズナブルになりますし、提示媒体はスマートフォンなので改めて買う必要もありません。
一般の方にVRを気軽に体験してもらうには価格の問題解決も必要です。
2.持ち運びが簡単
PlayStation VRやHTC Viveなどのケーブルタイプは、据え置きのPCとHMDをHDMIなどのケーブルで繋ぐことで使用できます。
ケーブルタイプはスペックは良いですが、持ち運びが非常に困難ですし、体験中にケーブルが邪魔になってしまいます。
スクリーンレスタイプなら持ち運びも簡単ですし、ケーブルもありません。
非常に身軽な状態での体験ができるのです。
3.開発/リリースの環境
スクリーンレスタイプは基本的に、スマートフォンを提示媒体とします。ですので、スマートフォンのアプリケーションが開発できればスクリーンレスタイプのVRを開発することができます。
VRアプリケーションを開発する主なツールとして、よく『Unity』と『Unreal Engine』が挙げられます。この2つのツールの最大の特徴は、「直感的な開発ができる」ことです。
・Unity(URL : https://unity.com/ja)
・Unreal Engine(URL : https://www.unrealengine.com/ja/features)
"開発"といえば多くは"プログラミング"想像しますが、この2つのツールはアセットや設定などを使い、マウスを主に可視的に開発ができます。なので、コード言語が書けなくても開発ができるので親しみやすいツールとなっているのです。(もちろん、コードも書けます。)
それにこれらのツールは¥0~からのプランもあり、非常にリーズナブルです。
また、スマートフォンはリリース環境も整っており、(Google Play, App Store, など)開発したアプリケーションを気軽にリリースできるという利点もあります。
スクリーンレスタイプは開発者側にも優しいコンテンツなのです。
4.次世代移動通信回線『5G』の普及
これまでスクリーンレスタイプの優位性について書いてきましたが、そんなスクリーンレスタイプにも、もちろんですが欠点があります。それは、
・高品質コンテンツへの非対応(スペック不足)
・操作性/自由度の不足
・対応機種の量
仕方のないことですが、「VRにリアルを求めたい」、「色んな対話操作を取り入れたい」という声もあり、スクリーンレスタイプがなかなか提示媒体として選ばれない、というのが現状です。
しかし、スクリーンレスタイプの提示媒体となるスマートフォンも日々進化し続けています。
皆さんも聞いたことがあるかもしれませんが、近年サービス開始予定となっている『
次世代移動通信回線「5G」』。
この技術がスクリーンレスタイプVRに大きな進展をもたらしてくれると私は考えています。
「5G」は、従来の移動通信の精度を大きく上回る速度と強度を持っていると言われています。おそらくですが、通信によるラグを大きく軽減してくれます。
スクリーンレスタイプVRは従来、アプリケーションをスマートフォン内で動かしていたために、スマートフォンのスペックに左右され続けてきましたが、アプリケーションを他の高品質PCで処理し、サーバを介してスマートフォンで提示のみさせることで、スマートフォンの負担が大きく減り、スマートフォンのスペックに左右されない環境を創り上げることが可能になります。
提示媒体の進展に併せてスクリンレスタイプも同様に進化できるのです。
5.まとめ
「なぜスクリーンレスタイプのVRを流行らせたいのか?」ということに関して書いてきました。
正直なところを言うと、他のVR機器にも利点は必ずあります。私も研究のなかで「HTC Vive、いいなぁ。。」と思った事もありました。
ですが、私が抱き続けている『もっとVRを一般的に広めたい』という思いを考えた時に、"手軽さ"を重視すべきだと考えたからこそスクリーンレスタイプを強く押しているのです。
これからもVRは更に進展し、全世界に広まっていきます。
私も、私なりの方法でVRを全世界に広める1つのきっかけを創っていきたいと望んでいます。
そしていつかVRが『いつでも・どこでも・だれでも』体験できる時代が来るように、私も日々努力していきます。
Unityの3D空間に"現実に限りなく近い3Dマップ"を作る方法(地形編)
はじめに
私は研究の一環として、現実に限りなく近い3D空間を作っています。
実の所、私自身まだ完成に至ってはいません。(建物や小物など)
ただ、都市開発、疑似観光、シミュレーションのシステムを作る人は可能な限りの再現が必須だと思うので足掛かりになればと思い、方法を伝授します。
あと、ゲームとかでステージ作るのに困ってる人にも役に立つかもしれません。
使用ツール
・基盤地図情報ビューワ(URL:https://fgd.gsi.go.jp/download/documents.html)
・Blender(URL:https://www.blender.org/download/)
・Unity2017(URL:https://unity3d.com/jp/get-unity/download)
今回の3D空間の地形作りでは、"コードを書く"という難しいことはしません。与えられたスクリプトやキット、ツールの機能を最大限上手に活用するだけで写真の地形が作れます。
1.シェープファイルを取得する
まず、国土交通省が管理する国土地理院というサイトから欲しい地域の"数値標高モデル"をzip形式でダウンロードします。(事前にユーザ登録が必要です)
次に数値標高モデルをシェープファイル(.shp)に変換します。
基盤地図情報ビューワを開き、ダウンロードしたデータをフォルダごとビューワにドラッグ&ドロップしてください。
地形がヒートマップで表示されていれば成功です。
ビューワを使ってシェープファイルに変換します。
メニューバーから、「エクスポート」→「標高メッシュをシェープファイルへ出力」→出力先を選択して「OK」。
出力先に".shp"以外にも色々と出力されますが使うのは".shp"のみです。
2.Blenderで地形のフェイスモデリング
1章で取得したシェープファイルを使って地形の型を作ります。
その前に、Blenderにはシェープファイルをインポートするアドオンが無いので外部からアドオンをダウンロードします。
・BlenderGISアドオンのGidhub
https://github.com/domlysz/BlenderGIS/commit/e012070408c2d590f16b3ab7fea758223fa8dfba
・アドオンのインストール方法
https://github.com/domlysz/BlenderGIS/wiki/Install-and-usage
アドオンを設定したら、シェープファイルをインポートします。
インポートすると絵のように点群で表示されます。
この点群を基に地形の型を作ります。
Blenderのフェイス機能を使って1枚1枚面を張ってもいいのですが、地形の広さによってかなり労力が掛かるので、私は「Point Cloud Skinner」というスクリプトを活用して自動でメッシュに面を張りました。
・Point Cloud Skinner
https://sourceforge.net/projects/pointcloudskin/
面を作りました。
形はなんとなくわかりますが、面がすごく粗く作られました。
しかし、この問題は簡単に解決できます。
Blenderには面の法線ベクトルを一様にする機能がありますのでその機能を活用して面を整理します。
地形オブジェクトを選択(オブジェクトの縁が黄色になります。)
↓
"オブジェクトモード"を"編集モード"に変えます。
↓
[Ctrl+N]を押す。(面が1回では最適化されない場合があるので複数回操作を繰り返す。)
最適化すると面の向きがきれいになります。
これで地形を作る型ができました。
補足:面の法線ベクトルが正規の向きに向いているかどうかを目で見たい方は、以下の様な手段で法線ベクトルが可視化できます。
画面上で[N]を押してタブを出します。
↓
タブ上の「法線」の項目で面を選択し、長さを設定します。
3.Unityで地形作成
実は、Blenderで地形を完全に作らず、地形の大まかな型だけを作ったのには理由があります。
それは、Unityには"Terrain"という地形を作るのに適したオブジェクトがあるからです。
Terrainは手動で地形を変化させることができるうえ、木や草などのオブジェクトやテクスチャを自由に加えることができます。
そしてなによりメッシュより容量が軽いです。
このTerrainを使って実際に地形を作るのですが、地道に手動で地形を再現するとなると膨大な時間を食ってしまいます。
ですのでスクリプトを活用して自動で地形を作ります。地形の型はその時に使います。
まずは以下のリンクから、Terrainを使ってオブジェクトを複製するスクリプト「Object2Terrain」をコピーしてUnity上でスクリプトを組みます。
http://kan-kikuchi.hatenablog.com/entry/ObjectToTerrain
組んだスクリプトはEditorフォルダに入れておきます。
次にBlenderで作成した地形の型をUnityのシーン上に置きます。
メニューバーの[Terrain]→[Object to Terrain]を選択し、ウインドウが出たらHierarchy上で地形の型を選択した状態で[Create Terrain]を選択します。
すると、
この様に、地形の型に沿ったTerrainの地形が作られました。
あとは自由にオブジェクトを置いたりテクスチャを張れば、現実に限りなく近い3D空間の完成です。
4.まとめ
私の地形の作り方では「コードを書く必要が無く簡単」、「現実の地形にほぼ近い空間が創れる」ことを利点として流れを書きました。
もしかしたら新しいコードを書いたり、別の方法を取ることでより効率的に地形が作成できるのかもしれません。
もし「もっとこういうやり方のほうがいいんじゃない?」ていう方法があれば教えていただければうれしいです。
この記事を基にいろんな方法を模索してみてください。