夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

複数のHoloLens 2でホログラムを共有する その③オブジェクトの移動の共有 

本日はSharing勉強枠です。

HoloLens 2ではデバイスをかけている人のみがホログラムを見ることができますが、HoloLens 2が複数台ある場合は一つのホログラムを複数人で操作することができます。

前回は[Photon]の設定とPCとの共有を行いました。

redhologerbera.hatenablog.com

〇オブジェクトの移動の共有

①hierarchyウィンドウから[SharedPlayground]の子オブジェクトとして[TableAnchor]を配置します。

f:id:Holomoto-Sumire:20220122195707p:plain

[TableAnchor]は[Assets\MRTK.Tutorials.MultiUserCapabilities]内にあります。

②[MixedRealityPlayspace]オブジェクトの子オブジェクトから[MainCamera]を選択し[AR Camera Manager]コンポーネントを加えます。

f:id:Holomoto-Sumire:20220122194949p:plain

[AR Camera Manager]はARFoundationによって提供されるコンポーネントの一つでAR特有のカメラ挙動を制御する役割があるようです。

docs.unity3d.com

③[TableAnchor]オブジェクトのインスペクターウィンドウから[AR Session Origin]コンポーネントの[Camera]に[MainCamera]をアタッチします。

f:id:Holomoto-Sumire:20220122195958p:plain

④[NetworkLobby]オブジェクトの子オブジェクト[NetworkRoom]オブジェクトのインスペクターウィンドウから[PhotonRoom]の[RoverExplorerPrefab]に[RoverExplorer_Complete_Variant]プレファブをアタッチします。

f:id:Holomoto-Sumire:20220122200728p:plain

[RoverExplorer_Complete_Variant]プレファブは[Assets/MRTK.Tutorials.MultiUserCapabilities/Resources/RoverExplorer_Complete_Variant.prefab]にあります。

これがシェアされるオブジェクトになります。

⑤[PhotonRoom]の[RoverExplorerLocation]に[TableAnchor]の子オブジェクト[Table]オブジェクトをアタッチします。

f:id:Holomoto-Sumire:20220122201354p:plain

以上で準備が完了しました。

HoloLens 2へデプロイし、Unityエディタでも実行します。

youtu.be

Unityエディタ上でHoloLens 2での操作が見れるようになりました。

以上で複数人でホログラムの移動の共有ができました。また、ボタンなどの関数発火にも連動していることがわかります。

HoloLens 2でブルームがしたい。 XRMTG 22年1月 LT登壇

本日はイベント登壇枠です。

〇XRMTG 22年1月

XRミーティング(XRMTG)は毎月一回第三水曜日に行われているxRイベントです。

今月は22年1月19日に行われました。

redhologerbera.hatenablog.com

今回はこのイベントで発表した内容を紹介します。

〇ブルームとは?

ブルームはグラフィックの表現技法のひとつで光の空間表現を行います。

f:id:Holomoto-Sumire:20220121204936p:plain
ブルームなし

f:id:Holomoto-Sumire:20220121204809p:plain
ブルームあり

ブルームの表現があることで光がオブジェクトから空間へ伝わっていることがわかると思います。

Unityでは[ポストプロセス(Postprocess)]と呼ばれる機能を用いてこれを実装しています。

f:id:Holomoto-Sumire:20220121205132p:plain

Unityの[SRP(スクリプタブルレンダーパイプライン)]では[Volume]コンポーネントによって[ポストプロセス(Postprocess)]は実現しています。

[ポストプロセス(Postprocess)]は後処理とも呼ばれる処理で、画面に画像を描画するときに行われる画像加工処理を指します。

イメージとして目に届く画像を眼鏡(ポストプロセス)によって加工しているようなものです。

f:id:Holomoto-Sumire:20220121205642p:plain

ブルームの処理はある一定以上明るいピクセルを抽出し、ぼかしてもともとの画像に合成するという処理をしています。

f:id:Holomoto-Sumire:20220121210353p:plain
もともとの画像

f:id:Holomoto-Sumire:20220121204809p:plain
合成後

〇HoloLens 2でのブルームの欠点

HoloLens 2でもブルームを使用することができます。

redhologerbera.hatenablog.com

この際問題となるものが2種類あります。

〇処理が重い

前述のとおりブルームを表現するためには一度計算し描画した画像をさらに加工するということが行われています。

HoloLensなど双眼のHMDの場合、右目、左目と2回描画しているため(※)単純にスマートフォンやスマートフォンなどと比べより負荷が増えます。

※厳密には2倍の計算をしているわけではなく、ある程度の処理を共通化している。

