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

> ⚠️ **BEFORE FIX 注記**: 本索引のうち面光源スケール軸バグ修正（[TEST_08](TEST_08_面光源スケール軸バグの発見と修正.md)）**以前**に生成された出力（`baseline` / `baseline_v3_leds` / `led_group_sanity` / `max_depth_sweep` / `reflectance_sweep` / `sweep_reflectance` / `blend_sweep` / `led_distribution_sweep` と対応する `_slide_panels` 図）は，**全 LED が 2m ストリップ化したバグ込み**の結果．実験記録として保持するが数値はそのまま信用しないこと．修正後の出力は `sanity_fix_1024` / `baseline_fix_1024` / `depth_bottom` / `refl_bottom` / `distrib_bottom`，図は `*_roi.png`（修正前を明記復元した版は `*_buggy.png`）．
>
> ⚠️ **BEFORE FIX 注記 (2) シェーディング法線アーティファクト**: **2026-08-18 の面法線修正（[TEST_12](TEST_12_シェーディング法線アーティファクトの発見と修正.md)）以前の全レンダ出力**（`depth_bottom` / `refl_bottom` / `blend_bottom` / `loft_w1p4` / `sphere_r100{,_loft,_loft_disk}` 等を含む，評価板メッシュを使う全シーン）には，PLY 自動スムーズ法線による**評価面の偽の異方性（現行筐体全灯で CoV を 0.061→0.172 に見せる支配的な系統誤差）**が乗っている．絶対値・形の数値は信用せず，同一条件同士の相対比較としてのみ参照すること．修正後の基準出力は `full_base_fix` / `sphere_r100_loft_disk_fix`．

