0
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?

MCPで3D空間アセットを扱うための Spatial Asset Profile v2 を作った

0
Posted at

MCPで3D空間アセットを扱うための Spatial Asset Profile v2 を作った

3Dデータや空間計測データを、LLMエージェントや外部ツールから扱いやすくするための試作仕様として、MCP Spatial Asset Profile Version 2.0 を公開しました。

GitHubはこちらです。

PyPIにも最小Python SDKを公開しています。

pip install mcp-spatial-asset-profile==0.1.0

何を作ったか

Model Context Protocol、いわゆる MCP は、LLMエージェントと外部ツール・リソースを接続するためのプロトコルです。

ただ、MCPで扱いやすい対象は、現状ではテキスト、構造化データ、2D画像、ファイル参照などが中心です。一方で、ロボット、外観検査、3D計測、デジタルツイン、Gaussian Splatting などでは、点群、メッシュ、距離画像、3Dシーン、セグメンテーション結果などを一連のワークフローで扱いたくなります。

そこで、MCP上で3D・空間アセットを記述するための軽量なエンベロープ仕様として、MCP Spatial Asset Profile v2 を作りました。

対象にしているアセット

現時点のPoCでは、次のようなアセット種別を想定しています。

  • point-cloud
  • mesh
  • gaussian-splat
  • depth-image
  • rendered-view
  • segmentation-mask-2d
  • segmentation-mask-3d
  • object-asset

重要なのは、実データそのものをJSONに埋め込むのではなく、URI、座標系、単位、表現形式、視点情報、派生関係などをJSONエンベロープとして記述する点です。

たとえば、同じ論理アセットを、PLY、glTF、PNG、EXR、NPYなど複数の表現形式で参照できるようにします。

なぜ traceability を重視したか

3Dデータ処理では、最終結果だけでなく、どの入力から、どの視点で、どの処理を通って、その結果が作られたかが重要です。

特にやりたかったのは、次のような流れです。

3D scene asset
  → rendered views
  → 2D segmentation masks
  → projected 3D masks
  → merged multi-view masks
  → extracted object assets

このために、SAP v2では以下のようなフィールドを用意しています。

  • derived_from
  • target_asset_id
  • viewpoint_id
  • instance_id
  • confidence
  • workflow
  • correspondence

derived_from は直接の親アセットを表し、workflow.target_asset_id はワークフロー全体で最終的に意味付けしたい元アセットを指します。

これにより、葉ノードである object-asset から元の3Dシーンや中間マスクをたどれるようにしています。

rendered-view を明示的なアセットにした理由

3DシーンをMLLMや2Dセグメンテーションモデルに渡す場合、そのまま3Dデータを扱うより、ローカル側で複数視点からレンダリングして2D画像として渡す方が現実的な場面があります。

そこで、rendered-view を独立したアセット種別として定義しています。

rendered-view は、次のような情報を持ちます。

  • 元の3Dアセット
  • 視点ID
  • カメラ内部パラメータ
  • カメラ外部パラメータ
  • レンダリング画像のURI
  • レンダリング条件

これにより、2D画像上のセグメンテーション結果を3D空間へ戻す経路を明確にできます。

JSON Schema と examples

仕様だけでなく、Draft 2020-12 の JSON Schema とサンプルJSONも用意しました。

リポジトリには次のようなファイルがあります。

spec/
  spatial-asset-profile-v2.md
  segmentation-workflow-v2.md
  schema/
  examples/
sdk/
  python/
  typescript/
docs/
  assets/slides/
  package-publication.md

サンプルJSONは以下を含みます。

  • point cloud asset
  • mesh asset
  • Gaussian Splat asset
  • rendered view
  • 2D segmentation mask
  • 3D segmentation mask
  • object asset

Python SDK

Python側は reference implementation の中心として、次のような最小機能を入れています。

  • schema validation
  • encode / decode
  • sample asset generation
  • traceability validation
  • mock workflow runner
  • CLI skeleton

インストールは以下です。

pip install mcp-spatial-asset-profile==0.1.0

import名は次の通りです。

import spatial_asset_v2

TypeScript SDK

TypeScript側は、ビューア、リゾルバ、MCP統合の入口層として用意しています。

  • asset parser
  • representation selector
  • URI resolver interface
  • viewer adapter interface

今のところ、完全な3Dビューアではなく、将来のWeb viewerやMCP client/server連携のための骨格です。

npmについて

npmパッケージも準備はしていますが、初回publishまわりが少し面倒だったので、現時点では未公開です。

予定しているパッケージ名は以下です。

@furuse-kazufumi/mcp-spatial-asset-profile

まずはPyPIとGitHubを中心に公開しています。

図とスライド素材

説明用の図もリポジトリに含めました。

docs/assets/slides/
  fig_01_architecture.png
  fig_02_pipeline.png
  fig_03_representations.png
  fig_04_seg_result.png

生成スクリプトも以下に置いています。

scripts/slides/make_slide_figures.py

現在の公開状態

GitHub:

Release:

Discussion:

PyPI:

今後やりたいこと

今後は次のような方向を考えています。

  • Open3Dなどを使ったpreview / range-image生成
  • 実際のmulti-view rendering workflow
  • 2D segmentation modelとの接続
  • 2D maskから3D maskへのprojection
  • object-asset extraction
  • MCP server / client実装
  • npm公開
  • 実データによる検証

おわりに

これはまだPoCですが、MCP上で3D・空間アセットを扱うための共通語彙として育てていければと思っています。

ロボット、外観検査、3D計測、点群処理、Gaussian Splatting、デジタルツイン、AR/VRなどに関心のある方から、ユースケースやschema設計へのフィードバックをいただけると嬉しいです。

0
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
0
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?