最終更新: 2026-07-09
単一画像をブラウザ内で MoGe-2 に入力し、metric depth、world position、メッシュ、backfill を生成する。画像と推論結果は外部へ送信しない。モデルと JavaScript ライブラリの初回取得時のみネットワークを使用する。
処理順と各段階が変更する対象は PIPELINE.md を正本とする。ユーザー向けの使い方と UI 仕様は README.md を正本とする。
- MoGe-2 ViT-S / ViT-B / ViT-L の WebGPU 推論と WASM フォールバック
- JPG / PNG / WebP / AVIF / GIF / BMP などブラウザがデコードできる画像入力
num_tokens、モデル選択、Scale、Sky / Masked Area、High-Res Depth、EdgeSnap、Backfill の UI- MoGe point map から focal / shift / intrinsics / metric depth / camera-space points を復元
- 入力画像比率・長辺最大 2048px の depth 高解像度化
- WebGPU RGB-guided Joint Bilateral Filter と、WebGPU 不可時の初期拡大 fallback
- Sky Backdrop による mask 領域の最奥平面化
- SkyMaskColorFill による空 mask 内周4pxの色補正
- EdgeSnap による depth ランプの near/far 台地への吸着
- ColorPatch によるエッジ混色帯の表示/backfill 用テクスチャ補正
- Y-up world position 生成、メッシュ / 点群 / ワイヤーフレーム / Unlit / No Color 表示
- Adjust Horizontal Grid は aligned export 用の地平方向だけを設定し、scene origin / grid 表示位置 / orbit pivot は初期ターゲットに固定する
- Set Orbit Center /
Fでクリックした表示面を一時的な回転中心にできる。Reset View で推定ソースカメラ位置・上方向・初期ターゲットへ戻す - カメラ操作は Maya 風の
Alt+左=orbit/Alt+中=pan/Alt+右=dolly。W/A/S/Dでビュー基準の平行移動、Shift/Ctrlで上下平行移動。dolly は低速化 - カメラ情報が変わらない後処理パラメータ変更では、現在のビューを維持したままメッシュだけ更新
- depth 段差セルの near/far 2枚プレート分割と各1セル延長
- 奥側エッジ由来の Backfill 第2レイヤー
- Depth EXR、Initial Depth EXR、World Position EXR、Backfill EXR/PNG、OBJ+Texture ZIP、Scene GLB、2048 PNG 出力
- Scene GLB の色テクスチャは emissive map に接続し、base color は黒、metallic は 1.0
- 連続処理時に ONNX Runtime session へ並列
run()が入らないための排他ガード
- Quality (
num_tokens):1800 - High-Res Depth: ON
- High-Res Depth long edge:
2048px - Initial Depth Resize:
Bilinear(internal, UI hidden) - Edge Threshold:
0.050 - Snap Width:
8 - Small Component Faces:
64 - Sky / Masked Area: Sky Backdrop
- Fill Margin:
25%of original image long edge - Backfill Parallax Cut:
0.50xscene median disparity - Backfill Front Clamp:
1.00xassigned edge disparity - Backfill Far Clamp:
4.0xassigned edge depth - Backfill Hole Preclaim:
3px - Backfill Far Priority:
12px - SkyMaskColorFill inner ring:
4px
2026-07-08 実機確認結果: 平面フィット延長 + ブリッジ統合 + カーテンクランプで大幅改善 (奥のまま伸びる板と壁/机境界の黒穴が減少)。ただし塞ぎきれない穴が残る (例: 空との境界や、複数のエッジ切断が重なる帯状の黒穴)。
次の方向性(ユーザー了承済みの検討順):
- もう一層 = 結果に対する後段レイヤー。 生成済みの主メッシュ + backfill の「結果」に 対して残穴を検出し、追加の第3レイヤーで塞ぐ。具体案は仮想カメラサンプリング (想定オービット範囲から数視点をオフスクリーンレンダ → 何もヒットしない画素 = 実際に 見える穴 → 参照ビューへ逆投影して残穴だけ追加生成)。閉ループなので「どの穴が 本当に見えるか」を直接最適化できる。前回議論のフェーズ2に相当
- fill 内部に残るラベル間シームの襟(奥側ラベルを数px手前ラベルの裏へ重ねる帯メッシュ)
- ラベル別多層メッシュ(排他割り当ての廃止。根本解だがエクスポート経路まで変更が及ぶ)
調整候補の内部定数(backfill.js 1f/2d): MERGE_TOL 0.15 / JOINT_RMS_TOL 0.08 /
FIT_SUPPORT_PX 24 / FIT_BAND_EXTRA 0.5。
2026-07-08: backfill 生成を等深度延長からラベル毎の disparity 平面フィット延長に変更(1f)。
前景を挟んで分かれた共面ラベルのブリッジ統合(2d)と、前景の下の生成深度を局所前景の
すぐ裏に抑えるカーテンクランプ(節3)を追加。狙いは「奥の深度のまま手前エッジまで伸びる板」
の解消と、fill 内部のラベル境界シームが視差カットで開いてできる黒穴の削減。詳細は
PIPELINE.md 節10。実機確認待ち。コンソールの [Backfill] ログに
labels / mergedGroups / mergedLabels を追加済み(統合が起きているかの確認用)。
調整候補の内部定数: MERGE_TOL 0.15 / JOINT_RMS_TOL 0.08 / FIT_SUPPORT_PX 24。
2026-07-05 時点で、覗き込み時に backfill が手前側 depth から細く伸びる問題を調整中。
現在入っているテスト処理:
Backfill Parallax Cut: backfill メッシュ面を disparity 差で切る倍率。Otherに移動済みBackfill Front Clamp/Backfill Far Clamp: 生成 depth の手前/奥クランプ。Otherに移動済みBackfill Far Priority: 通常 BFS 後、近傍内のより奥ラベルが手前寄りラベルを上書きできる局所補正Backfill Hole Preclaim: 通常 BFS 前に、全 seed からholeMask内だけへ数px先取り拡張し、競合時はより奥のラベルを優先する処理viewer.jsではSmall Component Facesの前に境界 face を1層削るテスト処理erodeBoundaryFaces(geometry, 1)を主メッシュ/backfill メッシュの両方へ入れている
現時点の重要な注意:
Hole PreclaimはholeMask内だけに効く。見えている黒穴がholeMaskではなく、メッシュ面カットや backfill 視差カット後の描画上の穴なら効果が分かりにくい- 通常 BFS 後の
2cclose 処理は、残ったholeMask画素へ「最も手前 = 最大 disparity」のリム値を伝播する。ここは奥優先ではないため、残り穴の見え方に影響している可能性がある Backfill Far Priorityは hole 以外のsynthにも効くため、値を上げると手前伸びは減り得るが、広い領域が奥へ寄りすぎる可能性があるHole PreclaimとFar Priorityはどちらも0で無効化できる
次に見るべき点:
- コンソールの
[Backfill]ログでholePreclaimFilled/holePreclaimOverrides/farPriorityOverridesが増えているか確認する - もし
holePreclaimFilledが少ない場合、問題箇所はholeMaskではなく描画上の穴の可能性が高い - その場合は
2cclose の優先規則、または backfill メッシュ面カット後の穴への対策を検討する
- 複数の縦長・横長画像で、初期表示の向き、余白、Reset View を確認する。
- WebP / AVIF / GIF / BMP の入力と、非対応形式のエラーメッセージを確認する。
- ViT-S / ViT-B / ViT-L の focal / shift 復元結果を比較する。
- WebGPU 使用時と fallback 時の High-Res Depth ステータスと出力差分を確認する。
Initial Depth (EXR)とDepth (EXR)を比較し、JBU と後段処理の差を確認する。- Apply Mask の有無で不要面除去とカメラクリップ範囲を確認する。
- 出力 EXR を Houdini などで読み、チャンネルと座標系を確認する。
- 大容量モデルの初回ダウンロード、Cache API、WebGPU → WASM 切り替えを実ブラウザで確認する。
完了済みの計画・検討ログは root から外し、docs/archive/ に退避した。