MRが楽しい

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

HoloLens2でホロモンアプリを作る その106(シェアリング実装の仕様検討)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。

今回からシェアリング実装を進めていきます。今回は仕様検討をまとめます。

シェアリングのプラットフォーム

今回はシェアリングのプラットフォームに Phothon を用いることにしました。
bluebirdofoz.hatenablog.com

ホロモンアプリのシェアリング実装における課題

ホロモンアプリでシェアリングを実装するに当たって大きな課題となるのが、空間マッピングの問題です。
シェアリングを行う方法として人の位置や動きなど最低限の入力のみを共有して、各デバイスで同じロジックを走らせることで同じ状況を再現する方法があります。
しかし各々のデバイスで全く同じ空間マッピングが生成されるということはないため、各デバイスで同じロジックを動かしてもホロモンが同じ動作をしてくれる保証が得られません。
よって空間マッピングとそれに対する物理演算を多用するホロモンアプリでは各デバイスで状況に応じた計算を行う方法は適切ではないと判断できます。

ホストとクライアントの動作仕様

これを踏まえて今回は以下のようにホストデバイスで全ての物理演算を行い、ホロモンやアイテムの座標やアクションのみを共有する形で実装することとしました。
いくつかの課題が発生しますが、まずは許容することとします。

・ホスト側の動作
 - ホロモンはホストデバイスの空間マッピングに基づき単体動作と同様の動きをする
 - ルームに参加したクライアントの頭部と手の座標や状態にホロモンは反応を示す

・クライアント側の動作
 - ホストデバイスにおけるホロモンやアイテムの状態をそのまま表示する
  ホロモンとアイテムに関するロジック処理やアタリ判定はクライアント内では無効化しておく
  (要はひとまず単なるビューアプリ的な感じの動作をさせる)

・シェアリング手法
 - ホストとクライアント間の通信には Photon を利用する
 - ホストとクライアントの位置合わせにはQRコードによる位置合わせを利用する
 - デバイスはHoloLens2同士の想定とする

・クライアント側から共有する情報
 - プレイヤー頭部の座標、回転、状態
  (首振り、頷き等の細かな状態判定はクライアント側で実施する)
 - プレイヤー両手の座標、回転、状態
  (こちらも手のジェスチャーの細かな状態判定はクライアント側で実施する)

・ホスト側から共有する情報
 - ホロモンの座標、回転、スケール、アニメーションの状態、ステータス?
  (クライアントから受け取った情報を含めた環境下でホロモンが動作した結果を共有する)
 - 各アイテムの座標、回転、スケール、状態
  (クライアントから受け取った情報を含めた環境下でホロモンが動作した結果を共有する)

・予想される課題
 - ホストデバイスの負荷が増える
 - 各々で計算する場合に比べて通信データ量が増える
 - ホストから離れた場所の空間マッピングが利用できない
  (空間マッピングを常に共有するのはデータ量的にあまり現実的ではない)
 - ホロモンやアイテムを掴むという操作がクライアント側はできない
  (MRTKの掴みコンポーネントの処理をクライアント側で利用できないため、自作コンポーネントを作ればできるがひとまず見送り)

こんな感じの計画で実装を進めていきます。10月末までには試せるようにしたい。

MetaQuest2の開発者モードを有効にする

本日は MetaQuest2 の小ネタ枠です。
MetaQuest2の開発者モードを有効にする方法を記事にします。

前提条件

スマートフォンの Oculus アプリで MetaQuest2 のセットアップを実施済みである必要があります。

設定方法

スマートフォンの Oculus アプリを起動し、[メニュー]タブを開きます。
一覧から[デバイス]を選択します。

Oculus アプリとペアリング済みのデバイスが表示されます。
開発者モードに設定したいデバイスを選択します。

ページを下にスクロールすると[開発者モード]の項目があるのでこれを選択します。

ボタンをタップして開発者モードを ON にします。
登録アカウントが開発者登録されていない場合はここで登録画面が表示されるようなので登録を行う必要があります。

CLIPSTUDIOで集中線を描く

本日は CLIPSTUDIO の小ネタ枠です。
CLIPSTUDIOで集中線を描く方法を記事にします。

素材の集中線を利用する

手軽に集中線を描きたい場合は素材ウィンドウから集中線の素材を取得します。

素材ウィンドウの[すべての素材 -> 漫画素材 -> 効果線 -> 集中線]を開きます。

利用したい種類の集中線をレイヤーにドラッグします。

後は位置や大きさを調整します。

集中線ツールを利用する

もし集中線の中心を少しズレた場所にしたいなどカスタマイズが必要な場合は集中線ツールを利用します。
[図形]ツールを選び、サブツールから[集中線]を選択します。

利用したい集中線のツールを選択し、マウスドラッグで集中線の範囲を指定します。

以下のように集中線のレイヤーが作成されます。

線の密度を増やしたい場合などはツールプロパティで設定することで変更できます。

[Ctrl]キーを押しながらポイントを調整することで集中線の中心位置をズラしたり全体の形状を変更させたりできます。

MetaQuest2のミラーリングをWebブラウザで行う

本日は MetaQuest2 の小ネタ枠です。
MetaQuest2のミラーリングWebブラウザで行う手順です。

MetaQuest2のミラーリング