本ドキュメントは `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 確定基準（**注: d=8 時代の古い結果**） | 当時の `configs/scene_baseline.yaml` (R=0.85, **d=8**, spp=1024) | — (レンダのみ) | luminance.npy + render_uint8.png | **生成時刻 2026-05-18 で当時の d=8 で計算**．2026-06-03 に scene_baseline.yaml が d=16 へ更新済のため、現状の設定とは不整合．必要時は新基準 (d=16) で再生成すべき |
| `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 視覚確認用 |
| `output/max_depth_sweep/d{8,12,16,20,28}/` (5 ディレクトリ) | 8-14 候補 α 前半 | `configs/scene_baseline.yaml` を `scripts/sweep_max_depth.py` で `render.max_depth` のみ書き換えた 5 種 (R=0.85, spp=1024) | `configs/eval_baseline_dng_target.yaml` (linear + mean アンカー 207.82) | d=28 で CoV=0.1583, 勾配=20.24%, C/P=1.254, 動径 min/max=0.689 — [TEST_01 § Step 8-14 候補 α 前半 結果表](TEST_01_キャリブレーション検証履歴.md#step-8-14-候補-α-前半-a9-max_depth-スイープ-8-12-16-20-28) 参照 | TEST_01 Step 8-14 候補 α 前半 検証．**A9 は数値改善のみで形改善ではない**ことを確定．d=16 が新キャリブベースライン候補 |
| `output/max_depth_sweep/summary.csv` | 8-14 候補 α 前半 | — | — | 5 ジョブ集約 CSV (max_depth, elapsed_s + 12 指標カラム) | `scripts/sweep_max_depth.py` の集約出力．`scripts/build_max_depth_panel.py` の入力 |
| `output/_slide_panels/max_depth_sweep.png` | 8-14 候補 α 前半 | — | — | 1×5 輝度マップ比較パネル (shared vmin/vmax) | TEST_01 数値追跡用 |
| `output/_slide_panels/max_depth_convergence.png` | 8-14 候補 α 前半 | — | — | 収束カーブ 2×2 (CoV/勾配/C/P/動径 min/max vs max_depth) | TEST_01 収束観察用 |
| `output/_slide_panels/max_depth_sweep_shape.png` | 8-14 候補 α 前半 | — | — | 上下 2 段比較 (上=共有スケール / 下=独立スケール 自己 contrast 最大化) | TEST_01 「形」追跡用 — 形不変の視覚証拠 |
| `output/_slide_panels/max_depth_sweep_relative.png` | 8-14 候補 α 前半 | — | — | 1×5 mean=1 正規化 (相対輝度 1.0=画像平均) | TEST_01 ambient 化観察用 |
| `output/reflectance_sweep/r{075,080,085,089,092}/` (5 ディレクトリ) | 8-14 候補 α 後半 | `configs/scene_baseline.yaml` (d=16 新基準) を `scripts/sweep_reflectance.py` で `materials.printer_white.reflectance` のみ {0.75, 0.80, 0.85, 0.89, 0.92} に書き換えた 5 種 (spp=1024) | `configs/eval_baseline_dng_target_shape.yaml` (新指標 5 つ含む) | R=0.92 で CoV=0.1424, 勾配=17.72%, angular_ratio=0.4938 — [TEST_01 § Step 8-14 候補 α 後半 結果表](TEST_01_キャリブレーション検証履歴.md#step-8-14-候補-α-後半-a8-反射率-5-値スイープ-r075-080-085-089-092) 参照 | TEST_01 Step 8-14 候補 α 後半 検証．**「数値の偽物の一致」を初の定量実証**．A8 数値改善のみクリア．**新指標 (shape_metrics) を初投入**したスイープ |
| `output/reflectance_sweep/summary.csv` | 8-14 候補 α 後半 | — | — | 5 ジョブ集約 CSV (reflectance + 既存 12 指標 + 新 12 指標) | `scripts/sweep_reflectance.py` の集約出力 |
| `output/_slide_panels/reflectance_sweep.png` | 8-14 候補 α 後半 | — | — | 2 段比較パネル (上=共有スケール / 下=独立スケール) | TEST_01 視覚追跡用 |
| `output/_slide_panels/reflectance_convergence.png` | 8-14 候補 α 後半 | — | — | 既存 4 指標カーブ vs R | TEST_01 数値追跡用 |
| `output/_slide_panels/reflectance_shape_metrics.png` | 8-14 候補 α 後半 | — | — | 新指標カーブ (centroid_y / angular_ratio / eccentricity) vs R | TEST_01 「形」追跡用 — **angular_ratio が単調増加 = 形は実機方向と逆を視覚的に確認** |
| `output/led_distribution_sweep/c{030,060,090,120,150}/` (5 ディレクトリ) | 8-14 候補 ξ | `configs/scene_baseline_spot.yaml` (Step 8-10 で作成) をテンプレに `scripts/sweep_led_distribution.py` で全 spot light の `cutoff_angle` を {30, 60, 90, 120, 150}° に，`beam_width = cutoff/3` で連動，max_depth を 16 に更新 (R=0.85, spp=1024) | `configs/eval_baseline_dng_target_shape.yaml` (新指標 5 つ含む) | c090 で CoV=0.165, angular_ratio=0.352; c030 で angular_ratio=0.338 — [TEST_01 § Step 8-14 候補 ξ 結果表](TEST_01_キャリブレーション検証履歴.md#step-8-14-候補-ξ-a2a3-led-配光-cutoff_angle-5-値スイープ-30-60-90-120-150) 参照 | TEST_01 Step 8-14 候補 ξ 検証．**配光モデルが形改善の本物の候補として初実証**．area→spot で angular_ratio が 0.45→0.34 で 25% 低下 |
| `output/led_distribution_sweep/summary.csv` | 8-14 候補 ξ | — | — | 5 ジョブ集約 CSV (cutoff_angle, beam_width + 既存 12 + 新 12 指標) | `scripts/sweep_led_distribution.py` の集約出力 |
| `output/_slide_panels/led_distribution_{sweep,convergence,shape_metrics}.png` | 8-14 候補 ξ | — | — | 輝度マップ 2 段 / 既存 4 指標カーブ / 新指標カーブ | TEST_01 「形」追跡 — **angular_ratio が cutoff 30° → 150° でほぼ flat (0.338→0.356) を視覚確認．area→spot の遷移が本質と判明** |
| `output/blend_bottom/w{W}_a{A}/` (12 ディレクトリ) | 8-14 TEST_09 実験5 | `configs/_tmp_blend_bottom/w{W}_a{A}.yaml`（`_tmp_sanity_1024/scene_bottom.yaml` ベース，printer_white を blendbsdf 化，w ∈ {0.05, 0.15, 0.3, 0.6} × α ∈ {0.1, 0.3, 0.6}，bottom 6 灯のみ，d=16, spp=1024，**修正後 LED**） | 形指標のみ (`scripts/build_blend_bottom_panel.py`) | 全 12 ジョブが diffuse 基準 (peak/mean 1.585) より悪化，最悪 w0.6_a0.1 で 2.145 — [TEST_09 § 実験5](TEST_09_照明分布の形不一致の原因切り分け.md) 参照 | TEST_09 実験5（壁の光沢化）Phase 1．**光沢は w に単調に形悪化＝材料側レバー出尽くしを確定** |
| `output/blend_bottom/{left,right}_w{W}_a{A}/` (各 5 ディレクトリ) | 8-14 TEST_09 実験5 拡張 | `configs/_tmp_blend_bottom/{left,right}_w{W}_a{A}.yaml`（縮小グリッド w ∈ {0.05, 0.3} × α ∈ {0.1, 0.6} ＋ Phase 2 の w0.6_a0.1） | 同上 (`--side left/right`) | 「w 単調悪化」3 灯共通．灯間 NCC は diffuse 0.96 → w0.6 で 0.86 だが常に 3 ペア均等（実機 0.85/0.61/0.41 の非対称に届かず） | TEST_09 実験5 Phase 2＋拡張．**実機の灯間 NCC（相補性の非対称）を初定量化＝実験4 の到達目標アンカー** |
| `output/blend_bottom/summary{,_left,_right}.csv` | 8-14 TEST_09 実験5 | — | — | 各灯の形指標集約 (job, weight, alpha, peak_mean, top_bot, ncc) | `scripts/build_blend_bottom_panel.py` の集約出力 |
| `output/_slide_panels/blend_{bottom,left,right}_shape_roi.png` | 8-14 TEST_09 実験5 | — | — | 基準＋実機＋w×α グリッドの形比較パネル（ROI 揃え・各セル独立 1–99% 正規化・実寸アスペクト） | TEST_09 実験5 視覚比較用・発表スライド素材 |
| `output/loft_w1p4/{bottom,left,right,full,full_base}/` (5 ディレクトリ) | TEST_10 | `configs/_tmp_loft_w1p4/{bottom,left,right,full,full_base}.yaml`（blend w0.05_a0.1・spp=1024・d=16．単灯 3 本＋全灯は後側を `後側_w1p4.stl` に差し替え，full_base のみ元 `後側.stl` の全灯 blend 基準） | full 系は `configs/eval_baseline_dng_target_shape.yaml` | bottom 単灯 peak/mean 1.672→1.508 と初の幾何レバー実証．灯間 NCC は 0.95x→0.96x で相補性不動．全灯 CoV 0.1717→0.1701 — [TEST_10](TEST_10_後側ロフト変形w1p4実験.md) 参照 | TEST_10 後側ロフト変形実験．対称な幾何変更では非対称相補性は動かないことを確定 |
| `output/loft_w1p4/summary.csv` | TEST_10 | — | — | 単灯 3＋全灯 2 の形指標集約 (side, version, peak_mean, top_bot, ncc_vs_real) | TEST_10 数値追跡用 |
| `output/_slide_panels/loft_w1p4_shape_roi.png` | TEST_10 | — | — | 基準・w1p4・実機の 4 行 × 3 列形比較パネル（ROI 揃え・各セル独立 1–99% 正規化） | TEST_10 視覚比較用 |
| `output/loft_w1p4/full_{w2p0,w4p0}/` (2 ディレクトリ) | TEST_10 拡張 | `configs/_tmp_loft_w1p4/{w2p0,w4p0}_full.yaml`（full.yaml の後側を `後側_{w2p0,w4p0}.stl` に差し替え） | `configs/eval_baseline_dng_target_shape.yaml` | ロフト重み 0.5→4.0 で全灯指標は横ばい（w4.0 のみ微悪化 CoV 0.1772）— [TEST_10 §拡張](TEST_10_後側ロフト変形w1p4実験.md) 参照 | TEST_10 全灯ロフト重みスイープ．ロフトは全灯分布に実質不感と確定 |
| `output/_slide_panels/loft_full_sweep_shape_roi.png` | TEST_10 拡張 | — | — | 全灯 w0.5/1.4/2.0/4.0 + 実機の 1×5 形比較パネル | TEST_10 拡張視覚比較用（`scripts/build_loft_w1p4_panel.py` が summary.csv とあわせて生成） |
| `output/_slide_panels/loft_full_sweep_relative.png` | TEST_10 拡張 | — | — | 同スイープの相対輝度版（シミュ 4 条件のみ 1×4・各セル max=1.0・全セル共通スケール・右カラーバー） | 均一性の絶対比較用．mean/max 0.64〜0.67 で横ばい（実機参照値 0.899 は TEST_10 の表を参照） |
| `output/sphere_r100/` | TEST_11 | `configs/scene_sphere_r100.yaml`（完全閉球殻 r=100mm 中心 (0,0,-40) + 評価板のみ，単灯 (0,0,-90) 壁向き＝直接光ゼロ，blend w0.05_a0.1・d=16・**spp=8192**） | `configs/eval_baseline_dng_target_shape.yaml` | CoV 0.1350 / peak/mean 1.323 / angular_ratio 0.126 / NCC 対実機 0.460 — [TEST_11](TEST_11_球体筐体実験.md) 参照 | TEST_11 球体筐体実験．幾何の理想極限（積分球）でも実機の均一性に届かないことの上限実証 |
| `output/sphere_r100/summary.csv` | TEST_11 | — | — | 現行全灯基準・球体単灯・実機の形指標集約 (label, peak_mean, top_bot, cov_roi, ncc_vs_real) | `scripts/build_sphere_panel.py` の集約出力 |
| `output/_slide_panels/sphere_r100_{shape_roi,relative}.png` | TEST_11 | — | — | 現行全灯／球体単灯／実機の 1×3 形比較パネル＋相対輝度版（各セル max=1.0・共通スケール） | TEST_11 初版の視覚比較（スクリプトは 4 セル版に更新済みのため再生成すると 1×4 になる） |
| `output/sphere_r100_loft/` | TEST_11 改訂 | `configs/scene_sphere_r100_loft.yaml`（球お椀＋板輪郭ロフト一体メッシュ `球ロフト_r100.stl`，単灯 (0,0,-142) 壁向き，blend w0.05_a0.1・d=16・spp=1024＝TEST_09/10 と条件統一） | `configs/eval_baseline_dng_target_shape.yaml` | CoV 0.1204 / peak/mean 1.392 / angular_ratio 0.110 / NCC 対実機 0.445 — [TEST_11 §改訂](TEST_11_球体筐体実験.md) 参照 | TEST_11 改訂（板嵌め込み・一体化）．幾何理想極限の CoV 床 ≈0.12 を確定 |
| `output/sphere_r100_loft/summary.csv` | TEST_11 改訂 | — | — | 現行全灯・球浮き配置・球ロフト・実機の 4 行形指標集約 | `scripts/build_sphere_panel.py`（4 セル版）の集約出力 |
| `output/_slide_panels/sphere_loft_{shape_roi,relative}.png` | TEST_11 改訂 | — | — | 現行全灯・球浮き・球ロフト矩形・球ロフト円形・実機の 1×5 形比較パネル＋相対輝度版 | TEST_11 改訂/追補の視覚比較・発表スライド素材 |
| `output/sphere_r100_loft_disk/` | TEST_11 追補 | `configs/scene_sphere_r100_loft_disk.yaml`（ロフト一体キャビティ＋同面積円板単灯 r=1.7662mm＝完全軸対称，spp=1024・d=16） | `configs/eval_baseline_dng_target_shape.yaml` | CoV 0.1205 ほか全指標が矩形版と MC ノイズ内で一致 — [TEST_11 §追補](TEST_11_球体筐体実験.md) 参照 | TEST_11 追補（円形光源）．発光面形状の不感を確認．**以後の球実験の正準構成** |
| `output/sphere_r100{,_fit,_loft}/geometry/` | TEST_11 | — | — | レンダ前 3D 配置確認のスクリーンショット（`--no-bake` レイアウト・LED 4 アングル・path ベイク） | 幾何変更時のレンダ前 3D 確認ワークフロー（CLAUDE.md 必須ルール）の記録．fit 版はレンダ未実施（ロフト版に置換） |
| `output/full_base_fix/` | TEST_12 | `configs/_tmp_fn_full_base.yaml`（scene_baseline_blend の w=0.05/α=0.1/d=16 版＝TEST_10 full_base の再構成．修正前コードで保存済み結果と一致検証済み） | `configs/eval_baseline_dng_target_shape.yaml` | **CoV 0.0610 / 勾配 6.83% / C/P 1.073**（面法線修正後）— [TEST_12](TEST_12_シェーディング法線アーティファクトの発見と修正.md) 参照 | **面法線修正後の現行筐体全灯の新基準**．実機（CoV 0.0695）と数値レベルで整合 |
| `output/bsdf_grid_fix/` (60 ディレクトリ) | TEST_14 | `configs/_tmp_fn_full_base.yaml` の `printer_white` のみを `scripts/sweep_bsdf_grid_fix.py` で ρ ∈ {0.75, 0.78, 0.82, 0.85, 0.88, 0.90} × ω ∈ {0, 0.05, 0.15, 0.30} × α ∈ {0.1, 0.3, 0.6} に書き換えた 60 種（d=16, spp=1024 据え置き．ω=0 は純 diffuse） | `configs/eval_baseline_dng_target.yaml` | 最良 ρ0.82 ω0: **CoV 0.0669 / 勾配 8.38% / C/P 1.0915 / 動径 0.862**（実機 0.0695 / 8.35% / 1.0911 / 0.860）— [TEST_14](TEST_14_材質パラメータ再スイープと残差の構造分解.md) 参照 | **面法線修正後の材質パラメータ確定**．ρ ≈ 0.81 純 diffuse，ω・α は無効．全 60 条件で NCC が 0.81〜0.86 に張り付き形は不動 |
| `output/bsdf_grid_fix/summary.csv` | TEST_14 | — | — | 60 条件集約 CSV（ρ/ω/α + 指標 + 誤差成分 + score + 打ち切り損失） | `scripts/build_bsdf_grid_panel.py`・`build_bsdf_grid_visual.py` の入力．重み付けを変えた再ランキングにも使える |
| `output/sphere_r100_loft_disk_fix/` | TEST_12 | `configs/scene_sphere_r100_loft_disk.yaml`（面法線修正後の再レンダ） | 同上 | CoV 0.0628 / angular_ratio 0.005（完全同心円） | 面法線修正後の球体筐体の正準結果．現行筐体とほぼ同等＝球形化の優位性消滅 |
| `output/_slide_panels/sphere_fix_{shape_roi,relative}.png` | TEST_12 | — | — | 現行筐体 fix／球ロフト円形 fix／実機の 1×3 パネル（修正後のみで比較） | TEST_12 視覚比較・発表スライド素材（`scripts/build_sphere_panel.py` 現行版が生成） |
| `output/singles_fix/{bottom,left,right}/` | TEST_12 追補 | `configs/_tmp_fix_{bottom,left,right}.yaml`（検証済み `_tmp_fn_full_base.yaml` から灯グループ抽出．blend w0.05_a0.1・d=16・spp=1024） | 形指標のみ（`scripts/build_singles_fix_summary.py`） | 灯間 NCC（平滑）が修正前 0.99 均等 → **修正後 0.85/0.93/0.73 の非対称** — [TEST_12 §追補](TEST_12_シェーディング法線アーティファクトの発見と修正.md) 参照 | TEST_09 中核結論「3 灯同形」の撤回根拠．単灯 spp=1024 はノイズ 5.3% > 構造 4% のため raw 指標はノイズ支配（以後の単灯は spp≥4096 推奨） |
| `output/singles_fix/{summary,pairwise_ncc}.csv`・`output/_slide_panels/singles_fix_shape_roi.png` | TEST_12 追補 | — | — | 単灯形指標（修正前後・w1p4 対比，平滑後 p/m 併記）・灯間 NCC（raw/smooth）・3×4 パネル | `scripts/build_singles_fix_summary.py` の出力 |
| `output/full_w1p4_fix/`・`output/singles_fix/{bottom,left,right}_w1p4/` | TEST_12 追補 | `configs/_tmp_fix_{full,bottom,left,right}_w1p4.yaml`（後側を `後側_w1p4.stl` に差し替え，blend w0.05_a0.1・d=16・spp=1024） | 全灯のみ `eval_baseline_dng_target_shape.yaml` | 全灯 CoV 0.0605（基準 fix 0.0610 と差 1%）＝**ロフト不感は修正後も維持**．単灯は平滑 p/m 差 ≤0.9%・灯間 NCC は +0.05〜0.12 同形化 — [TEST_12 §ロフト再検証](TEST_12_シェーディング法線アーティファクトの発見と修正.md) 参照 | TEST_10 相対結論の再検証．「bottom 平ら化＝幾何レバー実証」は撤回相当に弱まり，不感性の結論が生存 |
| `output/_slide_panels/full_vs_singles_fix.png` | TEST_12 追補 | — | — | シミュ（面法線修正後）×実機の 2 行 × 全灯/bottom/left/right 4 列パネル（全セル同一平滑化・NCC 対実機併記） | 全灯と単灯の形の対応比較（`scripts/build_full_vs_singles_panel.py` が生成）．平滑後 p/m はシミュ 1.07 前後 vs 実機 1.10〜1.16 |
| `output/sphere_radius_sweep/board_baffle/` (10 ディレクトリ) | TEST_15 | `configs/_tmp_sphere_radius/scene_board_baffle_fixed_cut_r*.yaml`（`scripts/sweep_sphere_radius.py` が生成．LED を -Z 極の壁面に密着させ評価板向きにし，直前にバッフル円板を置いた構成．接続円 85.417mm @ z=-40 を固定して球中心のみ移動．r ∈ {88, 95, 100, 110, 120, 135, 150, 170, 200, 250}mm．材質・spp=1024・d=16 は据え置き） | `configs/eval_baseline_dng_target_shape.yaml` | r=100 で構造 CoV 0.0312（旧 axial_wall 0.0579 の 46% 減）．輪帯 min/max は r=135 の 0.873 を頂点に半径とともに悪化し r=250 で 0.779 — [TEST_15](TEST_15_バッフル導入と球半径スイープ.md) 参照 | **バッフルの効果を実証**．ただし接続円固定では球を大きくするほど周辺が悪化する（外側の落ち込み 6.4%→18.0%）．**生 CoV は MC ノイズ支配なのでそのまま読まないこと** |
| `output/sphere_radius_sweep/board_baffle_similar_g2/` (3 ディレクトリ) | TEST_15 | 同上の `--cavity similar_g2` 版（キャビティ全体を半径に相似 center_z=-0.92r・cut_z=-0.40r，ロフトを 5 次 Hermite にして接合部で曲率まで球に一致．r ∈ {100, 170, 250}mm） | 同上 | 外側の落ち込みが半減（r=250 で 18.0%→8.8%）し，輪帯 min/max が半径とともに**改善**に転じる（0.852→0.883→0.891） — [TEST_15](TEST_15_バッフル導入と球半径スイープ.md) 参照 | **接合を自然にすると傾向が逆転**．r=250 の 0.891 は全条件で最良．残り 7 半径は未実行 |
| `output/sphere_radius_sweep/board_baffle_similar_radial/` (10 ディレクトリ) | TEST_15 | 同上の `--cavity similar_radial` 版（相似スケールのまま**ロフトのリム接線を半径方向（水平）**に取り，板直下の「喉」を無くした形．ロフトを (ρ, z) の 2 次元パラメトリック Hermite 化して実現．r ∈ 全 10 半径） | `configs/eval_baseline_dng_target_shape.yaml` | 外側の落ち込みが r=250 で 2.27%（fixed_cut 17.97% の 8 分の 1）．輪帯 min/max は r=95 以降単調改善し r=250 で **0.944**，構造 CoV **0.0145** — [TEST_15](TEST_15_バッフル導入と球半径スイープ.md) 参照 | **全条件で最良**．旧 axial_wall r=100（0.0579 / 0.797）の 4.0 倍．内側・外側とも半径で改善し頭打ち未到達．ただし r≲95 では fixed_cut に負ける |
| `output/sphere_radius_sweep/*/summary.csv`・`{sweep_overview,radial_comparison}.png`・`cavity_comparison.png`・`cavity_{design,effect}_comparison.png`・`rim_tangent_comparison.png`・`geometry_check_*.png`・`cutaway_*.png` | TEST_15 | — | — | 条件別の集約 CSV（幾何・生 mean・各指標）／輝度マップ一覧 + CoV 分解カーブ／同心円プロファイル比較／接合設計の断面 before-after／幾何確認図・半割り断面 | `scripts/build_radius_sweep_visual.py`・`build_radial_comparison.py`・`build_cavity_comparison.py`・`build_radius_geometry_figure.py`・`show_scene_cutaway.py` の出力．輝度マップは 20 分割の輪帯平均の最大値を 1.0 に正規化（画素最大値は firefly に張り付くため）．レンダ前 3D 確認（CLAUDE.md 必須ルール）の記録を兼ねる |
| `output/cube_size_sweep/board_baffle/` (10 ディレクトリ) | TEST_16 | `configs/_tmp_cube_size/scene_board_baffle_L*.yaml`（`scripts/sweep_cube_size.py` が生成．筐体を立方体（内寸 L・天井 z=0・底面 z=-L）に変えた board_baffle 構成．LED は底面中心に密着し評価板向き，バッフルは球版と同じ閉形式．L ∈ {120〜360}mm の全 10 条件（L=220 は発表資料整理時に球スイープと同数に揃える 10 条件目として追加）．材質・spp=1024・d=16 は据え置き．**先行 5 条件は mitsuba 3.8.0・後続 5 条件は 3.7.1**＝SAC ブロックによる固定，アンカー検証済み） | `configs/eval_baseline_dng_target_shape.yaml` | L=360 で構造 CoV **0.0090**・輪帯 min/max **0.964**＝全条件を通じた最良．同一内面積の球（対数内挿）に対し構造 CoV 比 0.62〜1.05・全 10 条件で単調改善 — [TEST_16](TEST_16_立方体キャビティ導入と球との比較.md) 参照 | **同じ内面積なら立方体が球より均一**（L=120 のみ互角）を実証．L=280 で球の全 10 条件の最良（r=250）を超える．遮蔽は 55,473 本 100%・法線逸脱 ≤0.06° を事前検証済み |
| `output/cube_size_sweep/_anchor_check_mitsuba371/L120/` | TEST_16 | `configs/_tmp_cube_size/scene_board_baffle_L120.yaml`（本体スイープと同一．mitsuba **3.7.1** でレンダ） | 同上 | 3.8.0 版と比較して構造 CoV 一致（0.0379）・輪帯 min/max 差 +0.0002・輪帯プロファイル最大差 1.17σ | mitsuba 3.8.0→3.7.1 固定（SAC が `IlmThread-mitsuba.dll` をブロック）の等価性検証アンカー．バージョン混在の妥当性の根拠 |
| `output/offaxis_led_sweep/` (10 ディレクトリ) | TEST_17 | `configs/_tmp_offaxis/scene_offaxis_*.yaml`（`scripts/sweep_offaxis_led.py` が生成．LED を**深さ方向軸の中点の高さ・+X 側の壁面**に置き板中心 (0,0,-4.5) へ向けた board_baffle 構成．球 similar_radial r ∈ {88, 100, 135, 170, 250} + 立方体 L ∈ {120, 160, 200, 280, 360}．バッフルは視線上 10mm・数値サイジング．材質・spp=1024・d=16 据え置き・mitsuba 3.7.1） | `configs/eval_baseline_dng_target_shape.yaml` | m=1 符号付き a1 が全条件で負（LED 側が暗い）＝ -1.6〜-7.2%．サイズとともに約 4 割まで減衰．位置ずれの Δ構造CoV は球 ±0.006 以内・立方体 +0.010〜+0.033 — [TEST_17](TEST_17_オフ軸LED配置の影響とサイズ依存.md) 参照 | **オフ軸頑健性は球 > 立方体（軸上と逆転）**を実証．遮蔽は全 10 条件 55,473 本 100%（傾き追従の LED サンプルに一般化済み） |
| `output/offaxis_led_sweep/{summary.csv,offaxis_comparison.png}`・`_placement_check/cutaway_*.png` | TEST_17 | — | — | 条件別集約 CSV／解析図（輝度マップ 2 行 + a1・重心・構造 CoV の内面積依存を軸上と重ね描き）／レンダ前 3D 確認の半割り断面 10 枚 | `scripts/build_offaxis_comparison.py`・`show_scene_cutaway.py` の出力．レンダ前 3D 確認（CLAUDE.md 必須ルール）の記録を兼ねる |
| `output/led_placement_sweep/` (255 ディレクトリ) | TEST_18 | `configs/_tmp_led_placement/scene_*.yaml`（`scripts/sweep_led_placement.py` が生成．同内面積ペア 球 φ ∈ {200,270,340,500}（r ∈ {100,135,170,250}） ↔ 立方体 L ∈ {141,187,234,340} で，LED をキャビティ中心から見た極角 θ=0〜120°（13 段階）に置く位置スイープ・θ=60/90/120° の向き 3 通り（板向き＋バッフル／壁法線向き＋バッフル／真下向き）・θ=90° の輪に N=1〜4 灯（総光束保存）・seed 違いの再レンダ，追加実験の方位角 φ=15〜40°（立方体）と真下向き N=2/4/8 灯．材質・spp=1024・d=16 据え置き．Newton cuda_ad_rgb・mitsuba 3.7.1・`--workers 2` で 1 条件 5〜6 秒） | `configs/eval_baseline_dng_target_shape.yaml` | 配置依存の幅（θ 全域の構造 CoV max−min）は球 0.015〜0.023・立方体 0.025〜0.071．球は θ≈30° が軸上より均一（φ340: 0.0193→0.0057）．対向 2 灯で構造 CoV 0.005〜0.010 と形状差が消える．真下向きはバッフル無しで板向きと同等 — [TEST_18](TEST_18_照明配置依存性の球と立方体の比較.md) 参照 | **配置依存は球が立方体の 1/2〜1/3**（仮説成立）．図なし評価（`--no-figures`）なので各条件に figures/ は無い．`row.json` が条件ごとの集約行（並列・再開用） |
| `output/led_placement_sweep_rho081/` (60 ディレクトリ + 解析出力) | TEST_18 | `configs/_tmp_led_placement_rho081/scene_*.yaml`（`sweep_led_placement.py --material calibrated --key-subset` が生成．内壁を TEST_14 の校正材質 純 diffuse ρ=0.81 に置き換えた主要 60 条件＝位置スイープ ペア 1・3，多灯 N=2/4・真下向き ペア 3） | 同上 | 配置依存の幅 球 0.030 vs 立方体 0.077〜0.098．軸上は両形状とも大きく改善（旧材質の光沢が作るリングが消える）— [TEST_18](TEST_18_照明配置依存性の球と立方体の比較.md) 結果 7 | 主結論が材質に依らないことの確認．解析は `build_led_placement_comparison.py --material calibrated` |
| `output/led_placement_sweep/{summary.csv,analysis.csv,position_summary.csv,position_sensitivity.png,position_maps.png,direction_comparison.png,count_comparison.png,azimuth_comparison.png,ring_comparison.png,analysis_report.txt}`・`_placement_check/cutaway_*.png` | TEST_18 | — | — | 条件別集約 CSV／方位フーリエ m=1〜4・構造 CoV・重心の解析 CSV／位置・向き・灯数・方位角・真下向き多灯の解析図 6 枚／レンダ前 3D 確認の半割り断面 23 枚 | `scripts/build_led_placement_comparison.py`・`show_scene_cutaway.py` の出力．レンダ前 3D 確認（CLAUDE.md 必須ルール）の記録を兼ねる |
| `output/cube_size_sweep/board_baffle/{summary.csv,cube_vs_sphere.png,fourfold_component.png}`・`output/cube_size_sweep/_placement_check/cutaway_L*.png` | TEST_16 | — | — | 条件別集約 CSV／球との比較図（輝度マップ 5 枚 + 輪帯プロファイル + 内面積軸の指標カーブ + 直接ペア 3 組）／m=4（cos 4φ）成分の定量図／レンダ前 3D 確認の半割り断面 5 枚 | `scripts/build_cube_sphere_comparison.py`・`analyze_fourfold_component.py`・`show_scene_cutaway.py` の出力．m=4 は全条件 \|a4\| ≤ 0.26%（系統誤差床 ~0.1%）＝四隅の写り込みは実質ゼロ．レンダ前 3D 確認（CLAUDE.md 必須ルール）の記録を兼ねる |
| `output/_slide_panels/sphere_loft_disk_before_after.png`・`normal_artifact_explainer.png` | TEST_12 | — | — | 球ロフト円形光源の修正前後 1×2 比較（相対輝度・共通スケール）／法線アーティファクトの機構説明図（模式図＋実物メッシュの補間法線再現＋修正前マップの 4 パネル） | 発表スライド素材（アドホック生成．修正前後比較は CoV 0.1205→0.0628 の視覚版） |

### 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`) |
| max_depth 5 値スイープ (Step 8-14 α 前半) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run python scripts/sweep_max_depth.py` (5 ジョブ × 8.5〜30 分 = 約 85 分) |
| max_depth 比較パネル生成 | `uv run python scripts/build_max_depth_panel.py` (1×5 輝度マップ + 2×2 収束カーブ．要 `output/max_depth_sweep/summary.csv` + 各 `luminance.npy`) |
| 反射率 5 値スイープ (Step 8-14 α 後半) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run python scripts/sweep_reflectance.py` (5 ジョブ × 約 17 分 = 約 85 分) |
| 反射率比較パネル生成 | `uv run python scripts/build_reflectance_panel.py` (輝度マップ 2 段 + 既存指標 + 新指標カーブ．要 `output/reflectance_sweep/summary.csv` + 各 `luminance.npy`) |
| LED 配光 cutoff 5 値スイープ (Step 8-14 候補 ξ) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run python scripts/sweep_led_distribution.py` (5 ジョブ × 約 17 分 = 約 85 分) |
| LED 配光比較パネル生成 | `uv run python scripts/build_led_distribution_panel.py` (輝度マップ 2 段 + 既存指標 + 新指標カーブ．要 `output/led_distribution_sweep/summary.csv` + 各 `luminance.npy`) |
| blend 単灯スイープ (TEST_09 実験5) | `configs/_tmp_blend_bottom/` の各 YAML を `uv run sm-render --scene configs/_tmp_blend_bottom/{job}.yaml --output output/blend_bottom/{job}` で順次実行 (1 ジョブ約 10.5 分) |
| blend 単灯の形指標解析・パネル生成 | `uv run python scripts/build_blend_bottom_panel.py --side {bottom,left,right}` (要 `output/blend_bottom/` の各 `luminance.npy` + 実機 `lightsim/luminance_maps/*.npy`) |
| loft_w1p4 レンダ (TEST_10) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/_tmp_loft_w1p4/{job}.yaml --output output/loft_w1p4/{job}/` (job ∈ {bottom, left, right, full, full_base}．単灯 約 10 分・全灯 約 10 分/本) |
| loft 重みスイープ レンダ (TEST_10 拡張) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/_tmp_loft_w1p4/{w2p0,w4p0}_full.yaml --output output/loft_w1p4/full_{w2p0,w4p0}/` |
| loft_w1p4 全灯評価 (TEST_10) | `uv run sm-evaluate --image output/loft_w1p4/{full,full_base}/luminance.npy --config configs/eval_baseline_dng_target_shape.yaml --output output/loft_w1p4/{full,full_base}/` |
| loft_w1p4 形指標解析・パネル生成 (TEST_10) | `uv run python scripts/build_loft_w1p4_panel.py` (要 `output/loft_w1p4/` と元メッシュ基準 `output/blend_bottom/` の各 `luminance.npy` + 実機 `lightsim/luminance_maps/*.npy`．summary.csv と 4×3 パネルを再生成) |
| 球殻メッシュ生成 (TEST_11) | `uv run python scripts/generate_sphere_housing.py --radius 100 --thickness 3 --center 0 0 -40 --output configs/meshes/球殻_r100.stl` |
| 球体筐体レンダ (TEST_11) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_sphere_r100.yaml --output output/sphere_r100/` (spp=8192 で約 36 分) |
| 球体筐体評価 (TEST_11) | `uv run sm-evaluate --image output/sphere_r100/luminance.npy --config configs/eval_baseline_dng_target_shape.yaml --output output/sphere_r100/` |
| 球体筐体パネル生成 (TEST_11) | `uv run python scripts/build_sphere_panel.py` (4 セル版．要 `output/sphere_r100{,_loft}/` と `output/loft_w1p4/full_base/` の `luminance.npy` + 実機 `lightsim/luminance_maps/full_*.npy`) |
| 球ロフト一体メッシュ生成 (TEST_11 改訂) | `uv run python scripts/generate_sphere_loft_housing.py --output configs/meshes/球ロフト_r100.stl` |
| 球ロフト版レンダ (TEST_11 改訂) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_sphere_r100_loft.yaml --output output/sphere_r100_loft/` (spp=1024 約 7.4 分) |
| 球ロフト版評価 (TEST_11 改訂) | `uv run sm-evaluate --image output/sphere_r100_loft/luminance.npy --config configs/eval_baseline_dng_target_shape.yaml --output output/sphere_r100_loft/` |
| レンダ前 3D 配置確認 (幾何変更時必須) | `uv run sm-visualize --scene <scene.yaml> --no-bake --screenshot <png>` ＋ `uv run python scripts/show_led_geometry.py --scene <scene.yaml> --screenshot <prefix>` |
| 球ロフト円形光源版レンダ・評価 (TEST_11 追補) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/scene_sphere_r100_loft_disk.yaml --output output/sphere_r100_loft_disk/` → `uv run sm-evaluate --image output/sphere_r100_loft_disk/luminance.npy --config configs/eval_baseline_dng_target_shape.yaml --output output/sphere_r100_loft_disk/` |
| 単灯再検証レンダ・集計 (TEST_12 追補) | `$env:DRJIT_LIBLLVM_PATH = "C:\Program Files\LLVM\bin\LLVM-C.dll"; uv run sm-render --scene configs/_tmp_fix_{bottom,left,right}.yaml --output output/singles_fix/{bottom,left,right}/` → `uv run python scripts/build_singles_fix_summary.py` |
| 照明配置スイープ (TEST_18) | `uv run sm-remote push` → `uv run sm-remote run --name place --gpu 0 --threads 16 -- python scripts/sweep_led_placement.py --workers 2` → `uv run sm-remote pull led_placement_sweep` → `uv run python scripts/build_led_placement_comparison.py`（手元で幾何だけ確認するなら `--prepare-only`） |

## 過去の整理実績 (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`（輝度マップ追跡用）
