MRが楽しい

MRやVRについて学習したことを書き残す

VR ZONE SHINJUKU に行ってきた

本日はレポート枠です。
11/12(日)に VR ZONE SHINJUKU に行ってきました。
vrzone-pic.com

VR ZONE SHINJUKU は国内最大級のVRエンターテインメント施設です。
VRを用いた様々なアトラクションが体験できます。
料金形態は入場料+アトラクション毎のチケット購入制です。施設内の滞在時間に制限はありません。
チケットの事前予約は可能ですが、内部のアトラクションは並んで待つ必要があります。

今回は混雑を避けるため、開場時間の朝10時から入場しました。
f:id:bluebirdofoz:20171114015013j:plain

チケットは1Day4チケットセットを購入するのがオススメです。
4つのアトラクションが遊べます。入場後に追加チケットも購入できます。

建物の中にはイルミネーションの中で寛げる広場や食事処もあります。
f:id:bluebirdofoz:20171114015038j:plain

2017/11/12現在、稼働中のVRアトラクションは全部で13個です。
vrzone-pic.com
攻殻機動隊のみ、未稼働でした。

開場直後に入った事もあり、全てアトラクションは待ち時間0分でした。
f:id:bluebirdofoz:20171114015106j:plain

事前調査で一番人気と分かっていた「マリオカートアーケードグランプリVR」から体験しました。
f:id:bluebirdofoz:20171114015125j:plain

総評。
すっごく楽しい。でも、上手く言葉にできない。体験してください……。

今回プレイしたのは他に「極限度胸試しハネチャリ」「エヴァンゲリオンVR The 魂の座」です。
vrzone-pic.com
vrzone-pic.com
vrzone-pic.com
これらのVR体験の特徴の共通点として、他のゲームプレイヤーとボイスチャットが繋がっている点が挙げられます。

仮想空間のSNSの一端を体験できた機会でもありましたが、ここに一番の可能性と魅力を感じました。
相手の顔が見えなくても、声やゲーム内のアクションだけで、仮想空間で十分なコミュニケーションが行えます。
同じゲームの世界に入り込んでゲームをプレイするという感覚は初めての体験でした。

途中から楽しくて写真撮影を忘れました。。休憩を含めて4チケットで滞在時間は2時間ほどでした。
ゲーム自体はそれぞれ平均 5 ~ 10 分程度だったと思います。後、ゲームの操作説明がそれぞれ必ず 5 分ほど。

12時過ぎにはマリオカートなど人気アトラクションは 60 分待ちになっていました。
14時ごろが混雑のピークになるらしいので、朝早くから入場するか、夜遅めに入場するのが吉です。

最後は VR ではなく実体験型のアトラクション「ナイアガラドロップ」をチャレンジしてきました。
vrzone-pic.com
やはりリアルの高所は VR よりも怖いです。
VR アトラクションは仮想現実のリアルさ以上に、同じゲーム空間にプレイヤ―同士が入って遊べるという点が大きな付加価値である気がします。
正直、一過性の施設だと舐めて考えていましたが、今後、遊園地のアトラクションとしてVRアトラクションはメジャーな存在になるかも?
(VRは13歳以上しか使えないという制限が厳しいですが)

これまでのHoloLens調査技術のまとめ

本日はまとめ記事です。
私事ですが社内で本ブログで調査した技術について発表を行うことになりました。
参照用のため、技術ごとのリンクをまとめます。

AR/VR/MR機器について

・ARとVRデバイスを色々調べてまとめる
bluebirdofoz.hatenablog.com

開発環境(Unity)

・HoloLensの開発環境構築手順 Unity(2017.2)編
bluebirdofoz.hatenablog.com
・HoloLensの開発環境構築
bluebirdofoz.hatenablog.com

DevicePortal

・hololens用DevicePortalの機能についてまとめる
bluebirdofoz.hatenablog.com
・hololensのDevicePortalを利用する
bluebirdofoz.hatenablog.com

SpatialMapping

