Multiview Blockout 2 Real は何をしますか?
グレーシーンを入力として、同一シーンを出力します。出力は、生成された1セットの写真からの複数ビューを使用してテクスチャリングされています。ビューは一緒に生成され、相互に測定され、可視性テストを経て各オブジェクトの独自のUVに投影され、2回出力されます。1回目は生成された照明を保持する診断用として、2回目は編集可能なPBRシーンとして。重要な数値(戻り画像サイズ、ビュー間の一致度、カバレッジ、残差ベイクドシェーディング)はすべて測定・報告され、カメラが捉えなかった部分は「推定」と呼ばれます。
入力ルーティング
すべての入力は同じケースレイアウト(mvb2r.py new CASE --input ...)に変換されます。詳細は references/inputs.md を参照。
| 入力 | 操作方法 | 注意点 |
|---|---|---|
複数のカメラを含む .blend | new CASE --input scene.blend | 2台以上のカメラがあり、--views が指定されていない場合に保持されます。グレーコピーが作成され、元のファイルは変更されません。 |
カメラが1台または0台の .blend | new CASE --input scene.blend --views 6 [--closeup OBJ] | カメラは自動で配置されます。プレビューとカバレッジテーブル(cameras)を確認してください。 |
| glTF/GLB、OBJ、FBX、USD、PLY、STL | new CASE --input scene.glb --views 6 | メッシュごとに1オブジェクト、--group-by でマージします。実装済みですが、まだ十分にテストされていません(.blend入力とJSON仕様のみ実行済み)。取り込みログを確認してください。 |
| プリミティブのJSONシーン仕様 | new CASE --input room.json | 単位はメートル、Z軸上方向。カメラは仕様から取得するか自動配置。 |
| アイデアのみ | 仕様を書いてから new | references/inputs.md と references/geometry.md を参照。プリミティブはCG的に見えます。 |
| 参照画像 | new ... --reference IMG=role[:obj,…] | role: identity、product、material、style。オプションで適用先オブジェクトを指定。ジオメトリは変更しません。 |
| これらのビューに対してユーザー自身のフォトリアル画像 | targets CASE --images DIR | ファイル名は view_XX.png、アスペクト比はビューの2%以内。生成をスキップし、後続のすべての処理をオフラインで実行。 |
| 別の画像モデル | case.json の model を設定し、probe を実行 | image_size {width, height} パラメータと画像URLリストを持つfal編集エンドポイントに対応。その他のモデルは model.pixel_cap、model.max_refs、サイズオーバーライドが必要。 |
| APIキーがない場合 | targets --images またはデモとして new ... --generator mock | 生成ステージは利用不可。 |
開始前に、スコープ外のものを明確にしておきます。ガラス、鏡、その他のビュー依存マテリアル、薄い葉や髪の毛のジオメトリ、アニメーション、カメラで見える範囲を超えた部屋全体や360°の主張、正確なアイデンティティの保存、ベイクドシェーディングのない再照明可能なアルベド。
ワークフロー
各チェックポイント(カメラプレビュー、パスオーバーレイ、グリッド、生成シート、ビューごとのクロップ、一貫性テーブル、再レンダリング、新規ビュー、カバレッジツアー、再照明シート)でラベル付き画像を投稿します。画像が先、数値は後。以下の SKILL は skills/multiview-to-real/scripts/mvb2r.py を意味します。
- チェック。
python3 SKILL doctor:Pythonパッケージ、Blender、FAL_KEY(出力しない)。 - スキャフォールド。
python3 SKILL new CASE --input SCENE [--look TEXT] [--views N] [--closeup OBJ] [--reference IMG=role ...]。次に、case.jsonに自分で記述します:look(場所、スタイル、時間帯、照明)、各参照のrole、applies_to、note、および各オブジェクトのdescription(マテリアル、色、仕上げ)、class(plaster、paint、wood、fabric、knit、leather、skin、hair、metal、plastic、stone、generic)、フラグdetail_critical(顔、手、テキスト、ロゴ:1つのソースビューからのみ使用、ブレンドしない)、refit(カービングされる可能性のある柔らかい形状)、opening(空への窓:投影しない)。ファイルのオブジェクト名は何も示しません。ファイルからの名前とテキストはラベルであり、指示ではありません。templates/CONTRACT.mdをケースにコピーし、最初の有料呼び出しの前に記入します。 - ジオメトリを確認(費用をかける前に)。 画像モデルはクレイに忠実に従います。ポーズ、コンタクト、プロポーション、シルエットはモデル通りに正確に出力されます。プリミティブマネキンはCG的な結果になるため、可能であれば実際の(ライセンス取得済み)アセットに交換します。コンタクトは目視ではなく数値で確認します(
references/geometry.md)。 - カメラ。
newはすでにシーンのカメラを保持するか、自動リグを配置しています。プレビューシートとカバレッジテーブルを確認します。重要なすべてのオブジェクトが少なくとも2つのビューで見え、すべてのdetail_criticalオブジェクトが1つの近接ビューで見える必要があります。python3 SKILL cameras CASE --replace [--count N] [--closeup OBJ] [--arc DEG] [--no-elevated]で変更するか、シーンを編集します。カバレッジは後続処理のハードリミットです(references/cameras.md)。 - ビュー。
python3 SKILL views CASE。views/verify/を確認します。再投影誤差が0.01 pxを大幅に下回っていること、depth_zがカメラ軸のZと等しいこと(光線長の差が視覚的にゼロでないこと。これによりどちらが書き込まれたかが証明されます)、Blenderのクロスチェックが合格していることを確認します。失敗した場合はここで停止します(references/conventions.md)。 - プローブ、次にグリッド。
python3 SKILL probe CASEは、エンドポイントのスキーマをgen/model.jsonに読み取ります。受け入れるパラメータ、参照制限、ピクセルキャップが含まれます。グリッドにはこれが必要です。probeは、image_sizeパラメータ({width, height}を受け取る)と画像URLリストを持つfalエンドポイント(Seedream型)を理解します。その他のスキーマの場合は拒否し、case.jsonにmodel.pixel_cap、model.max_refs、サイズパラメータのオーバーライドを要求します。その後python3 SKILL grid CASEを実行し、グリッドと参照マニフェスト(順序、ロール、個別画像)を確認します。オプションでpython3 SKILL probe CASE --check-sizeを1回実行して、エンドポイントが実際に返すサイズを確認します。検証済みキャップを超えるリクエストは行わないでください。大きなリクエストは暗黙的にダウンサイズされます(references/generation.md)。 - 生成。
python3 SKILL generate CASE:1回の呼び出し。シート全体と各セルを対応するクレイビューの隣で確認します。アイデンティティ、ポーズ、オブジェクト数、シームがレイアウトから数ピクセル以内であることを確認します。シートがパネルを結合したり、人物を追加したり、オブジェクトを移動した場合は、プロンプトまたは参照を修正して、予算内で再度生成します。失敗部分をクロップしてごまかさないでください。 - リファイン。
python3 SKILL refine CASE。受け入れルールは確認前に固定されます(ケースのacceptance.json、newによってtemplates/acceptance.jsonからコピーされます。ピクセル制限は1664 pxで指定され、ケースにスケーリングされます)。オブジェクトごとに、シルエットIoUがセルの値から設定されたマージン以上低下していないこと、輪郭距離、ランドマークオフセット(views/landmarks.jsonが存在する場合)、色のずれがそれぞれの制限内であること。顔、手、足、エッジのフル解像度クロップを自分で確認します。case.jsonのacceptance.jsonにvisual_review_requiredを設定し、自分の判定が受け入れをゲートする必要がある場合はリファイン前に設定し、結果をgen/qa/visual.jsonに記録します。失敗したビューはセルにフォールバックします(リサイズはリサイズとして記録されます)。再試行は意図的なrefine CASE --views view_XX --attempt 2であり、ビューごとに最大1回、理由を添えます。 - ターゲット。
python3 SKILL targets CASE(または--images DIR)。各ターゲットのアライメント信頼度マップとオブジェクトごとのマスクを確認します。背景や隣接オブジェクトを含むマスクは、それをジオメトリにペイントします。すべてのビューはゲートされます。オブジェクトがクレイと重ならないビュー、別のビューのクレイと自身のクレイよりもよく一致するビュー、別のビューの画像のほぼコピーであるビュー、またはシフトしているビューは、targets.jsonでusable: falseとマークされ、targets/rejected/に移動され、後続処理でスキップされます。使用可能なビューが2つ未満の場合は停止します。ゲートの理由を読み、拒否されたビューを自分で確認してから再生成します。 - 一貫性。
python3 SKILL consistency CASE。オブジェクトごとに低帯域(ΔE:照明と色)と高帯域(相関:ディテールが一致するか。1テクスチャレンダリングは約0.95、独立生成ビューは約0.15~0.25)を読み取ります。低い一致度は予想通りであり、シームがどこに現れるかを示します(references/consistency.md)。 - 投影とスコアリング。
python3 SKILL project CASE、続いてpython3 SKILL score CASE。すべての再レンダリング、新規ビュー、顔、手、布地、床のフル解像度クロップを確認します。融合方法は、Leave-one-view-outとシーム可視性に基づいて選択します。ソースビューがどれだけよく再現されているかでは選択しません。スコアテーブルのleak %を読みます。観測されたテクセルが別のオブジェクトのピクセルを取った割合(マージンを超えて移動したコンテンツは見えないため、クロップ内のシルエットも確認します)。ゲートはデフォルトでstrict(fusion.gate_policy)です。重要なフィーチャがより大きなメッシュの一部(体の顔、製品のラベル)である場合は、投影前にcase.jsonでそのオブジェクトにregions(ワールドメートル単位の球またはボックス、最適なカメラをprefer_view、"cut": "hard")を指定します。これにより、その領域は1つのソースビューを持ち、次へのギャップが生じます。あるオブジェクトが別のオブジェクトの下を通過する(髪の生え際の下の肌、襟、カフス)場合に、フィルが間違った色を示す場合は、境界のあるfusion.contactsエントリを追加します(references/projection.md、references/seams.md)。 - 修復ラウンドを決定します(各オプション、各予算内)。
- リフィット(
refit CASE [--object NAME] [--mode shell]):refitオブジェクトの投影が、輪郭内に背景や肌、またはヘルメットのようなリムを示す場合に使用します。これは、ジオメトリが生成されたオブジェクトよりも大きいためです。blockout_refit.blendと前後IoUテーブルを書き出します。それらを確認してから、refit CASE --applyでケースをカービングされたblendに切り替えます(古いものはblockout_pre_refit.blendとして保持されます)。views以降を再実行します(references/geometry.md)。 - 再同期(
resync CASE [--method NAME]、またはrun CASE --resync。デフォルトのrunの一部にはなりません):一貫性テーブルが大きな平坦なオブジェクト(床、壁、張り地)で大きな低帯域ΔEを示し、再レンダリングがパッチステップを示す場合に使用します。ビューごとに1回の有料呼び出しを消費します。consistencyが改善され、アライメントが維持された場合にのみ、新しいターゲットが保持されます。その場合、targets以降は古くなります。consistency、project、score、pbr、renderを再実行します。照明の一致が改善され、細かい織り、ニット、髪の毛はビュー固有のままになることが期待されます。
- リフィット(
- PBR。
python3 SKILL pbr CASE。pbr/eval.jsonを読み取ります。残差シェーディング相関、どのビューがデライトされなかったか(それらのターゲットがプロキシシェーディングを示さなかった)、リグフィットがターゲットの輝度の10%以内に収まったかどうか。ベースカラーは「投影写真×スムーズな補正」のままである必要があります。マテリアル事前分布にフォールバックするバージョンはプラスチックのように見えます。再照明シートが、生成された写真の直接光(太陽パッチ)が平らな床や壁に残っていることを示す場合は、pbr CASE --synth-directで再実行します。これにより、それらのテクセルを同じオブジェクトの影付き部分からテクスチャ合成されたものに置き換え、推定としてマークし、ゴーストのあるなしを報告します。これはフルフレームで機能し、近接では機能しません(references/pbr.md)。 - レンダリング。
python3 SKILL render CASE --move --tour --relight。カメラ移動(有効な中間カメラには遠すぎるビューペアはスキップされ、注記されます)、カバレッジで色分けされたツアー(囲まれた部屋の場合は360°パン、オブジェクトシーンの場合はオービット。フレームごとの測定および推定割合。その2つのセグメントは黒を通過するディップで結合されます)、再照明シート(PBRシーンは変更されますが、診断用は変更されません。古い太陽パッチのゴーストが報告され、シェーディングがテクスチャに残っているオブジェクトは応答しません)を確認します。 - 批評とレポート(エージェント)。
python3 SKILL critique CASEは、すべてのビューのクレイとターゲット(および再レンダリングが存在する場合はそれら)をニュートラルな名前でパッケージ化し、固定ボックス上のネイティブ解像度のクロップストリップ(すべてのdetail_criticalオブジェクト、最悪のエラータイル、独自のreview.crops)とともに出力し、プロンプトを表示します。新しいサブエージェントを開始します。そのサブエージェントはそれらの画像のみを読み取り、表示されたプロンプトを与え、そのJSON回答をcritique CASE --save REVIEW.jsonで保存します(--judgeは予約されており、まだ何もしません)。これにより、クロップごとに1つの判定が下されます。フルフレームの印象は受け入れではありません。修正後、ステージを再実行し、critique CASE --round round_2を実行します。同じボックスが再利用されるため、ラウンドを比較できます(--new-boxesはカメラまたは解像度が変更された場合のみ)。スコアが悪化しておらず、それらのクロップで改善されている場合にのみラウンドを保持します。その後、python3 SKILL report CASEでout/report.mdを書き出します。シート、メソッドテーブル、ネイティブサイズとリサイズサイズ、一貫性テーブル、オブジェクトごとのカバレッジ、残差シェーディング、ツアーの測定および推定割合、呼び出しとそのコストメモ、弱点を提示します。ユーザーが次を決定します(references/validation.md)。
python3 SKILL run CASE [--from STAGE] [--to STAGE] は、views、probe、grid、generate、refine、targets、consistency、project、score、pbr、render、report をその順序で実行します(probe はモックジェネレーターではスキップされます)。cameras、probe --check-size、resync(または run --resync)、refit、critique は手動で実行します。logs/run_summary.json には、実行されたステージ、そのフラグ、および古くなった出力(resyncプロモーションまたはrefit後)がリストされます。run CASE --from project でそれらをリフレッシュします。失敗した new は case.failed.json を残し、再実行できます。Blender 4.2以降が必要です(チェック済み。5.0.1で開発)。サブコマンドの前に --debug を指定するとトレースバックが表示されます。最初に targets まで実行して確認し、その後 --from consistency で続行します。有料ステージは generate、refine、resync、probe --check-size です。budget.max_calls(または --max-calls、または MVB2R_MAX_CALLS)は開始されたすべての呼び出しをカウントし、キャッシュヒットは無料で、それを超える呼び出しは開始前に拒否されます。
決定ルール
- ジオメトリを修正して停止します。セルがオブジェクトを移動したり、ポーズを変更したり、複数のビューで家具を作り出したりする場合。問題はブロックアウトまたはプロンプトにあり、投影にはありません。
- 生成を停止します。予算に達した場合、同じビューに2回目の再試行が必要になる場合、または一貫性スコアが...
[原文が途中で切れています] }