MetaQuest2 のミラーリングは Quest2 の画面をワイヤレスでスマホやPCに表示させる機能です。
PC 側でWebブラウザを使って Quest2 の画面をミラーリングするには Quest2 と同一ネットワーク空間内にあるPCで以下の URL にアクセスします。
www.oculus.com

実行手順

PC 側で Chrome または Edge など本機能に対応しているWebブラウザを起動し、以下の URL にアクセスします。
[ログイン]ボタンをクリックしてアカウント情報を入力してログインします。
www.oculus.com

ログインが完了すると以下の画面が表示されます。
PC 側の準備はこれで完了です。

Quest2 でメニュー画面を開き、[シェア]アイコンを選択します。

シェア画面が開くので[ミラーリング]を選択します。

ミラーリング対象の選択画面が表示されるので[コンピューター]を選んで[次へ]を選択します。

同じネットワーク空間に接続可能なWebブラウザが見つかり次第、ミラーリングが開始されます。

以下の通り、PC 側のWebブラウザから Quest2 の画面を確認できました。

2024/02/09追記

最新のQuestバージョンでは[シェア]アイコンではなく[カメラ]アイコンから実行する手順になっています。
bluebirdofoz.hatenablog.com

Blender 3.0の自動保存の機能を利用する

本日は Blender 3.0 の小ネタ枠です。
Blender 3.0の自動保存の機能を利用する方法を記事にします。

Blenderの自動保存

Blenderの自動保存を有効にするにはメニューから[編集 -> プリファレンス]をクリックします。

プリファレンスウィンドウが開くので[セーブ&ロード]タブを開き、[自動保存]にチェックを入れてタイマーで自動保存を行う間隔を設定します。

次に[ファイルパス]タブを開き、[一時フォルダ]のディレクトリを指定します。
ここが自動保存の出力ディレクトリになります。作業中のプロジェクトファイルと同じディレクトリに出力したい場合は[.\]と設定します。

これで指定した間隔で自動保存のファイルが出力されるようになります。
自動保存のファイルは上書きで保存されていきます。

変更後、設定をデフォルト設定として利用したい場合は左下のアイコンから[プリファレンスを保存]をクリックして設定を保存します。
[プリファレンスを自動保存]が有効の場合は自動でデフォルト設定として保存されます。

Mugicha-NPR-Shaderを使ってBlenderのホロモンでアニメ調の肌のハイライトを再現する

本日は Blender の小ネタ枠です。
Blenderでアニメ調の肌のハイライトを再現するMugicha-NPR-Shaderをホロモンに使ってみたので記事にします。

Mugicha-NPR-Shader

Mugicha 氏が公開しているBlenderでアニメ調の肌のハイライトを再現するシェーダです。
以下のページから無料でダウンロードして利用することができます。
booth.pm
利用手順やパラメータの解説などは添付のPDFにスクショ付きで解説されています。

ホロモンに試してみた

アニメ調の肌のハイライトを再現するシェーダということですが今回はホロモンで試してみました。

サンプルプロジェクトをベースにする方法

最初にサンプルプロジェクトを開きます。

今回はここにFBXファイルでエクスポートしていたホロモンモデルを取り込みました。

サンプルのシェーダをベースに利用したいので例えばホロモンの肌マテリアルに一旦該当のサンプルマテリアルを割り当てます。

[New Material]ボタンをクリックしてマテリアルを複製します。

後はこのマテリアルを色調整などを行ってエディターで編集していきます。

シェーダのみ取り込む場合

または独自の Blender ファイルをベースにしたい場合は Edit -> Append からマテリアルを取り込むことも可能です。

サンプルファイルを指定すると Material を取り込むことができます。
ただし、この場合は手順書に従ってシーンの環境を設定する必要があります。

結果

色を変えてみただけでも以下のような仕上がりになりました。肌の質感にツヤがありとてもいい感じです。
目の部分はテクスチャを使っているためか少し光の反射がキツイ感じになってます。沢山のパラメータがあるので色々弄るとこれも調整できるかもしれません。

TextMeshProで文字列がはみ出した部分を改行したり[...]に置換したり別のTextに肩代わりさせる

本日は TextMeshPro の小ネタ枠です。
TextMeshProで文字列がはみ出した部分を改行したり[...]に置換したり別のTextに肩代わりさせる方法を記事にします。

TextMeshPro

MRTK ではテキストを表示するプレハブで TextMeshPro コンポーネントが利用されています。

デフォルトでは表示範囲より長い文字列が入力された場合、折り返して表示されます。

折り返しのON/OFF

文字列の折り返しを切り替える場合は[Wrapping]項目を変更します。

Enabled

文字列の折り返しを行います。

Enabled

文字列の折り返しを行いません。

はみ出し部分の処理方法

更に表示範囲からはみ出した文字列の処理方法を[Overflow]項目で変更できます。

Overflow

そのまま表示範囲をはみ出して表示されます。

Ellipsis

はみ出す部分を[...]の文字に置換して表示します。

Truncate

表示範囲で表示可能な行数まで表示します。

Page

表示範囲を超える行がある場合、ページの設定が追加されます。
ページ数を指定するとそのページの文字列が表示されます。


Linked

表示範囲を超えた部分を別の TextMeshPro コンポーネントに表示させます。

そのほか

その他、[Overflow]には[Masking][Scroll Rect]項目がありますが、こちらは試しても調べてみても効果が不明でした。効果が分かり次第、追記します。