・ユニティちゃん大地に立つ
bluebirdofoz.hatenablog.com
・公式チュートリアル「HOLOGRAMS 230 3章」を試してみる
bluebirdofoz.hatenablog.com

シェアリング

・hololensでシェアリングを試してみる
bluebirdofoz.hatenablog.com
・Sharingのメッセージでワールド座標を使ってTransformを共有する
bluebirdofoz.hatenablog.com

ジェスチャー操作

・hololensで指の位置を検知する
bluebirdofoz.hatenablog.com
・公式チュートリアル「HOLOGRAMS 211 3章」を試してみる
bluebirdofoz.hatenablog.com

WindowsMR

・AcerWindowsMixedRealityHeadset(AH101)の購入レビューとセットアップ
bluebirdofoz.hatenablog.com
・UWPプロジェクトをHoloLensとWindowsMRで起動する
bluebirdofoz.hatenablog.com

AssetBundle

・AssetBundleを使って3Dオブジェクトを動的に取り込む(その1)
bluebirdofoz.hatenablog.com

NavMesh

・SpatialMappingのデータにNavMeshを適用する その1
bluebirdofoz.hatenablog.com
・NavMeshを使ってキャラクタとおいかけっこをする
bluebirdofoz.hatenablog.com

シェーディング

・ユニティちゃんトゥーンシェーダー2.0を試してみる
bluebirdofoz.hatenablog.com
・Hololensで壁の向こうの世界が見える窓を作る その1
bluebirdofoz.hatenablog.com
・球体が弾け飛びユニティちゃんが現れる
bluebirdofoz.hatenablog.com

OpenCVForUnity

・HoloLensでOpenCVの画像処理を利用する
bluebirdofoz.hatenablog.com
・hololensでOpenCVForUnityのサンプルを実行する
bluebirdofoz.hatenablog.com

様々な3Dデータ利用

Blenderで作成した3DモデルをUnityに取り込む その1
bluebirdofoz.hatenablog.com
・UnityにMMDモデルを取り込んでhololensで表示する
bluebirdofoz.hatenablog.com

UWPプロジェクトをHoloLensとWindowsMRで起動する

本日は hololens の技術調査枠です。
再び hololens の記事の割合を増やしていきます。(勿論モデリングも続けます)
今回は Unity2017.2 で WindowsMR 向けのビルドを試してみます。

合わせて最新の MixedRealityToolkit の機能も紹介します。
github.com

新規プロジェクトを作成します。
f:id:bluebirdofoz:20171112013140j:plain

HoloToolkit-Unity-v1.2017.2.0.unitypackage をインポートします。
f:id:bluebirdofoz:20171112013153j:plain

インポートすると、これまでの HoloToolKit 同様、Toolkit メニューが表示されるようになります。
まずは基本設定を行う Configure を開きます。
f:id:bluebirdofoz:20171112013213j:plain

・Apply Mixed Reality Project Settings
UWP向けのビルド設定が自動で実施されます。チェックを行い、Apply をクリックします。
f:id:bluebirdofoz:20171112013225j:plain
基本的にデフォルトのチェックのままでよいでしょう。
各種設定はクリックすると、下部に説明文が表示されます。

・Apply Mixed Reality Scene Settings
シーンの基本構成が自動で反映されます。チェックを行い、Apply をクリックします。
f:id:bluebirdofoz:20171112013258j:plain
メインカメラが MixedRealityCamera.prefab に差し変わる、入力操作のスクリプトが設定されるなどの変更が行われます。
この辺りをカスタマイズしたい場合はチェックを付けずに自作する方法もあります。
しかし、恐らくはこれらの prefab について理解を深めてカスタマイズした方が効率的でしょう。

・Apply UWP Capability Settings
アプリで利用する機能の許可設定を行います。チェックを行い、Apply をクリックします。
f:id:bluebirdofoz:20171112013404j:plain
HoloToolKit のときと大きな違いはありません。
カメラを利用する場合は webcam 、Spatial Mapping を利用する場合は Spatial Perception のチェックが必要などです。

