diff --git a/CLAUDE.md b/CLAUDE.md index d883b3a..eecb0a2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,8 +5,9 @@ ## 開発進捗 -現在の進捗: フェーズ 7(実装)— Step 1〜7 完了. -次のアクション: `/implement Step 8: 基準設計のキャリブレーション`([PLAN_02 参照](docs/03_PLAN/PLAN_02_開発ステップ.md)) +現在の進捗: フェーズ 7(実装)— Step 1〜7 完了,Step 8(基準設計キャリブレーション)進行中. +Step 8 進捗: spp 校正完了(128→1024、ノイズ vs 物理差を切り分け済み).CoV 残差 4 倍の主因は ISP レンズシェーディング補正によるスケール差(構造的、spp 非依存)と判明.[SPEC_03「キャリブレーション経過」参照](docs/04_SPEC/SPEC_03_基準設計の物理構成.md). +次のアクション: レンズシェーディング補正の後処理適用、または筐体内壁反射率スイープ(0.85±0.05)で勾配・CoV を実測に近づける. 実装済みモジュール: - `src/sm_tias_lightsim/uniformity.py` — Rec.709 輝度変換 + CoV/std/max-min(MiniTias-Evaluation コピー) diff --git a/configs/scene_baseline.yaml b/configs/scene_baseline.yaml index 8b78a00..1ffc76f 100644 --- a/configs/scene_baseline.yaml +++ b/configs/scene_baseline.yaml @@ -396,4 +396,4 @@ variant: llvm_ad_rgb integrator: path max_depth: 8 - spp: 128 + spp: 1024 diff --git "a/docs/04_SPEC/SPEC_03_\345\237\272\346\272\226\350\250\255\350\250\210\343\201\256\347\211\251\347\220\206\346\247\213\346\210\220.md" "b/docs/04_SPEC/SPEC_03_\345\237\272\346\272\226\350\250\255\350\250\210\343\201\256\347\211\251\347\220\206\346\247\213\346\210\220.md" index 2b2ff56..8ea516e 100644 --- "a/docs/04_SPEC/SPEC_03_\345\237\272\346\272\226\350\250\255\350\250\210\343\201\256\347\211\251\347\220\206\346\247\213\346\210\220.md" +++ "b/docs/04_SPEC/SPEC_03_\345\237\272\346\272\226\350\250\255\350\250\210\343\201\256\347\211\251\347\220\206\346\247\213\346\210\220.md" @@ -88,7 +88,7 @@ | --- | --- | --- | | `integrator` | `path` | **多重反射を考慮した** path tracing.LED → 内壁 → 評価板 のような間接照明経路もすべて積分する | | `max_depth` | 8 | ray の最大反射回数.8 回までの反射を追跡(実用上 MiniTIAS の白筐体内多重反射には十分) | -| `spp` | 128 | pixel あたりサンプル数.大きいほどノイズ減・計算重.キャリブ反復中の暫定値(512〜1024 に上げる予定) | +| `spp` | 1024 | pixel あたりサンプル数.大きいほどノイズ減・計算重.**spp 校正済み**(下記「キャリブレーション経過」参照).llvm_ad_rgb・512×512 で 1 レンダ約 9.6 分 | | `variant` | `llvm_ad_rgb` | LLVM JIT による RGB レンダリング.LLVM-C.dll が PATH(または DRJIT_LIBLLVM_PATH)で参照可能なこと | ### 多重反射の意味 @@ -138,6 +138,44 @@ | 中心/周辺比 | 1.064 | ±0.02 | | 勾配 (%) | 6.23 | ±1.5 | +## キャリブレーション経過(spp 校正と診断) + +### spp 128 → 1024 の数値比較(2026-05-18) + +代表実測 1 枚(`MiniTIAS_20260408_144434`、ROI 物理対応済み)に対するシミュ結果: + +| 指標 | 実測 (target) | spp=128 | spp=1024 | 実測との差 | +| --- | --- | --- | --- | --- | +| **CoV** | 0.0426 | 0.236 | **0.183** | 4.3× | +| std | 6.26 | 35.83 | 27.85 | | +| max/min 比 | 1.392 | 11.59 | 4.27 | 3.1× | +| mean | 146.71 | 151.79 | 152.02 | ≈ 一致 | +| 中心/周辺比 | 1.0650 | 1.330 | 1.328 | 1.25× | +| 勾配 % | 6.10 | 24.83 | 24.72 | 4.1× | + +### 診断結論:ノイズ要因 vs 物理モデル要因の切り分け + +spp を 8 倍にして判明した切り分け: + +- **モンテカルロノイズ由来だった成分**:max/min 比 11.6→4.3、std 35.8→27.9、CoV 0.236→0.183.極端な外れ値ピクセルが消えた. +- **物理モデル由来(spp 非依存)の成分**:**中心/周辺比 (1.330→1.328) と勾配 % (24.83→24.72) はほぼ不変**.計算ノイズではなく構造的な空間勾配. + +ノイズ分解(`std² = 信号² + ノイズ²`、ノイズ ∝ `1/√spp`)で逆算: + +- spp=1024 の残留ノイズ std ≈ 8.5、真の物理信号 std ≈ 26.5 +- **spp→∞(ノイズゼロ)でも CoV は ≈ 0.174 までしか下がらない**(実測 0.0426 の約 4 倍) +- ⇒ spp をさらに上げても CoV は 0.183→0.174 程度で頭打ち.**spp 増加は費用対効果なし**.spp=1024 を基準設定として確定. + +### 残差の主因(物理モデル差) + +CoV 4 倍差・勾配 4 倍差の主因は **シミュの照度が周辺へ急峻に落ちる構造的空間勾配**.これは実機との物理差というより **比較スケールの差** が支配的: + +実測 PNG は実機 ISP の **レンズシェーディング補正(周辺減光の電子補正)込み**で、シミュは線形放射輝度(補正なし).実測データ提供側 README(`reference_measurement/.../README.md` 注意点)も明示: + +> レンズシェーディング補正が ON だと周辺光量低下の一部は ISP が補正している.**「シミュの勾配が実測より大きい」ことが期待される**(このため 6% は補正後の残存ムラ). + +今回の観測(シミュ勾配 24.7% ≫ 実測 6.1%)はこの予測と整合.次の改善はレンズシェーディング補正の後処理適用、または筐体内壁反射率スイープ(次セッション着手). + ## 想定どおりの挙動(追加対応不要) 以下は実機と一致する挙動として **意図的にそのままにしている** 項目: @@ -152,9 +190,10 @@ 1. **3D プリンタ白素材の反射率の正確な値**: 暫定 `0.85` だが、実物のフィラメント(PLA / PETG / ABS のどれか)と分光反射率データで再校正が必要. 2. **左右 LED 基板の正確な位置・向き**: STL から推定した座標で、Fusion 360 設計とのズレがある可能性. -3. **LED 1 個あたりの実 W 値**: 暫定 `radiance=1.0 W/sr/m²`(≒ 3.08e-5 W).実機 SMD 2835 の規格値(~0.2 W)との校正係数を確定する必要. +3. **LED 1 個あたりの実 W 値**: 現状 `radiance=2807.25`(実測 mean=146.7 にスケール校正済み).mean は一致するが、実機 SMD 2835 の規格値(~0.2 W)からの物理的整合性は未検証. 4. **スマホホルダの実素材**: 推定 `holder_dark` (0.50).実物確認が必要. -5. **評価 ROI の不一致**: シミュ側は「評価板内側面の中央 256×256 pixel 矩形」で CoV を算出.MiniTias-Evaluation で実測値 CoV=0.0426 を出した際の ROI 設定(位置・形状)と一致しているか未確認. +5. **【最大の差・主因】ISP レンズシェーディング補正によるスケール差**: 実測 PNG は実機 ISP の周辺減光電子補正込み、シミュは線形放射輝度(補正なし).このため **シミュ勾配 24.7% ≫ 実測 6.1%**(実測データ提供側も予測済み).CoV 4 倍差の主因.spp 由来ノイズではなく構造的(「キャリブレーション経過」参照).対策はレンズシェーディング補正の後処理適用. +6. ~~**評価 ROI の不一致**~~(**解消済み**): ROI を実機と物理対応させ(`configs/eval_baseline.yaml` = pixel (24,37,464,450))、`sm-evaluate` は実測 PNG に対し MiniTias-Evaluation と小数点 14 桁レベルで一致を確認済み.評価ロジック起因の差はない. ## 参照(References)