〇暗い

youtu.be

 もう一点の問題がHoloLens でブルーム…正確にはポストプロセスを使用する場合キャプチャ時に背景が暗くなってしまう点があります。

 これは、前述のとおりポストプロセスが既に描画した映像を再加工する際にα値(透明度)の情報を保持していないためと考えています。

 通常のVRやスマホゲームではグラフィックで作られた背景のためα値が存在しないことによる計算量が少ないなどメリットはあるもののデメリットはありません。

 HoloLens の場合透明なディスプレイに描画するため黒は実機上で透明と同義で見られますが、キャプチャ時には黒く描画されてしまうため映像が暗くなってしまいます。

〇FakeBloomShader

今回はBoothで公開されていた[FakeBloomShader]を改造してHoloLens 2に最適化しシェーダーでブルームを表現しました。

booth.pm

youtu.be

この利点としては映像の通り背景が暗くなることがありません。

またシェーダーのため、オブジェクトを描画していないタイミングでは処理が行われることはありません。(ポストプロセスの場合、眼鏡のイメージ同様常に処理が走っている)

オリジナルからの改造点としては次のようになります。

・URPに対応させた

・シングルパスインスタンシングレンダリングに対応

・オリジナルでは2つのパスで行われていた処理を一つにした

・その他if文を削除するなど処理の最適化

このうちシングルパスインスタンシングとは、xRの双眼ディスプレイ特有の右目、左目の画面描画に対する最適化です。

オリジナルのシェーダーではこれに対応していないことにより、片目が描画されない問題がありました。

このシェーダーの改造に関してはもう少し筆者のオリジナルの要素を作成したのち、記事にします。

〇まとめ

ポストプロセスを用いらず、シェーダーでブルーム表現することで多くの問題が解決しました。半面ブルーム処理が重いという点は変わらないためより軽量な手法を編み出す必要があります。

HoloLens 2の頭部調節スクリューが壊れました。 直し方とその後の対応。

本日はHoloLens 2のハードウェアトラブルの記事になります。

〇HoloLens 2の故障

22年の年始にHoloLens 2のパーツが脱落するトラブルがありました。

こちらは過去の記事で詳細をまとめています。

redhologerbera.hatenablog.com

今回はこちらのトラブルにおいての取った対応と、その後をまとめます。

〇Microsoft のサポートへ連絡

 MicrosoftではHoloLens 2のサポートを行っています。これはHoloLens 2がビジネス展開されていることに合わせられており、基本的に個人でHoloLens 2を持つという事が少ないため[SupportForBusiness]にて行われています。

support.serviceshub.microsoft.com

 こちらでインシデントとして報告することでMicrosoftのHoloLens担当者よりメールもしくは電話が届きます。

 筆者の場合はインシデント報告が金曜日であったこともあると思いますが、翌週の火曜日にメールが届きました。

f:id:Holomoto-Sumire:20220120185437j:plain

 こちらで受けた案内がHoloLens 2は修理を受け付けておらず、取れるサポートが新品との交換のみになる。といったものでした。

 HoloLens 2は[Industrial Edition]以外は1年保証となっています。

 

f:id:Holomoto-Sumire:20220120185707j:plain
https://www.microsoft.com/ja-JP/hololens/buy より引用

筆者のHoloLens 2は2020年7月に購入しており保証期限は半年ほど過ぎていました。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

 これによって有償対応になったのですが、その額がHoloLens 2新品の約60%ほど、また交換後のHoloLens 2に関しては90日間の補償対象という案内でした。

〇原因と自力修理

 原因と修理のためにある程度分解を試みました。

 結果修復する方法がわかりました。

 f:id:Holomoto-Sumire:20220107222520j:plainf:id:Holomoto-Sumire:20220107222505j:plain

 脱落した頭部スクリューパーツは頭部調節ダイアルのノブを兼ねており、頭部調節が利かなくなった原因も、このノブが刺さっていないためでした。

 f:id:Holomoto-Sumire:20220120210915p:plain

 またHoloLens 2本体のノブ部分にある4か所の凹が付いたリングがねじになっており、脱落したスクリューパーツに対する逆ねじになっていました。

 つまり今回の脱落の原因は何らかの原因(おそらく経年疲労)でねじが外れたことになります。 本体側のリングの凹部分にピンセットなど細くてかたい棒を使用し回すことでねじを締めることができます。

 f:id:Holomoto-Sumire:20220120212001p:plain

これによってふたたび頭部調節が可能になりました。

この原因をつかむまで半分分解してしまったので理屈がわかり分解する必要がないとわかったときはショックを受けましたものの無事に直すことができました。

