scenario-orbit-views について
scenario-orbit-viewsは、1枚の参照画像から一貫した複数アングル画像を作るスキルです。キャラクターや物体のビューセット作成向けで、ローカルのBlenderメッシュとカメラレイアウトで形状、縮尺、遠近感を固定してから画像モデルで描き直します。
主な機能
- 011枚の画像から未テクスチャの3Dメッシュを生成
- 02Blenderで複数角度のクレイレイアウトをレンダリング
- 03元画像を参照して各ビューを描き直し
- 04任意の背景除去とスタジオシャドウ追加
- 05MCPツール経由の生成処理
活用シーン
- 01キャラクターの複数角度リファレンス作成
- 02俯瞰や周回ビューの生成
- 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.mdscripts/compose_layout.pymatch_view.pyrender_grounded.pystudio_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方向と真上から見る
-
ユーザーの画像を
upload_assetでアップロードします(または、無地の背景でカメラを上に配置した画像を生成します)。 続けてupload_asset_completeを呼び出します。 -
ユーザーの言葉(「テクスチャなしのメッシュを1枚の画像から」)を使って、画像から3Dモデルを作成するモデルを
recommendで推奨してもらいます。ユーザーが予算を設定している場合はmax_cost_cuも指定します。次にmodel_schema_getを呼び出し、dry_run=trueを指定してmodel_runを実行し、料金を確認します(画像から3Dモデルを作成するジョブは高額です。ドライランでは必須の画像がないペイロードは拒否されるため、元画像がない状態で一連の処理全体の見積もりを取得すると、アップロード済みの画像があればどの画像でも料金が計算されます)。続いてwait=falseを指定し、jobs_waitを呼び出します。asset_downloadで GLB をダウンロードし、curl -Lで保存します。 -
searchでスカイボックスモデルを検索します(target="models"、query="skybox"、public=trueを指定します。scenario-skyboxesの説明に従ってください。recommendにはスカイボックス機能がなく、端がつながらない汎用画像モデルが返されることがあります)。画像のスタイルに合わせたパノラマを1枚生成するように指示し、「目の高さで、何もない開けた床の中央に立った視点。周囲全体に床がはっきり見え、人はいない」とプロンプトで指定します。ダウンロードします。 -
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を画像の横に開いて確認します。 -
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を実行します。すべてのレイアウトを確認します。クレイモデルが床に立ち、その下に影があることを確認してください。 -
各
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}には、接地状態を指定します。たとえば、「ブーツがクレイの足と地面が接する位置に、濡れた石畳の上で立っています」です。画像に写っていないパーツ(背中の盾やバッグの数など)を指定する行を追加します。 -
jobs_waitを一度に32件以下で実行します。各結果にasset_downloadを実行し、すべてのビューのコンタクトシートを作成します。失敗したビューだけを再生成してください。同じプロンプトで再実行すれば、通常は一度限りの失敗を解消できます。 -
透過セットの場合:背景除去モデルを
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でポーリングする。- 確認せずにビューを信頼する:コンタクトシートで、余分な手足、左右の取り違え、残った灰色の粘土がないか確認してください。