1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Microsoft Meshのスペース内のオブジェクト管理を調べてみた

Posted at

Microsoft Meshのスペースの情報はどうなっているのか

Microsoft Meshは公式ドキュメントにある通り以下を実現することができます。

「ユーザーは世界中のどこからでも、プレゼンスを使用して接続し、空間間で共有し、共同作業を行えます。 」

つまりコラボレーションプラットフォームとして利用することが可能です。実際にコラボレーションする際には、ホストと参加者が同じ「スペース」という単位でオブジェクト等を共有し様々な共有体験を通じて意見交換やディスカッションを行うことができます。

image.png

このようにスペース内で3Dオブジェクト等を配置します。これらの情報は参加者すべてが共有されているのですが、どこでデータ管理されているか少しきになり、調査を行ってみました。

データそのものはOneDrive下で管理される

Microsoft Meshで利用する情報はすべてMeshアプリでログインしたMSアカウントのOneDrive配下に格納されます。格納場所は「Apps\Microsoft Mesh App(Preview)」内に作成されています(2021/09時点)

image.png

アプリ内のフォルダ情報(Microsoft Mesh App(Preview)直下)

Meshアプリフォルダの直下には2つの情報を格納するフォルダが存在します。

*.spaceフォルダ(各スペース内の情報を管理する)

image.png

Microsoft Mesh内で利用するスペース毎の情報を管理するためのフォルダです。スペース内の情報はすべてこのフォルダ内に格納されています。スペース内でオブジェクトを配置した場合にはこのフォルダ内にその情報(後述)が格納されています。spaceフォルダは複数作成することができます。ログイン時にはHomeスペースにいるため最低限1つはspaceフォルダが存在することになります。

MyContent

Microsoft Mesh内でカスタムオブジェクトを格納するためのフォルダです。あらかじめよく使う3Dオブジェクト等をこのフォルダに格納しておくと、Meshアプリからオブジェクトを利用することができます。実際に配置すると以下のような形で一覧表示されます。

image.png

アプリ内のファイル情報

Meshアプリとしての設定などについてはMicrosoft Mesh App(Preview)直下にいくつかのjsonファイルが用意されその中で情報が管理されています。

ファイル名 説明
avatar.json アバター定義ファイル。Meshアプリ内で利用するアバターの設定(髪型や服装など)を記録
contacts.json 招待済みユーザのアカウント情報管理ファイル。過去招待したユーザアカウントの情報を記録
index.json スペースの情報。このファイルは各spaceフォルダ内にも格納されています。対象のスペースがホームかどうか等を判別するための情報などが格納されています。
prefs.json Meshの環境定義ファイル。Meshアプリの各機能の有効/無効を管理しています。例えば試験的な機能等の有効/無効もこのファイルで管理されています。

spaceフォルダ内直下のデータ

各spaceフォルダ配下には以下の様に実際に空間内に配置しているオブジェクトの各種情報が入っています。

image.png

幾つかパターンに分かれてデータを持っています。基本的なデータ構成は以下の3つです。

  • オブジェクト生データ(ない場合もあります)
  • 空間情報(ない場合もあります)
  • オブジェクトメタデータ

上記のうち一番上のオブジェクト生データはOneDriveやローカルからアップロードしたオブジェクトや画像です。Meshアプリ自体がプリセットで持っていないオブジェクトや画像はほかの参加者との共有が必要なため設置したスペースにオブジェクトがコピーされるようになっています。
例えば、OneDrive上で作成したカスタムオブジェクト「cube.glb」データをスペース内に配置した場合は以下のような構成になります。

image.png

ここでよくわからないIDのファイルは設置したオブジェクトをGUIDで一意に管理しているようです。

Meshアプリではいくつかのデータタイプがありそれぞれデータの持ち方が少し違います。現在パターンとしてあるのは以下のものです。
まだ調査不足なところもあるので足りないものが見つかったら追加します。

  1. オブジェクト型(3Dオブジェクト、画像)
  2. インク型(空間にドラッグで描く線)
  3. 付箋
  4. マーク

※時々情報変わってる印象があります。おそらくメタデータを整理して集約する形になっていそう。