XRMTG 22年1月に参加 登壇しました。

本日は昨日に引き続きイベント参加枠です。

〇XRMTGとは?

まもなく5周年を迎えるようです。

osaka-driven-dev-br-tokyo.connpass.com

XRミーティングは大阪のコミュニティである大阪駆動開発を中心に全国のxRコミュニティがオンライン上で集まって行われる月一のイベントです。

主にやってみたネタ、困っているネタ、作ったネタ、イベント告知などxRに関することであればどんなことでも共有できるイベントになっています。

〇xRニュース 山地さん

最初は毎回恒例の山地さんです。

最近のxRに関するニュースを共有いただきました。

・デジタル恐竜パークの無頼裏情報が公開

デジタル恐竜パークとは北九州市で行われたHoloLens 2ともびりティを組み合わせたコンテンツで屋外でMixedRealityなジュラシックパークのような体験を行えました。

news.microsoft.com

・HoloLens日本上陸5周年

昨日1月18日はHoloLensが日本でリリースされて5年がたった記念日でした。

こちらのイベントに関しては昨日に記事でまとめています。

・HoloLensハッカソン開催

2月の初頭にはHoloLensハッカソンが開催されます。

osaka-driven-dev.connpass.com

こちらはオンライン上で行われ、チームごとに競い合うイベントです。

筆者もスタッフとしても参加者としても参加する予定です。

・Magic Leap 2をヘルスケア方面にアーリーアクセス開始

Magic LeapはHoloLensの対抗馬となるデバイスです。

Magic Leap 2はまだ発売されていませんがヘルスケアの方面で先行リリースがされるようです。

〇HoloLens 2でブルームがしたかった話  筆者

こちらは筆者の登壇です。

こちらに関しては金曜日記事にします。(予定)

〇MixedReality Toolkit v3について 宮浦さん

先日発表されたMRTK v3に関して共有いただいた内容を整理してわかりやすく共有いただきました。

 MRTKは便利である反面コンポーネントの課題や使用環境の課題など多くの問題もありました。

 MRTK v3はフィードバックと業界標準のサポートにのっとりより使いやすくなるようです。

〇今作っているREALAPS-Engineについて 山本三七男さん

本日コミュニティに興味を持ち即LTを申し込んだ方のようです。

普段は見え方の研究をしているようで、視環境と呼ばれる見え方の評価、アーカイブなどを行っているようです。

 REALAPS-Engineと呼ばれる光情報をレンダリングするソフトウェアを現在開発していると共有いただきました。

apitan-ar.net

〇XRアプリコンテスト「#ミライノコウベ」 xin suzukiさん

xinさんはXRMTGの司会を担当されている方です。

アプリコンテストこと「あぷこん」に関しての共有で、気軽に参加できるアプリの体験がないという課題をもとにミライノコウベをテーマに開催されるxRアプリ開発イベントです。

〇ゼロから始めるUnity入門 安田さん

北海道から共有いただきました。

2月に「ゼロから始めるUnity入門」というイベントで週一で全三回の講座が行われるようです。

 これはMRTKを使用して初心者向けに行われるようです。

 昨年はBlenderなど年一をめどに多くのイベントを行っているようです。

次回は2月の第三水曜日、2月16日に行われます。

複数のHoloLens 2でホログラムを共有する その② Photonを使用した自己位置の共有

本日は昨日に引き続き複数台のHoloLens 2を使用してホログラムを共有するチュートリアルを進めます。

〇環境構築

前回は環境構築を行いました。

redhologerbera.hatenablog.com

UnityのバージョンはUnity2021.3.18f1でMRTKのバージョンは2.73です。

〇Photonとは?

[Photon Engine]はExit Gamesが提供している通信サービスのことを指します。Unityの場合[Photon Unity Networking]で[PUN]と呼ばれることもあります。

その特徴として、マルチプレイヤーゲームを簡単に実装できるというものがあります。

通常複数人のゲーム同期となると、サーバーを立て条件分岐を作り始めてゲーム内の実装に取り掛かれますが、PUNを使用することでUnityゲームのことだけ実装し、サーバーを含めゲーム同期に関する多くの部分を実装せずに作ることができます。

www.photonengine.com

今回の複数台でのホログラムの同期もPUNを使用することでサーバー側などの通信を全く気にすることなく行うことができます。

〇Photon Engineの設定

①Photon Engineのサイトでサインインを行います。

id.photonengine.com

まだアカウントが無い場合アカウントを作成します。

②上部バナーから[ダッシュボード]を開きます。

f:id:Holomoto-Sumire:20220117171614j:plain