設定を実施すると、以下のような状態になっています。
f:id:bluebirdofoz:20171112013426j:plain

試すプロジェクトはそのままでもよいのですが。
やはり何もないのは寂しいのでUnityちゃんが登場するアプリにします。
f:id:bluebirdofoz:20171112013439j:plain

ではいつもの手順通り、シーンを保存してビルドを行います。
f:id:bluebirdofoz:20171112013455j:plain

UnityChan のスクリプトで二箇所エラーが発生しましたが、今回は利用しない機能なのでコメントアウトで対処しています。
・AutoBlink.cs

//using System.Security.Policy;

・SpringManager.cs

//var prop = springBones [0].GetType ().GetField (fieldName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
(中略)
//prop.SetValue (springBones [i], baseValue * scale);

VisualStudio のプロジェクトが生成されたら、まずは hololens 側にインストールしてみます。
Relese, x86 を設定して、ビルド先に hololens を指定してインストールを行います。
f:id:bluebirdofoz:20171112013509j:plain

hololens で起動できました。
f:id:bluebirdofoz:20171112013517j:plain
このとき、一つ注目する点としてユニティちゃんの背景がきちんと透過されている事を覚えておきます。

次に WindowsMR が利用できる PC にインストールしてみます。
Relese, x64 を設定して、ビルド先に PC を指定してインストールを行います。
f:id:bluebirdofoz:20171112013534j:plain

ヘッドセットを付けると……動いた!
f:id:bluebirdofoz:20171112013548j:plain
なお、Unityちゃんは地中に埋まってます。

ここで注目なのが、WindwosMR のアプリでは hololens で表示されていなかった背景や床が表示されているという点です。
手順の通り、プロジェクトは一切書き換えていません。
プロジェクトのシーン設定で配置した MixedRealityCameraParent がアプリ実行時に自動で判断してくれています。

ざっと確認ですが、おそらくこの MixedRealityCameraManager.cs というスクリプトです。
f:id:bluebirdofoz:20171112013818j:plain
・MixedRealityCameraManager.cs

#if UNITY_WSA
#if UNITY_2017_2_OR_NEWER
            if (!HolographicSettings.IsDisplayOpaque)
#endif
                {
                    CurrentDisplayType = DisplayType.Transparent;
                    ApplySettingsForTransparentDisplay();
                    if (OnDisplayDetected != null)
                    {
                        OnDisplayDetected(DisplayType.Transparent);
                    }
                    return;
                }
#endif
            }

            CurrentDisplayType = DisplayType.Opaque;
            ApplySettingsForOpaqueDisplay();
            if (OnDisplayDetected != null)
            {
                OnDisplayDetected(DisplayType.Opaque);
            }
        }

必要な個所さえ処理を分けておけば一つのプロジェクトで hololens と WindowsMR 向けの実装ができます。
別々のビルドは不要です。これは便利。


因みに、Unityちゃんが地中に埋まっているのはUnityちゃんの立ち位置を -1.5 mに設定しているためです。
これは hololens の場合、起動カメラ位置が人の頭の高さであるための対処です。
WindowMR 側では起動位置が 0 mではないのかな。
現実での衝突/転倒回避のため、自動的に補正しているとか?この辺りは要調査です。

Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]を試す その10(辺の長さを整える・球形率の変形)

本日は書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」の実施枠です。

顔のモデリングの続きです。
f:id:bluebirdofoz:20171111223340j:plain

今回は首の部分を作っていきます。首のフチの頂点を選択します。
f:id:bluebirdofoz:20171111223353j:plain

ショートカットの E キーで辺の押し出しを行います。
Z キーを押して、下方向に押し出します。
f:id:bluebirdofoz:20171111223405j:plain

このとき、辺の高さがが統一されていません。頂点の高さを揃えてみます。
ショートカットキーで S(サイズ) -> Z(Z軸) -> 0 を実行します。
f:id:bluebirdofoz:20171111223414j:plain
すると、指定軸の位置が同じ数値に設定されます。

