1 秒未満で写真からスプラットへ — Apple SHARP を WebXR で
10:00 JSTこのシリーズで扱ってきた写真→スプラットのパイプラインの中で、最速のものは最短のものでもあります。Apple Machine Learning Research のモデル SHARP(“Sharp Monocular View Synthesis in Less Than a Second”)は、写真 1 枚から 3D ガウシアンスプラットを、標準的な GPU 上で 1 秒未満のうちに予測します — 撮影ウォークも COLMAP も多視点再構成も不要です。出力は素の 3DGS .ply で、このシリーズですでに整理してきたスプラット→ヘッドセットの配信経路にそのまま載ります。これをエンドツーエンドのループに変えるのが 2 つのコンパクトなスターターリポジトリです。摩擦のない uv クイックスタートを提供する ml-sharp フォークと、スプラットを WebXR セッションに載せる Spark + three.js テンプレートの gsplats-to-webxr です。
▸ apple/ml-sharp ・ IoTone/ml-sharp(uv クイックスタート) ・ IoTone/gsplats-to-webxr
SHARP とは何か — そしてどこに位置づくか
SHARP(プロジェクトページ、論文)はフィードフォワード型の単眼ビュー合成モデルです。画像 1 枚を入力すると、1 回の高速な推論パスでガウシアンスプラットのシーンが出力されます。これは、Apple のもう一つの単一画像→スプラット研究プロジェクトである LiTo の速度特化版の兄弟にあたります — LiTo は視点依存ライティングと引き換えにデータセンター GPU で数秒(ノート PC では数分)かかる拡散モデルですが、SHARP はその精緻さをサブ秒の応答時間と引き換えにしています。どちらもスプラットワークフロー地図の生成側に位置し、実在のシーンと撮影パスを必要とする撮影ベースの経路(スマホの Scaniverse、360° カメラのワークフロー)の対極にあります。
リポジトリには確かな勢いがあります — GitHub スター 8.5k 超、UploadVR の記事、そしてすでに形成されつつあるサードパーティのラッパー群。研究モデルとしては異例なほどプラットフォーム対応が広く、推論は CPU・CUDA・Apple Silicon(MPS)で動作します — NVIDIA 搭載の Linux と Windows、または M1 以降の macOS。MacBook は十分に SHARP マシンとして使えます。CUDA が必須なのは、オプションのフライスルー動画レンダリング(--render)だけです。
セットアップ:uv で 4 コマンド
ml-sharp の IoTone フォークが存在する理由はただ一つ、インストールを簡単にすることです。アップストリームとの差分は uv ベースのクイックスタートと小さな環境修正 — モデルの変更ではなく開発者体験の改善です。セットアップの全体は次のとおりです。
git clone https://github.com/IoTone/ml-sharp
cd ml-sharp
uv venv
uv python install 3.13
uv pip sync requirements.txt
. ./.venv/bin/activate
あとは写真のフォルダを指定するだけです。
sharp predict -i /path/to/input/images -o /path/to/output/gaussians
学習済みチェックポイントは初回実行時に自動ダウンロードされます(~/.cache/torch/hub/checkpoints/ へ。-c sharp_2572gikvuh.pt で明示的に渡すこともできます)。入力フォルダ内の各画像は独立に処理されます — これは単一写真からの予測であり、画像セットの多視点再構成ではありません — そして各画像から、標準的な 3DGS レンダラーでそのまま使えるガウシアンスプラットの .ply が生成されます。
配信:Spark + three.js の WebXR スターター
gsplats-to-webxr は「スプラットを XR に持ち込むためのスタータープロジェクト」です。その spark-threejs-webxr テンプレートは、このシリーズでも使ってきた three.js のガウシアンスプラットレンダラー Spark でスプラットを読み込み、その周りに WebXR セッションを立ち上げます。SHARP が生成した PLY を models/ に置き、サーブして、その URL を Quest 3 のブラウザまたは Vision Pro の Safari(機能フラグで WebXR を有効化)で開きます。
つまずきやすい運用上のポイントが一つ:WebXR には HTTPS が必須です。LAN 内でも例外ではありません。スターターは 2 つの方法を記載しています。
-
手早く済ませる — 自己署名証明書と
http-serverの組み合わせ:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout localhost.key -out localhost.crt -subj "/CN=localhost" npm install -g http-server http-server -S -C localhost.crt -K localhost.key -a 0.0.0.0 -p 8080 -
推奨 — HTTPS を設定した Vite の vanilla プロジェクト(
npm init vite@latest spark-ply -- --template vanilla)。シーンを反復しながらホットリロードが使えます。
スプラットをローカルではなく CDN から取得する場合、レスポンスに Access-Control-Allow-Origin が必要です — WebXR アセットの標準的な作法です。
組み合わせたループはハッカソンのデモ反復に十分な短さです。スマホで何かを撮影し、ノート PC で sharp predict を実行し、PLY をスターターに置いて、ヘッドセットのブラウザをリロードする。写真からヘッドセット内のスプラットまで 1 分弱、その大半はファイルの受け渡しです。
注意点
- 単眼は単眼です。 SHARP が合成するのは、元のカメラ位置の周辺でもっともらしく見える新規視点です。実空間のウォークアラウンド撮影ではなく、視点が写真から離れるほど忠実度は下がります。どの角度から見ても成立する部屋スケールのシーンには、撮影ベースの経路を使ってください。
- Apple の研究ライセンスであり、MIT ではありません。 LiTo と同様、SHARP は Apple 独自のサンプルコードライセンスで提供され、モデルの重みには別途の条件があります(
LICENSE、LICENSE_MODEL)。ハッカソンのデモを超えて出力を使う前に確認してください。 - 現時点では PLY のみ。 ネイティブの
.splat/.spz書き出しはなく、機能リクエストがオープン中です。ヘッドセット配信では、素の PLY が重い場合は通常のツール(SuperSplat など)で圧縮・変換してください。 - スターターリポジトリは若いです。 gsplats-to-webxr テンプレートはコミット数件でライセンスファイルが未整備、フォークの価値はクイックスタートのドキュメントにあります — どちらも固定する依存ではなく、読んで応用する足場として扱ってください。
- スプラット配信の前提は常に同じ: ヘッドセットのフレームレートに合わせてガウシアン数を抑え、取り込み時の向き補正に備えます。
関連リンク
- apple/ml-sharp ・ プロジェクトページ ・ 論文(arXiv)
- IoTone/ml-sharp — uv クイックスタートのフォーク
- IoTone/gsplats-to-webxr — Spark + three.js の WebXR スターター ・ Spark
- 写真 1 枚から 3D スプラットへ — Apple の LiTo を WebXR で — 視点依存ライティング側の兄弟
- スマホで撮るガウシアンスプラット — Scaniverse から WebXR と Godot へ — 撮影ベースの対になる記事
- 360° カメラからの 3D ガウシアンスプラッティング — 撮影からシーンまでの全ワークフロー
- ハッカソン詳細 — 参加資格、チーム編成、AI ポリシー
- Luma で参加登録
ご質問はお問い合わせページからどうぞ。