ダッシュボードでは自身のアプリやIDなどを管理することができます。

③[新しくアプリを作成する]を選択します。

f:id:Holomoto-Sumire:20220117171720j:plain

④[Photonの種類]を[PUN]に設定して任意の名前のアプリケーションを登録します。

f:id:Holomoto-Sumire:20220117171836j:plain

⑤ダッシュボードに表示される作成したアプリから[アプリケーション ID]をコピーします。

f:id:Holomoto-Sumire:20220117172119j:plain

以上でPhoton側の設定は完了しました。次にここで設定した情報とUnityアプリケーション側を紐づけます。

⑥Unityの[Photonwizard]に[アプリケーション ID]をペーストします。

f:id:Holomoto-Sumire:20220117203357p:plain

もしくは[Assets/Photon/PhotonUnityNetworking/Resources/PhotonServerSettings.asset]から[Server/settings]に加えます。

f:id:Holomoto-Sumire:20220117203602p:plain

以上でUnityとPhotonの紐づけが完了します。

〇ユーザーの配置

①MRTKの設定を終えたシーンに以下のオブジェクトを配置します。

f:id:Holomoto-Sumire:20220117204220p:plain

・SharedPlayground

・DebugWindow

・NetworkLobby

②[NetworkLobby]オブジェクトの子オブジェクト[NetworkRoom]を開き[PhotonRoom]の[Photon User Prefab]に[PhotonUser]をアタッチします。

f:id:Holomoto-Sumire:20220117204711p:plain

[PhotonUser]は[Assets/MRTK.Tutorials.MultiUserCapabilities/Resources/PhotonUser.prefab]にあります。

これが各ユーザーのカメラになります。

以上で自己位置の共有が完成しました。

ビルドしてHoloLens 2同士、もしくはHoloLens 2とPCのUnityEditorで動作を見ることができます。

複数のHoloLens 2でホログラムを共有する その① 環境構築

本日はSharing勉強枠です。

HoloLens 2ではデバイスをかけている人のみがホログラムを見ることができますが、HoloLens 2が複数台ある場合は一つのホログラムを複数人で操作することができます。

これを[シェアリング]と呼び、HoloLensのMixedReality体験で重要な機能です。

2021年後半より話題になっている[メタバース]を行う上でも重要な要素ですが、複数人での工業製品とうの作業、エンターテインメントなど広い分野で使用されています。

[Microsoft Mesh]も同様に複数人が一つのオブジェクトを共有することで成立している体験になります。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

今回はこの複数台HoloLens 2を使用しホログラムを共有します。

公式チュートリアルに沿って進めていきます。

docs.microsoft.com

また、バージョンが少し古く手順が若干異なりますが関西で活躍されているHoloRanger@Futo_Horio(株式会社神戸デジタル・ラボ)さんの記事も、手順が丁寧なためとても参考になります。

qiita.com

〇環境

・Windows 10 PC

・HoloLens 2×2※1

・Unity2020.3.18f1(LTS)※2

・Azure Spatial Anchor 2.11.0

・MRTK v2.73

※1 HoloLens 2が一台あればPCのUnityEditor上でシェアリングを行うことができます。

※2 Unity 2021ではAzure Spatial Anchorが対応していないのかエラーが発生しました。

〇環境構築

①Unityで新規プロジェクトを作成し[BuildSettings]より[Switch Platform]でターゲットプラットフォームをUWPへ切り替えます。

f:id:Holomoto-Sumire:20220116175859p:plain

②[ProjectSettings]より[Publishing Settings]の[Capabilities]より次の項目を有効にします。

・InternetClientServer

・PrivateNetworkClientServer

f:id:Holomoto-Sumire:20220116180115p:plain

UWPアプリケーションはセキュリティの面で使用する機能ごとに宣言する必要があります。ここではネットワーク通信の機能を有効にしています。

③[MixedReality Feature Tools]より以下の項目をインポートします。

・Azure MixedReality Service

 ・Azure Spatial Anchors SDK Core

 ・Azure Spatial Anchors for Windows

・Mixed Reality Toolkit

  ・Mixed Reality Toolkit Examples

  ・Mixed Reality Toolkit Extentions

  ・Mixed Reality Toolkit Foundation

  ・Mixed Reality Toolkit Tools

・Platform Support

 ・MixedReality OpenXR Plugin

このうちMRTKに関してはMixed Reality Toolkit Foundation以外は任意で導入となります。

[MixedReality Feature Tools]はUnityでのMixedRealityアプリ開発に必要なパッケージを一括管理できるソフトウェアになります。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

