CAD / BIM / 合成アセット
建築や合成のアセットを AR Clip VPS のマップに変換し、建設現場・屋内ナビゲーション・デジタル ツインのシナリオに使います。
ジオメトリの準備
- CAD/BIM のモデルを Blender や Unity などのツールに読み込みます。
- インスタンス化されたオブジェクトをまとめ、隠れているものや不要なジオメトリを削除します。
- 重要な特徴を保ったままポリゴン数を減らします(目安は 500 万三角形以下)。
- モデルをプレビューするつもりなら、UV を生成し、軽いテクスチャをベイクします。
アンカーの計画
[
{ "name": "lobby", "position": [0.0, 0.0, 0.0] },
{ "name": "elevator_north", "position": [12.4, 0.0, 28.9] }
]
- 座標はモデルの原点からの相対位置で、単位はメートルです。
- SDK のコードがそのまま使えるよう、安定した識別子(
lobby、loading_dockなど)を付けてください。
Python の REST API でアップロードする
# upload_cad.py
from pathlib import Path
import json
import os
import requests
API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"]
MODEL = Path("exports/mall.glb")
ANCHORS = Path("exports/anchors.json")
headers = {"Authorization": f"Bearer {TOKEN}"}
payload = {
"name": "Mall Digital Twin",
"dataType": "mesh",
"sourceFormat": "glb",
"anchors": json.loads(ANCHORS.read_text()),
"publish": False
}
init = requests.post(f"{API_BASE}/maps/import", json=payload, headers=headers)
init.raise_for_status()
info = init.json()
map_id, upload_url = info["mapId"], info["uploadUrl"]
with MODEL.open("rb") as src:
put = requests.put(upload_url, data=src, headers={"Content-Type": "model/gltf-binary"})
put.raise_for_status()
finalize = requests.post(f"{API_BASE}/maps/{map_id}/finalize", json={}, headers=headers)
finalize.raise_for_status()
print(f"CAD map {map_id} queued → {finalize.json()['status']}")
- アンカーは最初のペイロードに含められます。あとから
POST /maps/{id}/anchorsを呼んでも かまいません。 - モデルが地理参照されている場合は
coordinateを追加してください ({"lat": ..., "lon": ..., "alt": ...})。
検証
- arclip.design でマップをプレビューし、必要ならアンカーのオフセットを調整します。
- Unity SDK で位置特定を試し、同じアンカー ID を使って仮想オブジェクトを合わせます。
- CAD モデルが変わったら、インポートをやり直してください。新しいマップを作るのではなく
POST /maps/{id}/updateを呼べば、mapIdは変わりません。