次に、首の形が円形でないのが気になります。辺を円形に変形させてみます。
変形する辺を選択し、メッシュ -> スナップ -> カーソル→選択物 をクリックします。
f:id:bluebirdofoz:20171111223422j:plain
これでカーソルの位置が選択した辺の中央に移動します。

ただし今回はミラーモディファイアを用いてモデルを作成しているため、X 軸の位置は左右含めた全体の中心となりません。
プロパティシェルフの3Dカーソルで X 軸の値を 0 にして全体の中心にカーソルを補正します。
f:id:bluebirdofoz:20171111223430j:plain

カーソルを辺の中心に移動したら ピポットポイントのアイコン -> 3Dカーソル を選択します。
f:id:bluebirdofoz:20171111223439j:plain

後は メッシュ -> トランスフォーム -> 球へ変形 を選択します。マウス操作で変形を調整できます。
f:id:bluebirdofoz:20171111223446j:plain

形を調整したら同じように首を伸ばしていきます。
f:id:bluebirdofoz:20171111223454j:plain

Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]を試す その9(押し出しの注意点・面の裏表)

本日は書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」の実施枠です。

顔のモデリングの続きです。
f:id:bluebirdofoz:20171110021342j:plain

今回は頭部全体の形を作っていきます。顔の輪郭の頂点を選択します。
f:id:bluebirdofoz:20171110021354j:plain

ショートカットの E キーで辺の押し出しを行います。
X, Y, Z いずれかのキーを押すと、その軸方向への移動に固定できます。
f:id:bluebirdofoz:20171110021417j:plain

この話は書籍に書かれていた押し出しに関する小ネタですが……。
押し出しは E キーを押したときに頂点の複製がコミットされます。
操作をキャンセルすると、一見押し出しがキャンセルされ、形が元に戻るように見えますが。
実際には、複製頂点の移動がキャンセルされただけであり、頂点は増えています。
ここで増えた頂点は重複頂点としてなるため、気付きづらいです。

もし、E キーをキャンセルしてしまった場合は重複頂点の削除を行っておきましょう。
f:id:bluebirdofoz:20171110021428j:plain

押し出しを駆使して頭部の球体を作っていきます。
完全な球体という訳でもないので想像以上に難所です。
f:id:bluebirdofoz:20171110021446j:plain

中央の線から造形していくと比較的綺麗にまとまりやすいようです。
f:id:bluebirdofoz:20171110021502j:plain

……しかし、書籍のサンプルと見比べるとどうも顔の奥行きが足りない気がする。。
書籍のサンプルにはキャラクターの横顔がないため、後ろ方向への立体造形は感覚で行っています。

やはり何か基準があった方が良いと考え、下絵用のキャラクタの横顔を自作しました。
f:id:bluebirdofoz:20171110021730j:plain
参考用に置いておきます。髪の厚みが足りないので微調整が必要です。
2D絵のスキルが3Dモデリングで必要になるとは……もっと徹底的にデッサンの勉強していれば良かった。。

これを下絵に顔の造形をやり直し。
f:id:bluebirdofoz:20171110021616j:plain
何となくですが、顔の奥行きができました。モデリングに慣れない内は下絵の有無は大きいです。

ここで、側頭部のテクスチャがおかしい事に気付きました。
プロパティシェルフから シェーディング -> 裏面の非表示 を選択してみます。
f:id:bluebirdofoz:20171110021629j:plain
何とほとんどの面が裏返ってました。

全ての面を選択してツールシェルフから シェーディング -> 法線:再計算 をクリックします。
f:id:bluebirdofoz:20171110021638j:plain

全ての面が表向きに再計算されました。定期的に気にした方が良さそうです。
f:id:bluebirdofoz:20171110021700j:plain

Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]を試す その8(UV球の編集)

本日は書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」の実施枠です。

顔のモデリングの続きです。
f:id:bluebirdofoz:20171109093415j:plain

