mcpField
S
scenario-orbit-views

scenario-orbit-views

github.com/scenario-labsクリエイティブ・メディア1.2k400 回インストール1 日前に更新
リポジトリ

scenario-orbit-views について

scenario-orbit-viewsは、1枚の参照画像から一貫した複数アングル画像を作るスキルです。キャラクターや物体のビューセット作成向けで、ローカルのBlenderメッシュとカメラレイアウトで形状、縮尺、遠近感を固定してから画像モデルで描き直します。

主な機能

  1. 011枚の画像から未テクスチャの3Dメッシュを生成
  2. 02Blenderで複数角度のクレイレイアウトをレンダリング
  3. 03元画像を参照して各ビューを描き直し
  4. 04任意の背景除去とスタジオシャドウ追加
  5. 05MCPツール経由の生成処理

活用シーン

  1. 01キャラクターの複数角度リファレンス作成
  2. 02俯瞰や周回ビューの生成
  3. 03透過背景のビューセット作成

MCP 対応

画像からの3D生成や画像生成にはScenario MCPツールを使います。Blenderでのレンダリングとレイアウト用スクリプトはローカルで実行します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-orbit-views

インストール後、Claude Code で/scenario-orbit-viewsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
scripts/
compose_layout.py
match_view.py
render_grounded.py
studio_shadow.py

詳細

シナリオ:オービットビュー

概要

画像モデルに「後ろから見せて」と頼むと、形状は推測に任され、角度ごとにサイズや ポーズ、地面との接地状態がずれてしまいます。安定した方法は、途中に3Dの工程を挟む ことです。対象をテクスチャのないメッシュとして再構築し、カメラごとにグレーのクレイ レイアウトをレンダリングしてから、参照画像に対応した画像モデルで、元の画像をもとに 各レイアウトを再描画します。メッシュでシルエット、スケール、遠近感を固定し、画像で アイデンティティ、色、仕上げを補います。接続方法と生成の基本ループについては、 scenario スキルを参照してください。画像から3Dモデルを生成する際のモデル選択については scenario-3d を参照してください。背景パノラマについては scenario-skyboxes を参照して ください。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーに インストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。 無人で処理を続ける場合は、ツールのスキーマをもとに進め、不足しているスキルを明記して ください。

Blenderの手順は、Blender 4.x以降を使ってローカルのシェルで実行します。生成に関わる 処理はすべてMCPツールを経由します。有料の手順を始める前に、Blenderがあるか確認して ください(macOSでは、通常PATH上ではなく /Applications/Blender.app/Contents/MacOS/Blender にあります)。Blenderがない場合は ユーザーにインストールを依頼してください。無人で処理を続ける場合は、そこで停止して その旨を報告してください。選択したカメラからメッシュをレンダリングできるMCPツールは ありません。

クイックリファレンス

手順方法
元画像被写体は1体。全身が余白込みで写り、背景は単色。カメラ位置が既知(目線より少し上で、約30度回転)
メッシュ画像から3Dモデルを生成するモデルを recommend で推奨し、形状のみで生成します(テクスチャは不要)。GLBは asset_download でダウンロードします
ワールド同じアートスタイルのスカイボックスパノラマを使い、視点の周囲に平らで開けた床を配置します
カメラゼロrender_grounded.py の --search を実行し、次に match_view.py を実行して、目視で確認します
レイアウトrender_grounded.py を実行し、次に compose_layout.py を実行します。カメラごとに背景、クレイ、実際の落ち影を用意します
アップロードfile_size を指定して upload_asset を呼び出し、各パーツをPUTし、upload_asset_complete を実行します。レイアウトごとに1回行います
再描画参照画像に対応した画像モデルを使い、referenceImages: [layout, source] を指定します。プロンプトは以下のとおりです
背景なし同じ再描画済みフレームに背景除去モデルを適用し、続けて studio_shadow.py を実行します
待機jobs_wait では1回につき最大32個のIDを指定できます。pending_job_ids を使って再度呼び出してください

4つのスクリプトはすべて、MCPサーバーではなくエージェントがローカルのシェルで実行します。 render_grounded.py はBlender内で実行します(blender -b --factory-startup --python render_grounded.py -- ...)。 ほかの3つには、Pillowとnumpyを含むPythonが必要です。引数なしで実行すると、それぞれの 使い方が表示されます。