④チュートリアルのページより以下のパッケージをインポートします。

・MRTK.HoloLens2.Unity.Tutorials.Assets.GettingStarted.2.7.2.unitypackage

・MRTK.HoloLens2.Unity.Tutorials.Assets.AzureSpatialAnchors.2.7.2.unitypackage

・MRTK.HoloLens2.Unity.Tutorials.Assets.MultiUserCapabilities.2.7.2.unitypackage

docs.microsoft.com

f:id:Holomoto-Sumire:20220116181606p:plain

⑤[Project Settings]を開き[XR PluginManagement]タブの[OpenXR]および[Microsoft HoloLens feature group]を有効にします。

f:id:Holomoto-Sumire:20220116181831p:plain

⑥Unityのワールドメニューから[Window]→[PackageManager]を開きます。

f:id:Holomoto-Sumire:20220116182028p:plain

⑦[My Assets]から[PUN 2 Free]をインポートします。

f:id:Holomoto-Sumire:20220116182225p:plain

これは一度でもPUN 2 Freeをインポートしたことがある場合ですが、もし初めてPUN 2を使用する場合UnityのAssetsStoreからインポートします。

assetstore.unity.com

⑧PUN 2初期導入時にwizardが開きます。ここではPhotonのサイトで作成したアプリIDを使用します。

www.photonengine.com

以上で環境構築が完了しました。

明日PCとHoloLens 2の共有を行います。

HoloLens 2セットアップ時にライセンス同意画面でエラー表示が発生し進まない問題

本日はHoloLens 2のトラブルシューティングです。

HoloLens 2セットアップ時にERRORのループで詰んでしまったため今回おこなったトラブルをまとめます。

〇Windows ライセンス合意画面でエラーが発生し進まない問題

HoloLens 2を初期起動しセットアップを行う際には次の手順を追うことになります。

この手順での画像は実機上で録画できないため、公式ドキュメントより引用します。

docs.microsoft.com

①初期起動時には[Playground]アプリ同様のハチドリが出現します。

f:id:Holomoto-Sumire:20220115151156p:plain

f:id:Holomoto-Sumire:20220115151303p:plain

②言語選択を行います。ここで選択した言語はWindowsの言語として使用され音声認証(音声コマンド)もここに依存します。

後に変更可能ですが、変更するためにはセットアップを終える必要があります。

f:id:Holomoto-Sumire:20220115151337p:plain

筆者は日本語の『選択(Select)』、『私のIPアドレス教えて(What is My Ip address)』等かっこ悪く感じるのに加え、多くの公開されているアプリが英語の音声コマンドのみ対応していること、英語の勉強と言ったり理由で好んで英語を選択しています。

③自身の地域を選択します。これは時間やネットワークの設定などに使用されます。

f:id:Holomoto-Sumire:20220115151907p:plain

特に理由が無い限り日本を選択します。

④EyeTrackingのキャリブレーションを行います。

f:id:Holomoto-Sumire:20220115151946p:plain

⑤ネットワークと接続します。

techcommunity.microsoft.com

このネットワークをセットアップ中に変更したい場合はHoloLens 2デバイスの音量下げるボタン(右側頭部)+電源ボタンを同時押しすることで可能です。

⑥Windowsのライセンス表示

f:id:Holomoto-Sumire:20220115153337p:plain

HoloLens を使用するためにはWindowsのライセンスに同意する必要があります。

本来ここは[Accept]を選択することで次に進むことができますが、筆者の環境では[Something wrong]のエラーが表示されループしてしまい進むことができませんでした。

〇Advanced Recovery Companion

[Advanced Recovery Companion]はMicrosoft StoreでWindows PC向けに提供されているアプリです。

使用することでHoloLensのOS関連のトラブルを修復することができます。

HoloLens とPCをUSBケーブルで接続します。指示に従ってリカバリーを開始するとPCにHoloLensのOSがダウンロードされます。

f:id:Holomoto-Sumire:20220115153847j:plain

ダウンロードにはネット環境などの依存もありますが1時間程度かかります。終了後はHoloLensへインストールが行われます。

f:id:Holomoto-Sumire:20220115154014j:plain

すべての処理が完了するとHoloLensが再起動します。

再びセットアップを行うことで最後まで進み、HoloLensのセットアップが完了します。

この問題は以下でも取り上げられており、SlackなどでHelpチャンネルでよく回答をいただいているEddさんがリカバリーツールの提供に協力しているようです。

redhologerbera.hatenablog.com

f:id:Holomoto-Sumire:20220115152636p:plain

これでも問題が解決しない場合Microsoft に問い合わせる必要があります。