データの反映

動きを見ている限りはOneDrive内のデータのロードはスペースへの参加時になっているようです。スペース内に入ってからOneDrive上にデータを外部から格納しても認識している様子はなかったです。スペース内での作業はリアルタイムで動的に行われており、その情報が一定のタイミングでOneDrive配下にスナップショットとして残っているような仕掛けになっていて、スペース参加時

1. オブジェクト型(3Dオブジェクト、画像)

image.png

空間に出力するオブジェクトです。3Dオブジェクトはプリセットの地球といったもの、MyContent内に置いたオリジナルのglbデータなどです。画像はHoloLensで撮ったスクリーンショットを含めた画像データが対象になります。

オブジェクトの描画に関するデータは以下のものがセットになります。

  • 実データ(*glb,*png等)
  • 空間情報([GUID].obj)
  • メタデータ([GUID].obj.fenixmeta)

*[GUID]:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx形式の一意な文字列

ただ、ここ数日で空間情報をメタデータ側に寄せている修正が入っているのでこういうデータが入っているんだなぁ程度で見ておく方がいいかもしれないです。
(結構な頻度で変わっている気がします。)

実データの格納

プリセット以外のオブジェクトを扱った場合は参加したスペース内にオリジナルのオブジェクトデータが格納される仕様になっているようです。

空間情報

空間情報は[GUID].objファイルの中にバイナリで格納されています。ここにはオブジェクトの情報及び空間情報が格納されています。データはバイナリで格納されています。空間情報としてはUnityと同様の情報を扱っているようです。

  • Rotation(x, y, z, w)
  • Position(x, y, z)
  • Scale(x, y, z)

データ構造は以下の様になっているようです。まだ不明瞭なデータがいくつかあります。

image.png

先頭4バイト:????
ファイル名:配置したオブジェクトのファイル名
ストレージ:OneDrive(データファイルがOneDrive上) / Local(プリセット等ローカル上にあるデータ)
データ種別:Model(3Dオブジェクト) / Image(画像)
保存場所:CurrentSpaceContent(スペース内に配置) / Local(プリセット等ローカル上にあるデータ)
posision:float型でx,y,zの順
rotation:float型でx,y,z,wの順
scale:float型でx,y,zの順
末尾:0x00

メタデータ

メタデータはjson形式でオブジェクトの作成/更新時の情報が格納されています。例えば以下のような情報が格納されています。

{
    "AccountId": "1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "LastModified": "2021-09-14T23:29:41.5810494+00:00",
    "Type": "object",
    "Version": {
        "Major": 0,
        "Minor": 1,
        "Build": 0,
        "Revision": 0
    }
}

2. 付箋

image.png

空間上に出力できる付箋です。付箋に関する情報は以下の1ファイルだけで構成されます。

  • メタデータ([GUID].sticky.fenixmeta)
メタデータ

付箋の場合は空間上の座標、付箋の色、文字列などが格納されています。

{
    "AccountId": "1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "LastModified": "2021-09-18T06:24:51.2642402+00:00",
    "Type": "sticky",
    "Version": {
        "Major": 0,
        "Minor": 1,
        "Build": 0,
        "Revision": 0
    },
    "Data": {
        "position": {
            "x": -0.06352273,
            "y": 1.5632565,
            "z": -0.312892616
        },
        "rotation": {
            "x": 0.179926217,
            "y": -0.646351,
            "z": 0.159610927,
            "w": 0.724141836
        },
        "localScale": {
            "x": 1,
            "y": 1,
            "z": 1
        },
        "color": {
            "a": 1,
            "r": 0.585000038,
            "g": 0,
            "b": 1
        },
        "text": "テスト",
        "locked": false
    }
}

3. マーク

空間上に出力できるマークです。立方体や、いいね、顔などのマークを配置することができます。マークに関しても付箋と同様以下の1ファイルで管理されます。

  • メタデータ([GUID].blk.fenixmeta)
メタデータ

付箋の場合と同様空間上の座標、マークの色が定義されています。

