# シミュレーション実行記録 (Simulation Run Catalog)

本ドキュメントは `output/` 配下に蓄積されたシミュレーション・評価結果ディレクトリを **「何の試行か」が分かる形に索引化** したものである．`output/` は `.gitignore` で追跡対象外（容量・再生成可能性のため）であり，**手元の `output/` が無くてもこのドキュメントだけ読めば「過去にどんな試行があったか・どう再現するか」が辿れる**ことを目的とする．

関連:

- 改善履歴: [TEST_01_キャリブレーション検証履歴](TEST_01_キャリブレーション検証履歴.md)
- 物理仕様: [SPEC_03_基準設計の物理構成](../04_SPEC/SPEC_03_基準設計の物理構成.md)
- 評価設定: [SPEC_02_シーン定義仕様](../04_SPEC/SPEC_02_シーン定義仕様.md)

## output/ の扱い方針

- **追跡対象外** (`.gitignore` の `output/` 行)．git に乗せない．
- **再生成は可能** だが時間がかかる（1 レンダ約 9.6 分 @ spp=1024, 512²）．キャリブで検証済みの結果は残しておくと再現コストを節約できる．
- **どこにメタデータを残すか**: 各サブディレクトリに `README.md` を置くより，**本ドキュメントに一覧化する方が「俯瞰しやすい」**．
- **削除推奨のディレクトリ**は本ドキュメント末尾に列挙．古い試行錯誤や PoC スクリーンショットは適宜削除して構わない．

## 現役の検証アーティファクト (Active Verification Artifacts)

[TEST_01](TEST_01_キャリブレーション検証履歴.md) や [SPEC_03](../04_SPEC/SPEC_03_基準設計の物理構成.md) から参照されている，**意味のある実行結果**:

