Skip to content

Latest commit

 

History

History
121 lines (95 loc) · 8.5 KB

File metadata and controls

121 lines (95 loc) · 8.5 KB

実装状況

最終更新: 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+右=dollyW/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.50x scene median disparity
  • Backfill Front Clamp: 1.00x assigned edge disparity
  • Backfill Far Clamp: 4.0x assigned edge depth
  • Backfill Hole Preclaim: 3px
  • Backfill Far Priority: 12px
  • SkyMaskColorFill inner ring: 4px

途中状態: Backfill 伸長の調整中

2026-07-08 実機確認結果: 平面フィット延長 + ブリッジ統合 + カーテンクランプで大幅改善 (奥のまま伸びる板と壁/机境界の黒穴が減少)。ただし塞ぎきれない穴が残る (例: 空との境界や、複数のエッジ切断が重なる帯状の黒穴)。

次の方向性(ユーザー了承済みの検討順):

  1. もう一層 = 結果に対する後段レイヤー。 生成済みの主メッシュ + backfill の「結果」に 対して残穴を検出し、追加の第3レイヤーで塞ぐ。具体案は仮想カメラサンプリング (想定オービット範囲から数視点をオフスクリーンレンダ → 何もヒットしない画素 = 実際に 見える穴 → 参照ビューへ逆投影して残穴だけ追加生成)。閉ループなので「どの穴が 本当に見えるか」を直接最適化できる。前回議論のフェーズ2に相当
  2. fill 内部に残るラベル間シームの襟(奥側ラベルを数px手前ラベルの裏へ重ねる帯メッシュ)
  3. ラベル別多層メッシュ(排他割り当ての廃止。根本解だがエクスポート経路まで変更が及ぶ)

調整候補の内部定数(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 PreclaimholeMask 内だけに効く。見えている黒穴が holeMask ではなく、メッシュ面カットや backfill 視差カット後の描画上の穴なら効果が分かりにくい
  • 通常 BFS 後の 2c close 処理は、残った holeMask 画素へ「最も手前 = 最大 disparity」のリム値を伝播する。ここは奥優先ではないため、残り穴の見え方に影響している可能性がある
  • Backfill Far Priority は hole 以外の synth にも効くため、値を上げると手前伸びは減り得るが、広い領域が奥へ寄りすぎる可能性がある
  • Hole PreclaimFar Priority はどちらも 0 で無効化できる

次に見るべき点:

  • コンソールの [Backfill] ログで holePreclaimFilled / holePreclaimOverrides / farPriorityOverrides が増えているか確認する
  • もし holePreclaimFilled が少ない場合、問題箇所は holeMask ではなく描画上の穴の可能性が高い
  • その場合は 2c close の優先規則、または 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/ に退避した。