{
    "AccountId": "1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "LastModified": "2021-09-18T06:27:21.7323473+00:00",
    "Type": "block",
    "Version": {
        "Major": 0,
        "Minor": 1,
        "Build": 0,
        "Revision": 0
    },
    "Data": {
        "blockType": "faceShock",
        "position": {
            "x": 0.5080601,
            "y": 1.695062,
            "z": -0.742124
        },
        "rotation": {
            "x": -0.000421320234,
            "y": -0.999877036,
            "z": -0.0006657745,
            "w": -0.0156615321
        },
        "localScale": {
            "x": 25.7182,
            "y": 25.7182,
            "z": 25.7182
        },
        "color": {
            "a": 1,
            "r": 0,
            "g": 1,
            "b": 0.5
        },
        "locked": false
    }
}

マークの種類はblockTypeに定義されていて以下の種類が今は提供されています。

blockType マーク 形状 blockType マーク 形状
cube 立方体 circleArrow 円の中に矢印
rectangle 直方体 circleInfo 円の中にi
cylinder 円柱 circleX 円の中に×
sphere 球体 flag
disc 平たい円 pin 虫ピン
pyramid ピラミッド bubble 吹き出し
arrow 矢印 heart ハート
star quote 引用
starShine 輝いた星 cloud
exclamation はてな lightning 稲妻
question ビックリマーク faceSmile 顔:笑顔
thumbsUp いいね faceNeutral 顔:素
thumbsDown 悪い評価するあれ faceLaugh 顔:笑
circlePlus 円の中に+ faceFrown 顔:しかめっ面
circleExclamation 円の中にビックリマーク faceAngry 顔:怒り

4. インク型(空間にドラッグで描く線)

image.png

空間に自由に線を描くことができるオブジェクトです。一回のタップ&ホールド操作が1つのオブジェクト単位なって管理されます。インクに関しても付箋と同様以下の1ファイルで管理されます。

  • メタデータ([GUID].ink.fenixmeta)

*[GUID]:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx形式の一意な文字列

メタデータ

データの中身はこのようになっていて他のメタデータとほぼ一緒です。ただ、インクの情報についてはBase64でエンコードされているcontentプロパティに入っています。この情報を展開するとバイナリデータが入っているので、空間に描いたインクの座標情報などが入っているようです。(3Dオブジェクトの様に単純な構造はしていなかったです)

{
    "AccountId": "1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "LastModified": "2021-09-18T06:30:04.7096225+00:00",
    "Type": "ink",
    "Version": {
        "Major": 0,
        "Minor": 1,
        "Build": 0,
        "Revision": 0
    },
    "Data": {
        "content": "KxoFAAAAAQAAAM3MTD/NzEw/zcxMPwAAgD/NzEw/zcxMP83MTD8AAIA/CtejPAAAAAALCQ0/lNPpP/yOVT4AAACAAAAAAAAAAAAXovZDKAr3QwAAAAALQXJ0X1JvdW5kZWQAAAAAAAEDAAAA2NK9PRDczT2GmH2/2NK9PRDczT2GmH2/6RcGP/uW7D8Ob08+TFoGP6Zu7D8a81A+r5wGP1JG7D8md1I+Et8GP/0d7D8y+1M+2NK9PRDczT2GmH2/0LTzPEJQNz7Zv3u/6RcGP/uW7D8Ob08+I08IP2I+6z+jYlw+QHIPPxFM5T95y2o+z6sSP9Rj5j/4yWg+0LTzPEJQNz7Zv3u/0LTzPEJQNz7Zv3u/z6sSP9Rj5j/4yWg+xfESP4l75j90nmg+EPcSP7uq5j8Q5Wc+sRwTPy7O5j+ccmc+"
    }
}

まとめ

Microsoft Meshのデータ構造を少し調べてみました。現状はプレビュー版でもあり正式版の頃にはもっと使い勝手がよくなっている可能性もあります。調べている間も時々データが構造が変わっている(持っている場所が変わっていた。ただわかりやすい場所には移動してる)のでこういうデータが格納されているのか程度で知っておくと何かといいかもしれないです。例えば、付箋程度であればMesh内外で情報のやり取りは可能な気がします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?