ホーム > htc VIVE | Unity | VR > 三連休はひとりハッカソンしてました

三連休はひとりハッカソンしてました

三連休はひとりハッカソン1してました…。

目標はひとまずUnity&SteamVRプラグインによるVR開発環境の構築と、何かしら3Dモデルデータをインポートしてプログラムを実行するところまで。ちなみにUnityの開発環境構築は調べたら3年ぶり2回目。まあいろいろと忘れていますね;;

ということで、以下、だらだらとやったことについて書きました。





まずは開発環境の構築として「こちら」から無料の「Personal」の最新版(v5.5)をダウンロードしてインストール。なんかしばらく見ないうちにいろいろおしゃれな感じになってる…。

基本的にはインストールして起動するだけ。アセットストアへのログインは以前使用していたアカウントが生きていたのでそちらを使用。ダウンロード履歴みたら100本くらいプラグインあった;;で、内1/4くらいは「使用不可」になってた;;ひとまず使えないものをゴミ箱マークをクリックして非表示にする。消えたものは上の「#BIN」で見れるらしい。これは便利。

環境が整ったので、VRより先にUnityの復習を…ということで「この本」と「この本」をそれぞれ半分ほど読んで真似ながら実行してみる。前者はエディタ関係、後者はコーディング関係を重点に書かれていたので2冊読んでバランスはよかったです。うん、このあたりで色々思い出してきた。

ただ、ソースコードの編集は「MonoDevelop」だったのが、「Visual Studio 2015」に変わっていました。経緯やメリットはまた今度調べよう…。

で、やっとこさVRに。「こちらのサイト」によるとhtc ViveをUnityで使用するには「SteamVR Plugin」をインポートすれば良いとのこと。さくっといれて、いくつかあるサンプルコードを実行してみる。

  • Scenes/example:周囲に立方体が並んでいるでも。ただ眺めるだけだけどちょっとインパクトあり。
  • Extras/SteamVR_TestIK:コントローラに手のオブジェが表示され、肩から手まで腕がついて動く。腕が回転しているのは仕様?
  • Extras/SteamVR_TestThrow:コントローラのトリガーを引くとボールが投げられる。これだけだけどなんか楽しい。まずはこれをベースにすると具合が良さそう。
  • Extras/SteamVR_TestTrackedCamera:よくわからず…なんか白い板が出てきただけ?

ということで「SteamVR_TestThrow」をベースにいじってみることにする。

まずは1m立方のCubeを配置してみる。Viveで見てCubeの幅にあわせてコントローラーを置いてメジャーで測ってみたらほぼ1mでした。システムの理屈上、正しいことなんでしょうけどけっこう感動した(笑)





次いでテクスチャー付きの床を設置してみる。これだけでずいぶん雰囲気がでてきました(単純)。あとはコントローラーに1mくらいのシリンダーを剣に見立てて関連付けてみました。当たり判定もついているのでサンプルコードのトリガーで発射できる球も触れます。これだけでも何か楽しいです(笑)。せっかくなのでアセットストアから「剣の3Dモデル」をインポートして振ってみといい感じにテンションが上がってきます。やはり気兼ねなく長得物を振り回せるのはいいです。ただし、壁にぶつけないように注意2

あとは音も試してみました。適当にCubeを設置して、オーディオソースを3Dサウンドとして設定して鳴らしてみました。確かに音がなっている方がわかるように、左右のボリュームが変化しました。ただ、後ろなのか前なのか、下の方なのかが区別がつきにくかったです。このあたり、色々とゲームを試したときは分かりやすかったので何かコツがありそうです。


勘所がわかったところで目標を再設定。VR空間内で自分の部屋を再現してみたかったので、まずは部屋に置いてある「木製スツール(ニトリ)」を置いてみることにしました。ただ置くだけじゃ面白くないので、椅子の上にコントローラーを置いて椅子の初期位置を設定できるようにします。

ということでひとまず手持ちの3DCGツールとにらめっこしながらワークフローを探ります。まずはベースモデルを作成するのによく使っている「MoI 3D」。3D-CADですがスナップ機能が強力なのと個人的に操作が直観的だったので3Dプリンタのモデルデータを作成したりするのによく使っています。あとはUnityにはFBX形式で取り込むが良いというので質感設定&コンバータとして「LightWave 2015」。こいつは少し前のバージョンで「Unityとの連携機能」が追加されたのですが、それはまた今度。

フローをまとめるとこんな感じ。
  • MoI 3D→[.lwo]→LW→[.fbx]→Unity

あと問題点というか設定で気になったポイントはこんな感じ。今のところ一番大きな問題は一番最後の中心点の問題。単位系もロストしているので500km先に中心点なんてことも…。これは今のところLightWave側で再設定するしかないので、中心点の一括設定プラグインを探してみます。
  • MoI 3DからLightWaveに渡す時はMoI 3D側で単位系(Optionz→General→Unit system)を「Millimeter」に設定すると単位が一致する。
  • MoI 3D側でオブジェクトに名前を付けると、LightWave側ではレイヤー毎に分けてくれる。
  • MoI 3D側で色を設定すると、LightWave側で質感情報として分けてくれる。
  • MoI 3D側からFBXで出力できるが、レイヤーや質感情報がロストするのでLWOがベスト。
  • ただしLightWave側で受け取った時に「中心点」がレイヤー毎にオブジェクトの中心を示すように設定されてしまっているので、要注意。


ワークフローの目途も立ったので、木製スツールを実測してMoI 3Dでゴリゴリ作成してUnity側にインポートします。



最後にコーディング。前述のWebサイトや書籍を参考にしながらコントローラーのXZ座標を木製スツールのXZ座標に設定するコードを書いて実行します。気になったのはこんな感じ。
  • 実際の位置とVR空間上の位置がだいたい2~3cmくらいずれる。Viveの初期設定せいかはまだ不明。
  • 今回はUnity側でむりやり位置を合わせた。そのうち簡単にキャリブレーションできる仕組みを実装したいところ。
  • 「Controler (Left)」と「Controler (Right)」が実行するタイミングで割り当てられるハードが変わるときがある。初期位置で決まるのか?こちらも要調査。
  • あとHMDを被ったり外したりするの地味にめんどくさい…





ということで3連休ではここまで。

これをお題目に選んだのはVR空間にある物体が実際に触れるとどうなるか?精度はどうか?というのが試してみたかったからです。結論としては、やはり触れないと認識していたものが触れると楽しいです。寸法の精度は良いのであとは位置の精度を簡単にやれるのが大事かなと思います。ただ実際に触る座るといっても、コントローラーを使わないとHMD越しには自分の体は表示されないのでそこが違和感ですね。

しかし色々と家具を置こうとするとコントローラーの数に依存3してしまうので、3メートル立方くらいのエリアで位置情報取れるシステムってないですかね?

さて、次は何をしましょうか…。

  1. ひきこもり []
  2. 実際1回ぶつけた。反省。 []
  3. 無線2個、USB接続で1個追加できるらしいです。 []
Pocket

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://digilife.bz/blog/wp-trackback.php?p=4785
トラックバックの送信元リスト
三連休はひとりハッカソンしてました - DIGIらいふ ~COOLにいこう!~ より

ホーム > htc VIVE | Unity | VR > 三連休はひとりハッカソンしてました

検索
フィード
メタ情報

ページの上部に戻る