MRが楽しい

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

AssetBundleを使って3Dオブジェクトを動的に取り込む(その2)

前回記事の続きとなります。技術の調査、実装内容については以下を参照ください。
bluebirdofoz.hatenablog.com


さて、実装したプロジェクトを試しに動かします。まずはUnityEditorでの動作確認です。
"Application.streamingAssetsPath"のファイルパスはUnityEditor上では「Asset/StreamingAssets」フォルダとなります。
docs.unity3d.com

「Asset/StreamingAssets」フォルダを作成して、そこに先ほど作成したAssetBundleをコピーします。
f:id:bluebirdofoz:20170612014907j:plain

LoadFromFileAsync.csを「ShowObject」オブジェクトにアタッチして起動してみます。
"mappingobject"内の3Dモデルが表示されました。
f:id:bluebirdofoz:20170612014922j:plain
AssetBundleに含まれていたゲームオブジェクトが読み込まれ、「ROOM(Clone)」として自動生成されています。


UnityEditor上の動作確認は成功です。次はhololensにインストールして確認します。

アプリはhololens上でも正常に動作しました。3Dオブジェクトがhololens上で確認できます。
f:id:bluebirdofoz:20170612014941j:plain
では"mappingobject"ファイルは何処にあるのかなと、デバイスポータルを確認しますが、何処にも見つかりません。

色々調べてみましたが、hololensでの「Application.streamingAssetsPath」のパス位置はデバイスポータルからは参照できないようです。
アセットを差し替える動作を手軽に実現したいため、デバイスポータルから見える位置に読み込みファイルを置きたいところです。

調べてみたところ、「LocalAppData/AppName/LocalState」が「Windows.Storage.ApplicationData.Current.LocalFolder.Path」で参照可能という情報がありました
forums.hololens.com

「LocalAppData/AppName」はアプリのローカル空間であるため、アプリは権限設定不要でこのフォルダを参照できます。
また、デバイスポータルからも参照可能です。ここを利用するのが良さそうですね。
f:id:bluebirdofoz:20170612015028j:plain

読み込みコードを以下のように修正し、hololens上(WINDOWS_UWP)では「LocalAppData/AppName/LocalState」を参照するようにしました。
・LoadFromFileAsync.cs

