1. JPEG URL を送信する
公開 JPEG URL で 1 件の画像タスクを送信します。返されたタスク ID を保持し、処理中に別のタスクを作成しないでください。
export TO3D_KEY='YOUR_API_KEY'
export TO3D_IMAGE_URL='https://example.com/product.jpg'
TASK_JSON=$(curl --fail-with-body --silent --show-error \
https://api.to3d.app/api/trellis/tasks \
-H "x-api-key: $TO3D_KEY" \
-H 'Content-Type: application/json' \
-d "$(jq -cn --arg image "$TO3D_IMAGE_URL" \
'{task_type:"image-to-3d",input:{image:$image}}')")
TASK_ID=$(jq -er '.id' <<<"$TASK_JSON")
printf 'Task: %s\n' "$TASK_ID"ポーリングして GLB をダウンロードする
別のタスクを作成せずにポーリングします。タスクが成功したら、返されたモデル URL を保存して GLB をダウンロードします。
while :; do
STATUS_JSON=$(curl --fail-with-body --silent --show-error \
"https://api.to3d.app/api/trellis/tasks/$TASK_ID" \
-H "x-api-key: $TO3D_KEY")
STATUS=$(jq -er '.status' <<<"$STATUS_JSON")
case "$STATUS" in
succeeded) jq -er '.output.model_file' <<<"$STATUS_JSON" > model-url.txt; break ;;
failed|canceled) jq '{id,status,error}' <<<"$STATUS_JSON" >&2; exit 1 ;;
pending|processing) sleep 5 ;;
*) printf 'Unexpected status: %s\n' "$STATUS" >&2; exit 1 ;;
esac
done
curl --fail --location --silent --show-error \
"$(cat model-url.txt)" --output product.glb
[ "$(head -c 4 product.glb)" = 'glTF' ]2. AR ビューアに入れる前に検査する
まず `product.glb` を GLB 対応ビューアで開きます。製品のシルエット、見えるマテリアル、UV、テクスチャがシーンに使えるか確認します。現実のスケールは自分のパイプラインで設定してください。1 枚の JPEG から寸法は決まりません。
- AR の対象が別形式やプラットフォーム固有のアンカーを必要とする場合は、対象ツールチェーンで変換を実行してテストします。
3. 対象デバイスで検証する
対応するスマートフォン、ブラウザ、ヘッドセットでビューアを実行します。ダウンロードサイズ、ライティング、テクスチャ解像度、カメラ配置、オクルージョン、操作性、フレームレートを確認します。
- #56 では USDZ 出力、物理スケール、AR アンカー、AR デバイスを検証していません。この記事は再現可能な開始ワークフローを説明するもので、JPEG が自動的に調整済み AR 製品アセットになるという主張ではありません。
サンプルの証拠範囲を守る
4 つの公開サンプル GLB は、埋め込み PNG テクスチャ、UV、ジョイント、スキンウェイトを備えた構造例です。製品モデルにリグは不要な場合があります。オブジェクトにスケルトンが必要な場合だけ Skin Tokens を使います。
- 元の JPEG、API タスク ID、ダウンロードした GLB、変換した AR アセットを一緒に保管し、後の見た目やスケールの問題を正しい手順に追跡できるようにします。