| ディレクトリ | 関連 Step | シーン設定 | 評価設定 | 主要指標 (mean / CoV / 勾配% / C/P) | 用途・参照元 |
| --- | --- | --- | --- | --- | --- |
| `output/baseline/` | 8-1 確定基準 | `configs/scene_baseline.yaml` (R=0.85, d=8, spp=1024) | — (レンダのみ) | luminance.npy + render_uint8.png | 確定基準の生レンダ．他の評価の入力ソース |
| `output/baseline_linear_npy/` | 8-1 比較基準 | (同上 luminance.npy 入力) | `configs/eval_baseline_linear.yaml` (OETF off) | 152.02 / 0.1826 / 24.65 / 1.327 | TEST_01 Step 8-7 で size 1.5×1.5 と比較する基準．輝度マップ追跡 (TEST_03) のパネル左下 |
| `output/eval_oetf_r085/` | 8-3 OETF 後 | (同上 luminance.npy 入力) | `configs/eval_baseline.yaml` (OETF on) | 146.71 / 0.0907 / 11.16 / 1.126 | OETF 適用効果の代表結果．輝度マップ追跡 (TEST_03) パネル右上 |
| `output/emitter_real/` | 8-7 検証 | `configs/scene_baseline_emitter_real.yaml` (size 1.5×1.5, radiance 12227, Φe 保存) | `configs/eval_baseline_linear.yaml` (OETF off) | 429.99 / 0.1863 / 26.21 / 1.355 | 点光源近似検証．形状指標 ≈ baseline_linear_npy で実証．輝度マップ追跡 (TEST_03) パネル右下 |
| `output/sweep_reflectance/r075/` 〜 `r092/` | 8-2 反射率スイープ | `configs/scene_baseline.yaml` の `printer_white.reflectance` を 0.75 / 0.80 / 0.85 / 0.90 / 0.92 に振った 5 種 (d=12, spp=256) | linear 評価 | → 下表 `sweep_summary.csv` | TEST_01 / SPEC_03 の反射率スイープ表の元データ |
| `output/sweep_reflectance/sweep_summary.csv` | 8-2 | — | — | 5 反射率の評価結果まとめ | 反射率スイープのサマリ表 |
| `output/baseline_v3_leds/` | 8-9 LED 位置正確化 | `configs/scene_baseline.yaml`（Fusion STL から抽出した新 LED 位置で更新済み, R=0.85, d=8, spp=1024） | `configs/eval_baseline_linear.yaml` (linear + normalization) | 146.71 / 0.1815 / 24.13 / 1.318 | TEST_01 Step 8-9 検証．輝度マップ追跡 (TEST_03) パネル右下（α=0.873434） |
| `output/baseline_spot/` | 8-10 LED spot 配光 | `configs/scene_baseline_spot.yaml`（18 LED を spot に変換, cutoff=90/beam=30, I_0=0.02678 W/sr, flux 保存） | `configs/eval_baseline_linear.yaml` (linear + normalization) | 146.71 / 0.1887 / 27.69 / 1.383 | TEST_01 Step 8-10 検証．X 方向の対称性が部分改善（目視）．α=12.77 で mean が約 14.6× 暗くなる |
| `output/baseline_datasheet/` | 8-11 データシート従順版 | `configs/scene_baseline_datasheet.yaml`（spot cutoff=85/beam=26.72, I_0=0.0220 W/sr，反射率 0.89, データシート規格値準拠） | `configs/eval_baseline_linear.yaml` (linear + normalization) | 146.71 / 0.1829 / 26.79 / 1.366 | TEST_01 Step 8-11 検証．データシート準拠は物理正確性のみ達成，形は LSC が依然必要．α=14.30 |
| `output/perspective_path_hi/` | 8-12 Helmholtz 検証 | `configs/scene_baseline_perspective_path.yaml`（perspective fov=90°, path, scalar_rgb, spp=4096） | （評価なし，検証目的） | mean=160, bot/top=2.035 | TEST_01 Step 8-12 検証．方向独立性の基準（バックワード） |
| `output/perspective_ptracer_hi/` | 8-12 Helmholtz 検証 | `configs/scene_baseline_perspective_ptracer.yaml`（perspective fov=90°, ptracer, scalar_rgb, spp=4096） | （評価なし，検証目的） | mean=319, bot/top=2.006 | TEST_01 Step 8-12 検証．方向独立性の対象（フォワード）．形は path と一致（bot/top 比 誤差 1.4%） |
| `output/blend_sweep/w{w}_a{a}/` (9 ディレクトリ) | 8-14 候補 β | `configs/scene_baseline_blend.yaml` を `scripts/sweep_blend_bsdf.py` で `printer_white.weight` ∈ {0.05, 0.15, 0.30} × `components[1].alpha` ∈ {0.1, 0.3, 0.6} に書き換えた 9 種 (R=0.85 + roughconductor material=none, d=8, spp=1024) | `configs/eval_baseline_dng_target.yaml` (linear + mean アンカー 207.82) | 9 ジョブ分の CoV/勾配 — [TEST_01 § Step 8-14 候補 β 結果表](TEST_01_キャリブレーション検証履歴.md#step-8-14-候補-β-a1-内壁の非-lambertian-性--混合-bsdf-感度分析) 参照 | TEST_01 Step 8-14 候補 β 検証．A1 が実機方向に作用しないことを確定 |
| `output/blend_sweep/summary.csv` | 8-14 候補 β | — | — | 9 ジョブ集約 CSV (weight, alpha, elapsed_s + 12 指標カラム) | `scripts/sweep_blend_bsdf.py` の集約出力．`scripts/build_blend_bsdf_panel.py` の入力 |
| `output/_slide_panels/blend_bsdf_sweep.png` | 8-14 候補 β | — | — | 3×3 輝度マップ比較パネル (shared vmin/vmax 1%/99% percentile) | TEST_01 Step 8-14 β「形」追跡用 |
| `output/_slide_panels/blend_bsdf_metrics.png` | 8-14 候補 β | — | — | 9 ジョブの数値表 (CoV/勾配/C/P/動径 min/max) | TEST_01 Step 8-14 β 数値追跡用 |
| `output/led_group_sanity/{bottom,right,left}/` | LED sanity check | `configs/scene_baseline.yaml` から lights を各 LED 基板（6 個ずつ）のみに絞った一時 YAML × 3 種 (d=8, spp=1024) | （評価なし，目視確認） | mean: bottom=98.82 / right=47.10 / left=47.08 | [TEST_07 LED グループ別動作確認](TEST_07_LEDグループ別動作確認.md) — 方向性・対称性・線形性の sanity check |
| `output/_slide_panels/led_group_sanity{,_focus,_right_left}.png` | LED sanity check | — | — | 1×3 / 1×2 / 6 列の比較パネル | TEST_07 視覚確認用 |

### sweep_summary.csv の値（参考、TEST_01 line と一致確認用）

| R | CoV | 勾配 % | C/P | mean | std |
| --- | --- | --- | --- | --- | --- |
| 0.75 | 0.2173 | 25.91 | 1.350 | 104.19 | 22.64 |
| 0.80 | 0.2034 | 24.00 | 1.316 | 137.00 | 27.87 |
| 0.85 | 0.1893 | 22.08 | 1.283 | 180.80 | 34.23 |
| 0.90 | 0.1753 | 20.15 | 1.252 | 239.60 | 42.00 |
| 0.92 | 0.1697 | 19.42 | 1.241 | 268.52 | 45.57 |

### 再現コマンド

| 目的 | コマンド |
| --- | --- |
| baseline レンダ生成 | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline.yaml --output output/baseline/` |
| baseline (linear, OETF off) 評価 | `uv run sm-evaluate --image output/baseline/luminance.npy --config configs/eval_baseline_linear.yaml --output output/baseline_linear_npy/` |
| baseline (OETF on) 評価 | `uv run sm-evaluate --image output/baseline/render_uint8.png --config configs/eval_baseline.yaml --output output/eval_oetf_r085/` |
| emitter_real (size 1.5×1.5) レンダ生成 | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline_emitter_real.yaml --output output/emitter_real/` |
| emitter_real 評価 | `uv run sm-evaluate --image output/emitter_real/luminance.npy --config configs/eval_baseline_linear.yaml --output output/emitter_real/` |
| 反射率スイープ全 5 点 | `output/sweep_reflectance/run_sweep.py` を参考に再実装．元スクリプトは削除推奨 (下記) のため要再構築 |
| 輝度マップ追跡パネル再生成 | `uv run python scripts/build_luminance_evolution_panel.py` |
| LED 位置を Fusion STL から再抽出 | `uv run python scripts/extract_led_positions_from_stl.py configs/meshes/SmTIASv3.stl --output configs/leds_extracted.yaml`（その後 scene_baseline.yaml の lights セクションを置換） |
| baseline_v3_leds レンダ生成 | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline.yaml --output output/baseline_v3_leds/` |
| baseline_v3_leds 評価 | `uv run sm-evaluate --image output/baseline_v3_leds/luminance.npy --config configs/eval_baseline_linear.yaml --output output/baseline_v3_leds/` |
| baseline_spot レンダ生成 (Step 8-10) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline_spot.yaml --output output/baseline_spot/` |
| baseline_spot 評価 | `uv run sm-evaluate --image output/baseline_spot/luminance.npy --config configs/eval_baseline_linear.yaml --output output/baseline_spot/` |
| baseline_datasheet レンダ生成 (Step 8-11) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline_datasheet.yaml --output output/baseline_datasheet/` |
| baseline_datasheet 評価 | `uv run sm-evaluate --image output/baseline_datasheet/luminance.npy --config configs/eval_baseline_linear.yaml --output output/baseline_datasheet/` |
| perspective_path_hi レンダ (Step 8-12 検証) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline_perspective_path.yaml --output output/perspective_path_hi/` |
| perspective_ptracer_hi レンダ (Step 8-12 検証) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_baseline_perspective_ptracer.yaml --output output/perspective_ptracer_hi/` |
| blend BSDF 3×3 スイープ (Step 8-14 β) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run python scripts/sweep_blend_bsdf.py` (9 ジョブ × 約 8.4 分 = 75.5 分) |
| blend BSDF 比較パネル生成 | `uv run python scripts/build_blend_bsdf_panel.py` (要 `output/blend_sweep/summary.csv` + 各 `luminance.npy`) |
| LED グループ別 sanity check (TEST_07) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run python scripts/sanity_led_groups.py` (3 ジョブ × 約 8.5 分 = 約 25 分) |
| LED sanity check 比較パネル生成 | `uv run python scripts/build_led_group_sanity_panel.py` (要 `output/led_group_sanity/{bottom,right,left}/luminance.npy` + `output/baseline/luminance.npy`) |

## 過去の整理実績 (Cleanup History)

### 2026-05-27: 初回整理（TEST_02 新設に伴う）

本ドキュメント新設に合わせて以下の残骸を **削除済み**（合計 ~12.6 MB）．`output/` は `.gitignore` で追跡対象外のため，リポジトリ履歴には影響していない．

| 削除対象 | 内容 | サイズ |
| --- | --- | --- |
| `output/eval_compat_test/` | 中身空（`figures/` 内も空）．用途不明の試行残骸 | 0 KB |
| `output/baseline_linear/` | `baseline_linear_npy/` と内容が重複．より新しい後者が現役 | 約 1245 KB |
| `output/compare_lummap/` | 過去の輝度マップ比較作業の残骸．`scripts/build_luminance_evolution_panel.py` で代替済み | 約 6077 KB |
| `output/sweep_reflectance/` 内の以下: | | |
| ・PoC スクリーンショット 28 個 | `clim_fix.png`, `cull_check.png`, `cull_check_no.png`, `eval_fix.png`, `eval_innerface.png`, `eval_texture.png`, `hybrid_*.png`（8 個）, `marker_check.png`, `nomarker_check.png`, `path_check.png`, `path_translucent.png`, `poc_cull.png`, `render_only.png`, `render_opt.png`, `sensor_off_check.png`, `uni_check.png`, `unified_*.png`（3 個）, `viz_check.png` | 約 3700 KB |
| ・ベイクキャッシュ 6 個 | `bake_cache.npz`, `bake_d16.npz`, `bake_hi.npz`, `bake_uni.npz`, `bake_uni64.npz`, `bake_unified.npz`（再生成可能） | 約 1280 KB |
| ・使い捨てスクリプト 4 個 | `apply_oetf.py`, `diag_seam.py`, `poc_cull.py`, `run_sweep.py`（本体機能はパッケージに統合済み or 再実装容易） | 約 16 KB |

整理後の `output/` トップレベルは **「現役の検証アーティファクト」表の 5 ディレクトリのみ**（`baseline/`, `baseline_linear_npy/`, `emitter_real/`, `eval_oetf_r085/`, `sweep_reflectance/`）．`sweep_reflectance/` 内は `r075`〜`r092` の 5 サブディレクトリと `sweep_summary.csv` の 6 項目のみ．

### 今後の整理時の参考テンプレート

新たに残骸が溜まったときは，本ドキュメント「現役の検証アーティファクト」表に載っていないディレクトリ・ファイルを削除候補として整理する．`output/` は `.gitignore` 配下なので git 履歴への影響はない．

```powershell
# 個別ディレクトリ削除
Remove-Item -Recurse -Force output/<対象>

# sweep_reflectance のように「特定の名前以外を消す」場合のテンプレ
$keepNames = @("r075", "r080", "r085", "r090", "r092", "sweep_summary.csv")
Get-ChildItem output/sweep_reflectance |
    Where-Object { $keepNames -notcontains $_.Name } |
    Remove-Item -Recurse -Force
```

実行前に必ず `Get-ChildItem` で対象を確認すること．削除後は本ドキュメントの「過去の整理実績」サブセクションに追記して履歴を残す．

## 今後の運用規約 (Operational Conventions)

### 新規シミュレーション実行時のルール

1. **ディレクトリ名は内容を端的に**:
   - 良い例: `baseline_linear_npy/`（baseline 入力 + linear 評価 + npy ソース）
   - 悪い例: `test1/`, `tmp/`（後から何の試行か分からない）
2. **本ドキュメント (TEST_02) に新行を追加**する: ディレクトリ名・関連 Step・config パス・主要指標・用途を記録．これで `output/` が散らかっても索引から辿れる．
3. **PoC や使い捨て出力は削除を前提**: 残すなら本ドキュメントに「履歴的価値」として記載．何も書かないものは削除推奨と見なす．
4. **再現コマンドを残す**: 本ドキュメントの「再現コマンド」表に同様の行を追加．

### ディレクトリ命名規則の提案

```
output/{シーン or テーマ}[_{評価バリアント}][_{特記事項}]/
  例:
    output/baseline/                      ← 確定基準 (scene_baseline.yaml)
    output/baseline_linear_npy/           ← 確定基準を linear で再評価 (npy ソース)
    output/eval_oetf_r085/                ← OETF on 評価結果 (R=0.85)
    output/emitter_real/                  ← 発光面実サイズ検証
    output/sweep_reflectance/r{NNN}/      ← 反射率スイープ
```

## 参照 (References)

- [TEST_01_キャリブレーション検証履歴](TEST_01_キャリブレーション検証履歴.md): 各 output の生まれた経緯
- [SPEC_03_基準設計の物理構成](../04_SPEC/SPEC_03_基準設計の物理構成.md): 確定基準の物理仕様
- [SPEC_04_評価仕様](../04_SPEC/SPEC_04_評価仕様.md): 評価方法論（ROI / OETF / メトリクス / 可視化）
- [SPEC_02_シーン定義仕様](../04_SPEC/SPEC_02_シーン定義仕様.md): シーン YAML と評価 YAML のスキーマ
- [TEST_03_輝度マップ形状追跡](TEST_03_輝度マップ形状追跡.md): 形を実機に近づける観点
- 生成スクリプト: `scripts/build_luminance_evolution_panel.py`（輝度マップ追跡用）