実例:1体のキャラクターを8方向と真上から見る

  1. ユーザーの画像を upload_asset でアップロードします(または、無地の背景でカメラを上に配置した画像を生成します)。 続けて upload_asset_complete を呼び出します。

  2. ユーザーの言葉(「テクスチャなしのメッシュを1枚の画像から」)を使って、画像から3Dモデルを作成するモデルを recommend で推奨してもらいます。ユーザーが予算を設定している場合は max_cost_cu も指定します。次に model_schema_get を呼び出し、dry_run=true を指定して model_run を実行し、料金を確認します(画像から3Dモデルを作成するジョブは高額です。ドライランでは必須の画像がないペイロードは拒否されるため、元画像がない状態で一連の処理全体の見積もりを取得すると、アップロード済みの画像があればどの画像でも料金が計算されます)。続いて wait=false を指定し、jobs_wait を呼び出します。asset_download で GLB をダウンロードし、curl -L で保存します。

  3. search でスカイボックスモデルを検索します(target="models"、query="skybox"、public=true を指定します。scenario-skyboxes の説明に従ってください。recommend にはスカイボックス機能がなく、端がつながらない汎用画像モデルが返されることがあります)。画像のスタイルに合わせたパノラマを1枚生成するように指示し、「目の高さで、何もない開けた床の中央に立った視点。周囲全体に床がはっきり見え、人はいない」とプロンプトで指定します。ダウンロードします。

  4. blender ... render_grounded.py -- --glb hero.glb --out search --search を実行し、続けて python3 match_view.py hero.png search/cameras.json を実行します。最上段の行の方位角と仰角が、以下の <az> と <el> です。正面と背面は同程度のスコアになることがあるため、一致する search/search_az..._el...png を画像の横に開いて確認します。

  5. blender ... render_grounded.py -- --glb hero.glb --pano world.png --out views --az0 <az> --elev <el> --only 00,02,04,06,08,10,12,14,top を実行します(目の高さのリングには16台のカメラがあり、22.5度間隔で配置されています。--height はパノラマの視点の高さ、--yaw はワールドの回転、--zoom はフレーミングを設定します)。キーは対象物の正面からではなく、カメラ0から数えます。そのため、元画像の向きが回転している場合、キー08は同じ回転状態で背面を示します。対象物に正対したビューにするには、別の --out を指定し、カメラに正対している検索フレームの値を --az0 に設定してレンダリングします。次に python3 compose_layout.py views を実行します。すべてのレイアウトを確認します。クレイモデルが床に立ち、その下に影があることを確認してください。

  6. 各 layout_<key>.jpg をアップロードします。参照画像に基づく再描画用の画像モデルを recommend で推奨してもらい、その model_schema_get の結果に referenceImages が記載されていることを確認します(1024×1024、高品質ティア、不透明な背景がうまく機能しました)。dry_run=true で1ビュー分の料金を確認します(見積もりは1ビュー分です。実行前にビュー数を掛けてください)。次に、各ビューにつき1回ずつ model_run を実行し、wait=false と referenceImages: ["<layout asset>", "<source asset>"] を指定して、以下のプロンプトを使用します。

    画像1は最終フレームそのものです。完成した背景の上に、実際の落ち影を伴って立つ、無地のグレーのクレイ製3Dモデルを、指定した正確なカメラアングルから見たものです。画像2は {kind} のオリジナルデザインの参考画像です。画像2に合わせて、グレーのクレイモデルを {what} として再描画し、アイデンティティ、デザイン、素材、色を一致させてください。{details}。{finish}。クレイモデルに忠実に従ってください。シルエット、ポーズ、プロポーション、フレーム内の位置とサイズ、カメラアングルを変えないでください。{ground}。画像1の落ち影を維持してください。画像1の背景を維持してください。場所、構図、遠近感、地平線を変えず、{background style} のまま、鮮明で精細にしてください。シーンに合わせて {kind} に光を当ててください。{light}。グレーのクレイ部分を残さず、キャラクターや物体を追加せず、テキストも入れないでください。

    {ground} には、接地状態を指定します。たとえば、「ブーツがクレイの足と地面が接する位置に、濡れた石畳の上で立っています」です。画像に写っていないパーツ(背中の盾やバッグの数など)を指定する行を追加します。

  7. jobs_waitを一度に32件以下で実行します。各結果にasset_downloadを実行し、すべてのビューのコンタクトシートを作成します。失敗したビューだけを再生成してください。同じプロンプトで再実行すれば、通常は一度限りの失敗を解消できます。

  8. 透過セットの場合:背景除去モデルをrecommendし、model_schema_getからその画像フィールドを読み取り、再ペイント済みの各アセットIDに対して実行します(新たにスタジオで再ペイントするのではありません)。ダウンロードした後、python3 studio_shadow.py views/clay_<key>.png cut_<key>.png studio_<key>.pngを実行します。粘土モデルの本体のうち切り抜きが覆う割合と、その外側にある割合が表示されます。他のビューから大きく外れているビューや、角が透過されていないビューは、被写体の一部が失われているか背景が残っているため、背景除去を再実行します。

よくある間違い

  • 各角度を単色の背景で個別に再ペイントする:テストでは、ビュー間でスケールが7~53%ずれました。基準となるレイアウトを再ペイントし、同じフレームを切り抜いてください。
  • 被写体を単色の背景写真に合成する:被写体が浮いて見え、地平線がカメラに合わせて動きません。ドーム状の床が、上下から見たときの正しい遠近感を生み出します。
  • 3つ目の参照画像(同じ角度の以前のビューなど)を追加する:その画像の誤りまでコピーされます(ある実行では、背面ビューすべてに余分なバッグが追加されました)。追加の参照画像が問題なく検証済みでない限り、参照画像は2つにしてください。
  • 完成したビューに「調和」処理を追加する:フレームが再クロップされ、粘土モデルとの位置合わせが崩れます。
  • カメラ0を省略する:ビュー00が、ユーザーが最初に提示した画像と一致しなくなります。
  • モデルIDや価格をハードコードする:recommendで確認し、dry_run=trueで価格を確認してください。
  • jobs_waitに32件を超えるIDを渡す、またはjob_getでポーリングする。
  • 確認せずにビューを信頼する:コンタクトシートで、余分な手足、左右の取り違え、残った灰色の粘土がないか確認してください。

コメント