眼球の作成作業に入ります。
顔オブジェクトの「編集モード」で下絵の目の中心を選択します。
f:id:bluebirdofoz:20171109093427j:plain

この状態で 追加 -> UV球 を選択して球体メッシュを追加します。
f:id:bluebirdofoz:20171109093436j:plain

サイズと位置、向きを変更して大体の形を合わせます。
後ろ半分は不要なので頂点を範囲選択して削除しましょう。
f:id:bluebirdofoz:20171109093448j:plain

眼球の色を付けます。マテリアルタブを開きます。
「追加」ボタンを押すと、新しいマテリアルが作成されるので「新規」ボタンでマテリアルを作成します。
f:id:bluebirdofoz:20171109093459j:plain
マテリアルが増えてきたので分かりやすい名前を付けておくとよいでしょう。

まずは白色のマテリアルを作成し、白目の部分を作ります。
マテリアルを作成したら適用したい頂点が選択された状態で「割り当て」をクリックします。
f:id:bluebirdofoz:20171109093508j:plain

次に黒目の部分を色分けします。
黒目用のマテリアルを作成し、同じようにマテリアルの「割り当て」を行います。
f:id:bluebirdofoz:20171109093518j:plain

眼球のポリゴンが作成できました。
f:id:bluebirdofoz:20171109093527j:plain

下絵と顔オブジェクトに合わせてポリゴンのめり込みや隙間がないよう微調整を行います。
f:id:bluebirdofoz:20171109093537j:plain

ついでに同じように口の色も塗っておきます。
f:id:bluebirdofoz:20171109093546j:plain

段々と顔っぽくなってきました。
f:id:bluebirdofoz:20171109093601j:plain

VisualSFMを用いて作成した三次元点群データをメッシュモデルに変換する

本日は画像解析に関する技術調査枠です。
前回、VisualSFMで写真から三次元点群データを作成しました。
bluebirdofoz.hatenablog.com

今回はここから更に三次元点群データをメッシュモデルに変換する技術を試します。
以下のページを参考にしました。
www.pointcloud.jp

利用するのは MeshLab です。前回の手順通り作業していればインストール済みのものを利用できます。
bluebirdofoz.hatenablog.com

早速、試してみます。
前回の手順通り、MeshLab を起動して三次元点群データ(ply)を読み込みます。
f:id:bluebirdofoz:20171108003033j:plain

Filters -> Remeshing simpleification and Reconstruction -> Surface Reconstruction : Ball Pivoting を選択します。
f:id:bluebirdofoz:20171108003045j:plain

設定値はデフォルトのままで Apply を押します。メッシュが生成されます。
f:id:bluebirdofoz:20171108003053j:plain

頂点がガタガタなのでスムージングを行います。
Filters -> Smoothing, Fairing and Deformation -> Laplacian Smooth を選択します。
f:id:bluebirdofoz:20171108003102j:plain

設定値はデフォルトのままで Apply を押します。スムージング処理が行われます。
f:id:bluebirdofoz:20171108003110j:plain

メッシュモデルが作成できました。後はこれを適切なファイル形式で出力します。
File -> Export Mesh As でメッシュモデルでの出力が行えます。
f:id:bluebirdofoz:20171108003322j:plain

出力形式が幾つか選択可能です。
今回は Blender で編集を行いたいのと、カラー情報を付与しておきたいので wrl ファイル形式で出力します。
f:id:bluebirdofoz:20171108003128j:plain

出力設定のダイアログが表示されます。
カラー情報を付与したいので「Color」にチェックを入れた状態で「OK」をクリックします。
f:id:bluebirdofoz:20171108003136j:plain

出力したファイルを試しに Blender で読み込んでみます。
Blender を起動し、ファイル -> インポート -> X3D Extensible 3D で wrl ファイルを読み込みます。
f:id:bluebirdofoz:20171108003148j:plain

色付きのメッシュモデルとしてデータを取り込むことができました。成功です。
f:id:bluebirdofoz:20171108003155j:plain