(略)
    IEnumerator Start()
    {
        string bundlepath = "";
#if WINDOWS_UWP
        bundlepath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mappingobject");
#else
        bundlepath = Path.Combine(Application.streamingAssetsPath, "mappingobject");
#endif
        AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFromFileAsync(bundlepath);
(略)

以上の修正を行って再ビルド、そのままhololens上でアプリを起動します。
この時点では当然ながら、取得先のフォルダ「LocalAppData/AppName/LocalState」にファイルがないため、オブジェクトは表示されません。
f:id:bluebirdofoz:20170612015052j:plain

バイスポータルを用いて、"mappingobject"ファイルをhololensの「LocalAppData/AppName/LocalState」にアップロードします。
f:id:bluebirdofoz:20170612015105j:plain

再度アプリを起動すると…。
f:id:bluebirdofoz:20170612015116j:plain
"mappingobject"内の3Dモデルが表示されました。成功です。


この修正により、バイナリレベルでのアプリ本体とデータの切り分けが実現しました。

効果を体験するため、例えば、別の部屋データをAssetBundleとして作成してみます。
f:id:bluebirdofoz:20170612015134j:plain

アプリ本体の再ビルドは不要です。デバイスポータルから再作成した「mappingobject」ファイルをアップロードして置き換えます。
f:id:bluebirdofoz:20170612015144j:plain

後はhololensのアプリを再度起動するだけで…。
f:id:bluebirdofoz:20170612015153j:plain
表示される3Dオブジェクトが変わりました。
hololens内のファイルを更新することで、アプリの表示データを差し替えることに成功です。


この機能を使えば、アプリ本体に読み込みのロジックを組んでおくことで、後々からの3Dモデル追加や差し替えが可能になります。
例えば、自分のhololens上にアプリ本体とは別に、3Dモデルファイルを配置することで、自分がアプリを起動したときのみ、異なるモデルを表示するといったことが可能です。

余談ですが、記事の投稿まで時間があまったので、おいかっけアプリに機能追加しました。
タッチすると、キャラクタが嫌がります。
f:id:bluebirdofoz:20170612015324j:plain
でへへ。非常に申し訳ない。

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

本日はUnity技術の調査枠です。
前回、MMDモデルをプロジェクトに取り込む技術について調査を行い、目論見は成功しました。
bluebirdofoz.hatenablog.com


息抜きやモチベーションアップに操作キャラクタを差し替えると、アプリ作成はより捗りそうです。楽しい。
しかし、作業の効率化という点ではMMDモデルの扱い難しさがネックになります。

今後、アプリを公開する際、わざわざMMDモデルをプロジェクトから削除するのは面倒ですし。
息抜きのたびに新キャラクタを追加していたらアプリの容量がとんでもないことになります。

そこで役に立ちそうなのが「AssetBundle」という機能です。
docs.unity3d.com

「AssetBundle」とはUnityプロジェクトのリソース群である「Asset」を動的に読み込む機能となります。
つまり、アプリ本体と3Dモデルのデータを別々に管理することで、アプリ本体の不要な再ビルドやデータ容量の増加が防げます。

携帯などの商用アプリで、アプリそのもののアップデートをしなくても、キャラ追加のアップデートが自動で走ったりしますが、この機能を利用しているものもあるようです。


hololens上のUWPアプリでは本機能は利用可能でしょうか。検証開始です。
まずは本機能を使った、簡単な3Dオブジェクト表示アプリを作ってみます。

3Dモデルに以前使ったSpatialMappingで取得した部屋の3Dデータを使います。
bluebirdofoz.hatenablog.com

データを差し替えるだけで、様々な部屋の間取りを見れるアプリなんて、言葉にするとテストアプリの割りにはシャレオツです。
マップの頂点数やファイルサイズが大きい場合は、事前にSpatialMappingのデータはBlenderで頂点数を減らしておきましょう。
bluebirdofoz.hatenablog.com

ただ、前回利用したMMDモデルを調べてみたところ、キャラクタ1体で9万個の頂点数だったので、1マップずつの表示ならそれくらいは許容範囲っぽいです。


まずは以下を参考に「AssetBundle」の作成と読み込みを試してみます。
tsubakit1.hateblo.jp

ビルド時の関数が古くなっているので注意です。最新の記法は以下になります。
docs.unity3d.com

「AssetBundle」のビルド用に、下記のコードを用意しました。
・CreateAssetBundles.cs

using UnityEditor;

public class CreateAssetBundles
{
    [MenuItem ("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles ()
    {
        BuildPipeline.BuildAssetBundles ("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.WSAPlayer);
    }
}

hololensで「AssetBundle」を利用する場合、BuildTargetは"BuildTarget.WSAPlayer"となります。
「AssetBundle」はアプリ本体と別ビルドになるため、利用する媒体ごとにビルド設定の変更が必要です。

上記のコードを作ったら、「Assets/AssetBundles」ディレクトリを作成して、Unityのメニューから「Assets」→「Build AssetBundles」を実行します。
f:id:bluebirdofoz:20170612004151j:plain
因みにここでは「MappingObject」フォルダを「AssetBundle」に設定し、"mappingobject"としてビルドするよう設定を行っています。

実行すると「Assets/AssetBundles」ディレクトリに「AssetBundles」ファイルと用意したAssetBundleファイルが生成されます。
f:id:bluebirdofoz:20170612004221j:plain
マニュフェストファイルとバイナリファイルが存在し、マニュフェストファイルを見ると中の構成が確認できます。
今回は"mappingobject"Assetが作成されていることが分かります。

AssetBundleへのアクセス方法はその目的からWEB経由がよく使われますが、今回はローカルファイルへのアクセスを使います。
hololensにインストールされたアプリ本体が、hololens内のファイルを読み込んで、モデルを表示するイメージです。
docs.unity3d.com

そして「AssetBundle」の読み込みと表示用に、下記のコードを作成しました。
・LoadFromFileAsync.cs

using UnityEngine;
using System.Collections;
using System.IO;

public class LoadFromFileAsync : MonoBehaviour
{
    IEnumerator Start()
    {
        string bundlepath = Path.Combine(Application.streamingAssetsPath, "mappingobject");
        AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFromFileAsync(bundlepath);
        yield return bundleLoadRequest;

        AssetBundle myLoadedAssetBundle = bundleLoadRequest.assetBundle;
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            yield break;
        }

        AssetBundleRequest assetLoadRequest = myLoadedAssetBundle.LoadAssetAsync<GameObject>("ROOM");
        yield return assetLoadRequest;

        GameObject prefab = assetLoadRequest.asset as GameObject;
        Instantiate(prefab);

        myLoadedAssetBundle.Unload(false);
    }
}

記事が長くなりました。一旦ここで記事を分けます。実装を完了したので、次は実動作確認編です。

UnityにMMDモデルを取り込んでゲームキャラクタとして操作する

前回記事の続きです。
bluebirdofoz.hatenablog.com


次は、取り込んだMMDモデルをアクションさせてみます。
MMD用に配布されているモーションも取り込めるようですが、今回はおいかけっこアプリで利用しているモーションを流用します。
更に言えば、現在のおいかけっこアプリのユニティちゃんモデルをMMDモデルに差し替えることが可能か試してみます。

MMDモデルは前述の通り、扱いが難しいのでSVNのブランチを切って修正します。神経質かもしれませんが、それくらいコアな業界なのです。
・ブランチ/タグの作成
 https://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/tsvn-dug-branchtag.html

では早速、モデルを取り出します。

生成されたモデルデータは変換したPMXファイルと同じディレクトリに保管されています。
同フォルダに「Materials」「Meshes」「Physics」の三つのフォルダが作成されていると思います。
ただ「Materials」「Meshes」「Physics」だけ運べば良いという訳ではなく、テクスチャ等はそのまま参照しているようです。
f:id:bluebirdofoz:20170611205706j:plain

更にMMDシェーダを利用しているのなら、mmd-for-unityフォルダのResourcesフォルダも必要です。
要は一通り必要になります。必要最低限だけコピーすることを考えていましたが、ここまで必要ならば、特に手を加えていない場合は利用するプロジェクトで再変換かける方が早そうです。
おいかけっこアプリにモデルを取り込むことができました。
f:id:bluebirdofoz:20170611205729j:plain


さて、次はこのMMDモデルとユニティちゃんモデルを差し替えます。

一番の問題点はキャラクタのモーションを共有できるかどうかです。
現在使用しているユニティちゃんのモーションは、Unitychanパッケージに付いていたものですが、UnityではMecanimという共通のアニメーションシステムが存在します。

ユニティちゃんのモーションはこの共通フォーマットに基づいて実装されているため、MMDモデルでMecanimの機能を有効にすれば、モーションが共通化できるのではないかという目論みです。
qiita.com

MikuMikuDanceforUnityでもこの機能がサポートされています。
モデルをインポートする際に「AnimationType」で「HumanMecanim」を選択してインポートすれば設定が行われます。
しかし、試してみた結果、MMDモデルは全く動きませんでした。

テストプロジェクトに戻って、よくよく見てみるとインポート実行時に「Transform "Model" must be the top mosst parent」というエラーが発生していました。
f:id:bluebirdofoz:20170611205838j:plain
どうやらモデルのアニメーションを行う「ヒューマノイドアバター」がきちんと出力されていない模様です。

うーむ。もはや更新停止して久しいためか。解決策を探そうにも、情報が全くありませんでした。
結果……原因特定と修正に6時間ほどかかりました。分かってしまえば少々の修正でしたが、Unity独自のルールが絡むため、苦労しました。
修正方法について備忘録として残しておきます。

原因は、Unity5のHumanMecanimには以下のルールができており、MikuMikuDanceforUnityはそれに基づいたコードに修正されていないことでした。
ヒューマノイドアバターは必ずオブジェクト内のトップオブジェクトに設定すること。
・ボーンの全親オブジェクトはこのトップオブジェクトの直下に配置すること(間に他オブジェクトを挟むとダメ)。

修正箇所は以下の二箇所です。(PMX+HumanMecanimインポートの場合)
・PMXConverter.cs 998行目(AttachParentsForBone関数)

//親のボーンが無いなら
//モデルルートの子に為る
//以下、エラーのためコメントアウト
//bones[i].transform.parent = model_root_transform;
// エラー対応
// ルートオブジェクトに全親ボーンを直接セットする
bones[i].transform.parent = root_game_object_.transform;

・AvatarSettingScript.cs 56行目(SettingHumanAvatar関数)

//アバタールートトランスフォームの取得
//以下、エラーのためコメントアウト
//Transform avatar_root_transform = root_game_object_.transform.FindChild("Model");
// エラー対応
// ヒューマノイドアバターはトップオブジェクトに設定する
Transform avatar_root_transform = root_game_object_.transform;

これでエラー無く、ヒューマノイドアバターを作成できます。
再チャレンジです。おいかけっこアプリのユニティちゃんモデルマネージャを差し替える形で入れ込みます。
f:id:bluebirdofoz:20170611205941j:plain
見事、MMDモデルが開始モーション通りに動きました。

ジャンプアクションや休憩アクションもキーボード操作に応じて難なくこなします。
f:id:bluebirdofoz:20170611210100j:plain

個人利用ではありますが、15分ほどのインポート作業で様々なキャラクタをゲームの操作キャラクタにできるようになりました。
うはは。こりゃ楽しい。

UnityにMMDモデルを取り込んでhololensで表示する

今週の土日は3Dモデリング学習の続き……のはずでしたが。
より面白そうな技術を見つけたので、そっちに取り組んでました。好きなことだけやりますが、好きなことにも順番があるのです。

本日はMMDのモデルをUnityに取り込むという技術です。
MMDがどれくらい知名度あるか分からないので説明をしますと、MMDとは正式名称「MikuMikuDance」といい、動画サイトの3D動画でもっともよく使われるフリーの3DCGソフトウェアです。
・VPVP
 http://www.geocities.jp/higuchuu4/


故に、多くの3DモデラーがこのMMD向けの3Dモデルを作成しており、ネット上で配布されている3Dモデルの数は数え切れません。
キャラクターを始め、小物からステージまで、少し検索すれば容易に3Dモデルが見つかります。
そんなMMDのデータをUnityに取り込めれば、リソースには苦労しませんし。誰もが知っているキャラクタが動くシーンは多く人の興味を引けるでしょう。

早速3Dモデルを用意します……が、ここで一点注意です。
MMDのモデルは個々の有志がそれぞれに作成して公開するため、ライセンス体系が全く整備されていません。
利用の際はモデルに付属するテキストや配布ページの注意書きをよく読みましょう。

慎重を期するなら、無償であってもMMDモデルを利用したアプリをストア等に公開するのは止めるべきです。
あくまで3DCGソフトウェアの3Dモデルですので、個人利用か動画作成のリソース程度に利用を留めましょう。


さて、MMDのモデルをUnityに取り込む方法です。これも有志によって開発が進められており、方法が二つあります。
・Stereoarts Homepage(MMD4Mecanim (Beta))
 http://stereoarts.jp/
MikuMikuDance for Unity
 http://mmd-for-unity-proj.github.io/mmd-for-unity/

機能も大切ですが、ここでもツールのライセンスと規約をよく読みましょう。
特にMMD4Mecanimの方は、UWP(HoloLens)の環境では私的使用を除いて使用しないことという規約が明確に記載されています。
(「キャラクターイメージを損なう使用は避けてください」という規約など、特にモデル作成者を守ろうとする姿勢が伺えます)
一方、MikuMikuDanceforUnityはMMD4Mecanimに比べると規約が緩く簡潔です。
MMDの業界にとってどちらが良いかは一旦置いておき、今回は後腐れのなさそうなMikuMikuDanceforUnityを使います。

MikuMikuDanceforUnityのインストール方法、使い方などは公式のページに一通りまとめられています。
MMD for Unityの使い方
 https://mmd-for-unity-proj.github.io/mmd-for-unity/howto.html
・モデルデータの読み込み(導入)
 http://mmd-for-unity-proj.github.io/mmd-for-unity/001.html

v2.1の場合、zipを解凍した「mmd-for-unity-proj-mmd-for-unity」フォルダをAssetにドラッグ&ドロップするだけです。
ここで、そのまま読み込むとエラーが発生します。
MikuMikuDanceforUnityは3年程、ソースコードの更新がなされておらず、Unity4向けの実装となっているためです。
MMDもまた2011年に開発終了がアナウンスされており、MMDとの互換性については心配は無用です)

Unityのソースコードの自動バージョン更新に任せれば、ほとんどのエラーは修正してくれます。
しかし、一つだけ自動更新では解決されませんでした。
f:id:bluebirdofoz:20170611203649j:plain

どうやらUnity5では該当の処理が不要のようなので手動でコメントアウトします。
answers.unity3d.com

以下のように修正し、エラーが無くなりました。
・VMDConverter.cs

//AnimationUtility.SetAnimationType(clip, animation_type);
//Unity5 do nothing

後はマニュアルに従って、読み込みたいMMDモデルを取得してきて読み込みを実行します。
特に問題なく読み込めました。
f:id:bluebirdofoz:20170611203707j:plain

注意点としてhololens向けのビルド設定を行う「Apply Hololens Project Settings」は先に実施しておいた方がよいかもしれません。
自分の場合、読み込み後に実施するとキャラクタの剛体判定がおかしくなりました。
それに限らず、髪や服がプルプルと震えて見えたりなど、MMDモデルは剛体判定の扱いが非常に難しそうです。
気になる場合は、読み込み時に「Rigidbody」のチェックを外し、自分でゲーム用のColliderを設定すると良い感じになります。

試しにビルドを行います。
すると、Unity側のビルドは成功しましたが、VisualStadioでのビルドで以下の"update required"というメッセージが表示され、ビルドできませんでした。
f:id:bluebirdofoz:20170831005623j:plain

プロジェクトファイルを確認すると、バージョン10.0.15063.0以上のSDKが必要のようです。

<TargetPlatformVersion>10.0.15063.0</TargetPlatformVersion>

以下から最新のSDKを取得しました
Windows 10 SDK
 https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk

最新SDKVisual Studio 2017でしか検出できないとのことなので、未インストールの場合は 2017 のインストールも必要です。
Visual Studio 2017 のインストール
 https://docs.microsoft.com/ja-jp/visualstudio/install/install-visual-studio

ビルドを行い、hololens上で起動します。
f:id:bluebirdofoz:20170611203837j:plain
MMDモデルをhololensアプリに表示することができました。

しかし、前述のライセンスの難しさから、ゲームキャラクタとしての利用はお薦めできません。暇潰しのお遊び程度に留めましょう。

hololensの空間マッピングデータをBlenderで編集する

本日は3Dモデリングの学習枠、ちょっと番外編です。
前回記事で取得したマッピングデータをBlender上で編集してみます。

Blenderへのマッピングデータの取り込みは以下を参考に実施しました。
qiita.com


今回は新たに別の7~8m四方程度部屋のモデリングデータを取得してきました。それを使ってみます。
f:id:bluebirdofoz:20170609013805j:plain
Blenderへの読み込みは問題なく行えました。
結構、丁重にマッピングしてから取得したこともあってか、この時点でなかなか綺麗な3Dデータです。

しかし、気になる点としてオブジェクトが一定サイズの正方形の領域ごとに細かく区切られています。
f:id:bluebirdofoz:20170609013939j:plain
hololensだとこのサイズの区間ごとにマッピングデータを切り分けて処理しているのでしょうか。
確かにhololensを使っているとき、マッピングに奇妙な切れ目なようなものが見えることがあります。
一纏めのオブジェクトだとメモリが大変なことになりそうですし。当然の工夫でしょうか。

これは編集する上では意味のない区切りなので、オブジェクト同士を結合して一つのオブジェクトにします。
blender-cg.net


さて、編集しよう…と編集モードに入ると驚きの頂点数です。
f:id:bluebirdofoz:20170609014135j:plain
頂点数は7万8千個。これをhololens上で一つのオブジェクトとして出力するのは難しそうです。
Decimateモディファイアを使って頂点数を10分の1にします。
blenderguchi.hatenadiary.jp

頂点数は1万個になりました。これでもそれっぽくは見えます。
f:id:bluebirdofoz:20170609014308j:plain
後はひたすら、オブジェクトデータを編集していきます。
不要な頂点の削除やメッシュ抜け部分の埋め、更にUV展開してテクスチャを塗ればそれっぽくなるかもしれません。

しかし、流石に容易にはいかず、途中で断念しました。
f:id:bluebirdofoz:20170609014405j:plain
テクスチャくらいは付けようとしましたが、UV展開のためのシーム付けが上手くいきませんでした。
結合したは言え、オブジェクトの切れ目が残っているためです。45個のオブジェクト間のスムーズな結合も必要になってきます。

あくまで、このマッピングデータは参考として、物がある位置に円オブジェクトや正方形オブジェクトを置いて部屋を作った方がポリゴン数は減るし、仕上がりも綺麗になる気がします。
SpatialMappingのデータはゴミデータも多く、Blenderでオブジェクトを作成する際の元データとしての活用には工夫が必要そうです。


因みに3Dモデリングの学習ですが、かんたん講座の続きも明日以降実施します。
自作キャラクタをアプリに登場させるところを目標とし、そこまで行ったらアプリを公開したいと考えています。

hololensの空間マッピングデータをUnity上で利用する

今回はおいかけっこアプリの改修枠(+hololensの技術調査)です。
本日、会社でhololensに関する勉強会があったのですが、その中で会社の先輩にUnityのゲームオブジェクトとして、hololensで記録したマッピングデータが利用できることを教えてもらいました。

おいかけっこアプリに取り込んでみたので、実施手順を以下にまとめます。

まず、hololensのデバイスポータルを開き、「3DView」ページで「Update」ボタンを押下し、最新のマッピングデータを確認します。
f:id:bluebirdofoz:20170608000819j:plain
バイスポータルの設定方法は以下を参照。
azure-recipe.kc-cloud.jp

そのまま「Save」ボタンを押下すると、マッピングデータがobjファイルとしてダウンロードできます。
f:id:bluebirdofoz:20170608001001j:plain

後はそのobjファイルをunityのプロジェクトに取り込んで…。
f:id:bluebirdofoz:20170608001018j:plain

ゲームオブジェクトとしてドラッグ配置するだけです。あら簡単。
f:id:bluebirdofoz:20170608001029j:plain

今回の場合、中心座標が何もないところになっていたので、位置を合わせる等の微調整は必要となりました。
丁度、人影が写っていたので、大きさを比較しました。
サイズについては、ちゃんとUnity内の「Scale:1」=「1メートル」になっており、変更する必要がありませんでした。
f:id:bluebirdofoz:20170608001120j:plain
更にマテリアルを変更してマッピングデータを見やすくしています。

これでUnity上で疑似的にSpatialMappingでのゲームの動きを確認できます。
実際のマッピングでは床に微妙な凸凹があったり、階段などはどうマッピングされるのかという問題や疑問があります。
予め、hololensでマッピングしたデータを取り込むことで、階段をキャラクタが登ることができるのかなどのデバッグに重宝しそうです。


早速、おいかけっこアプリを起動して動きを確認してみましょう。「再生」ボタンをクリックします。
f:id:bluebirdofoz:20170608001330j:plain
……ユニティちゃんがマップを突き破り、奈落の底へと飲み込まれていきました。

objファイルをそのまま読み込んだ状態では、ゲームオブジェクトに衝突判定がないためでした。
キャラクタが立てるようにするにはメッシュコライダーを設定しておく必要があります。
f:id:bluebirdofoz:20170608001410j:plain

きちんと床に立ちました。成功です。
f:id:bluebirdofoz:20170608001427j:plain

キャラクタが床の上を歩けたり、シグナルに応じてメッシュ変更のスクリプトがきちんと動くことも確認できます。
f:id:bluebirdofoz:20170608001453j:plain

新規オブジェクトの反映がスムーズに行くのは、再設計でフィールドViewを切り分けた成果です。実に素晴らしい。

ARとVR技術を色々調べてまとめる番外編(WebVR)

本日はARとVR技術の調査枠です。
仕事で3Dモデルを手軽にhololensで見る方法がないかという話があり、WebVRという技術が目に留まりました。
今回は、この「WebVR」について調べてみます。
・WebVR
WebVR - Bringing Virtual Reality to the Web
qiita.com
html5experts.jp


WebVRとは簡単に言えば、WebGLのページにVR機器でアクセスすることで、3Dオブジェクトを3次元空間上で確認できる技術です。
3Dモデルの変換表示をVR機器のアプリに作り込まずとも、Webサーバ側に3Dモデルを表示するWebGLページを用意して、そこにアクセスすればよいという目論みです。

物は試しです。hololensでWebVRが使えるか調べてみます。
が…3時間ほど調べてまとめきれませんでした。現在、状況の変動が激しい技術のようでどれが最新情報かさっぱりわかりません。
本日の成果では、私の環境ではhololens、OculusRift共に、WebVRのコンテンツが全く確認できないという燦燦たる状況でした

因みに確認にはmozvrのページを用いました。
vrlist.io


本日の調査情報を備忘録として残しておきます。全くまとまっていないですが、明日は早いのでもう寝ます。

さて、hololensについては現状、WebVRが使えるブラウザはありませんでした。

現時点でhololensで利用できるブラウザは「Microsoft Edge」のみです。
今後Microsoft EdgeでもWebVRをサポートすることはアナウンスされていますが、まだhololensには対応していない模様です。
www.moguravr.com

hololensが無理でも、折角なので家にあるOculusRiftからWebVRを体験できないか試みることにしました。
以下ページからWebVRに対応しているNightlyブラウザをインストールします。
www.mozilla.org

が動きませんでした…同様の報告があり、firefox.exeが動きません。
forums.oculus.com

ただ、上記ページでも動いたと言う人が居たり、動かないと言う人が居たり…以下の対処法をすれば動くと言う人もいますが、やはり自身の環境では動きませんでした。
webvr.rocks


ならばと以下を参考に、WebVRページで提供されているChromium WebVR版をインストールしました。
qiita.com

しかし、こちらも動きませんでした。
どうもOculus Riftの最新のRuntimeに問題があり、最新版が入った状態だと動作しないという情報があります。
確認できていませんが、両方のブラウザが動かないため、これが原因かもしれません。

最後の頼みの綱と、Oculus社自ら提供している以下の「Carmel」ブラウザに望みをつなぎます。
www.moguravr.com

が…こちらはまだGearVR版しか提供されていませんでした。ううん。。OculusRiftはここで八方塞がりです。
www.oculus.com

GearVRも自宅にあるのでそちらなら、どれかは使えそうですが、今日はここで打ち切りました。

上でMicrosoft Edgeではhololensはまだ対応していないと言いましたが、色々調べていたところ。
以下のページでは「Microsoft Edge」の「Windows Mixed Reality」にしっかりチェックがついてるのを発見…。
webvr.rocks

どういうこと?と調べてみると、Windows 10 Creators Updateというものに登録していると、先行して試すことができるっぽい?
webvr.rocks

ただシステム要件「Windows 10 64-bit」とあるので、これは「Windows Mixed Reality」の中でも”Acer Windows Mixed Reality Headset”のようなデスクトップPCを用いるMR機器でのみ利用可能なようです。
(hololensは32-bit)

うーん。私的に期待の技術なんですが、個人利用には障害が多そうです。