diff --git "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" index 423b0e5..0baa5ea 100644 --- "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" +++ "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" @@ -55,6 +55,7 @@ ├── __init__.py ├── geometry/ │ ├── loader.py # trimesh で STL 読込・三角形配列取得 +│ ├── subdivide.py # 三角形メッシュ均一分割(最大辺長以下に決定論的に分割) │ └── transforms.py # 単位変換 (mm→m)・座標系変換 ├── scene/ │ ├── schema.py # YAML スキーマ定義・バリデーション @@ -65,14 +66,21 @@ ├── render/ │ ├── runner.py # mi.set_variant + mi.render の実行 │ └── output.py # HDR film → PNG / luminance.npy 出力 +├── runtime/ +│ └── llvm_init.py # LLVM JIT 初期化(DRJIT_LIBLLVM_PATH 自動探索・variant 経路ログ) ├── uniformity.py # MiniTias-Evaluation からコピー(Rec.709, CoV, max/min) ├── evaluation/ -│ ├── roi.py # 画像 ROI 抽出(image_pixel / scene_face) +│ ├── roi.py # 画像 ROI 抽出(image_pixel 型) │ ├── zones.py # 3 ゾーン分析(center / middle / periphery) -│ ├── radial.py # 放射状プロファイル生成 +│ ├── radial.py # 放射状プロファイル + 動径 min/max 比 +│ ├── oetf.py # sRGB OETF 順方向適用 + 露出アンカー(シミュ用) +│ ├── normalize.py # linear mean anchor 正規化(OETF と排他) +│ ├── dng_loader.py # DNG(RAW)読込(linear raw 取得,実測リファレンス用) +│ ├── shape_metrics.py # 形状指標(輝度重心 / 角度-放射分解 / PCA / SSIM / NCC) │ └── visualize.py # matplotlib による可視化 PNG 出力 ├── visualize/ -│ ├── baker.py # 各 face 中心の直接照度ベイク(shadow ray + cosine + 距離減衰) +│ ├── baker.py # 各 face 中心の照度ベイク(direct / path モード) +│ ├── projection.py # orthographic センサ投影の純関数(評価板への輝度投影) │ └── viewer.py # PyVista による 3D インタラクティブビューア └── cli/ ├── render.py # `sm-render` エントリポイント @@ -89,15 +97,22 @@ | `scene/lights` | YAML 光源定義 → Mitsuba の `point` / `area` / etc. emitter | 1 LED 定義 → 1 emitter | | `scene/materials` | YAML 材料定義 → Mitsuba BSDF(`diffuse` / `dielectric` / `thindielectric`) | 1 材料定義 → 1 BSDF | | `scene/sensors` | YAML センサ定義 → Mitsuba `perspective` / `orthographic` センサ | 1 センサ定義 → 1 sensor.orthographic は照度マップ取得用 | +| `geometry/subdivide` | 三角形メッシュ → 最大辺長以下に均一分割した三角形メッシュ | 決定論的(同一入力→同一出力).ベイクの空間解像度を均一化 | | `render/runner` | Mitsuba scene + パラメータ → 輝度配列 | spp / max_depth / variant 切替 | | `render/output` | 輝度配列 → PNG / luminance.npy ファイル | tone mapping 等の選択肢を持つ | -| `evaluation/roi` | 画像 + ROI 定義 → ROI 内の輝度配列 | image_pixel / scene_face 両対応 | +| `runtime/llvm_init` | LLVM JIT 環境初期化 | `DRJIT_LIBLLVM_PATH` 自動探索 + variant 経路の INFO/WARNING ログ | +| `evaluation/roi` | 画像 + ROI 定義 → ROI 内の輝度配列 | image_pixel 型(scene_face は将来実装) | | `uniformity` | 輝度配列 → 均一性指標 dict | MiniTias-Evaluation 仕様準拠 | | `evaluation/zones` | 輝度配列 → 中心 / 中間 / 周辺の各統計 | 距離正規化を内部で行う | -| `evaluation/radial` | 輝度配列 → 中心からの距離 vs 平均輝度 | プロット用データ | +| `evaluation/radial` | 輝度配列 → 中心からの距離 vs 平均輝度 + 動径 min/max 比 | プロット用データ | +| `evaluation/oetf` | シミュ linear 輝度 → sRGB 符号化値(露出アンカー) | シミュのみに適用.実測 PNG には適用しない | +| `evaluation/normalize` | linear 輝度 → mean を target_mean に揃えた輝度 | 線形ゲイン.形状指標は不変.OETF と排他 | +| `evaluation/dng_loader` | DNG(RAW)→ linear raw 配列 | 実測リファレンスの linear 取得 | +| `evaluation/shape_metrics` | 輝度配列(+ 任意の参照画像)→ 形状指標 | 輝度重心 / 角度-放射分解 / PCA / SSIM / NCC | | `evaluation/visualize` | 各種統計 → matplotlib 図 PNG | 可視化のみ.データ加工はしない | -| `visualize/baker` | シーン + 光源 → 各 mesh face 中心の直接照度(W/m²) | Phase A は直接光のみ(shadow ray + cosine + 距離減衰).Phase B で多重反射対応予定 | -| `visualize/viewer` | シーン + 照度 → PyVista インタラクティブ 3D ウィンドウ | メッシュ着色(viridis)/ 光源マーカー / センサ視線 / 座標軸 | +| `visualize/baker` | シーン + 光源 → 各 mesh face 中心の照度(W/m²) | direct(直接光)/ path(多重反射込み)モード | +| `visualize/projection` | orthographic センサ + 評価板メッシュ → 頂点 / テクスチャ投影 | 純関数.画像 ↔ 物理の向き整合 | +| `visualize/viewer` | シーン + 照度 → PyVista インタラクティブ 3D ウィンドウ | メッシュ着色 / 光源マーカー / センサ視線 / スライド表示スタイル | | `cli/render`, `cli/evaluate`, `cli/visualize` | 各ステップの CLI ラッパー | 引数パース・ファイル I/O | ## エントリポイント (CLI Entry Points)