diff --git a/CLAUDE.md b/CLAUDE.md index 3459d95..376a2e0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ ## 開発進捗 -最新: フェーズ 7(実装)— Step 8 基準設計キャリブレーションの **Step 8-14(物理モデル精緻化)** 進行中.[TEST_12](docs/06_TEST/TEST_12_シェーディング法線アーティファクトの発見と修正.md) で **Step 8 残差の支配成分がレンダリングバグ(PLY 自動スムーズ法線 × 評価板の巨大三角形)だったことを発見・修正**(TEST_11 球体筐体実験の完全軸対称化で顕在化,builder に `face_normals: true` を強制).修正後は現行筐体全灯 **CoV 0.1717→0.0610**(実機 0.0695 を下回る)・勾配 6.8%(実機 8.35%)・C/P 1.073(実機 1.091)=**振幅系指標は実機とほぼ整合し,「残差 2.4×」と Y 軸単調勾配の見かけは大半がアーティファクトだったと判明**.球ロフト(CoV 0.0628・完全同心円)は現行筐体と同等=現行筐体はすでに理想積分球級で球形化の優位性なし(TEST_11 の結論は撤回・BEFORE FIX 注記参照).残る差分は「形」(実機の斜め構造,NCC 0.616)で,過去の絶対値ベース結論は要再検証.実機側はロフト w=1.4 版 `MiniTIAS_QM_20260726_183416.dng` が SmTIAS-Evaluation 分析待ち.詳細な経緯・設計判断・失敗パターンは [docs/PROGRESS.md](docs/PROGRESS.md). +最新: フェーズ 7(実装)— Step 8 基準設計キャリブレーションの **Step 8-14(物理モデル精緻化)** 進行中.[TEST_12](docs/06_TEST/TEST_12_シェーディング法線アーティファクトの発見と修正.md) で **Step 8 残差の支配成分がレンダリングバグ(PLY 自動スムーズ法線 × 評価板の巨大三角形)だったことを発見・修正**(TEST_11 球体筐体実験の完全軸対称化で顕在化,builder に `face_normals: true` を強制).修正後は現行筐体全灯 **CoV 0.1717→0.0610**(実機 0.0695 を下回る)・勾配 6.8%(実機 8.35%)・C/P 1.073(実機 1.091)=**振幅系指標は実機とほぼ整合し,「残差 2.4×」と Y 軸単調勾配の見かけは大半がアーティファクトだったと判明**.球ロフト(CoV 0.0628・完全同心円)は現行筐体と同等=現行筐体はすでに理想積分球級で球形化の優位性なし(TEST_11 の結論は撤回・BEFORE FIX 注記参照).単灯再検証(TEST_12 追補)で **TEST_09 中核結論「3 灯同形=非対称相補性を再現できない」も撤回**: 修正後は灯間 NCC(平滑)0.85/0.93/0.73 の非対称で「left-right 最違い」は実機(0.92/0.66/0.44)と一致(振幅・最類似ペアは不一致=残課題).実験4(漏れ点検)の主動機は大幅に弱まり,残る差分は「形」(相補性の振幅・実機の斜め構造)の切り分けへ再設定.実機側はロフト w=1.4 版 `MiniTIAS_QM_20260726_183416.dng` が SmTIAS-Evaluation 分析待ち.詳細な経緯・設計判断・失敗パターンは [docs/PROGRESS.md](docs/PROGRESS.md). 実装済みモジュール: - `src/sm_tias_lightsim/uniformity.py` — Rec.709 輝度変換 + CoV/std/max-min(SmTIAS-Evaluation コピー) diff --git "a/docs/06_TEST/TEST_02_\343\202\267\343\203\237\343\203\245\343\203\254\343\203\274\343\202\267\343\203\247\343\203\263\345\256\237\350\241\214\350\250\230\351\214\262.md" "b/docs/06_TEST/TEST_02_\343\202\267\343\203\237\343\203\245\343\203\254\343\203\274\343\202\267\343\203\247\343\203\263\345\256\237\350\241\214\350\250\230\351\214\262.md" index c368486..4383c7a 100644 --- "a/docs/06_TEST/TEST_02_\343\202\267\343\203\237\343\203\245\343\203\254\343\203\274\343\202\267\343\203\247\343\203\263\345\256\237\350\241\214\350\250\230\351\214\262.md" +++ "b/docs/06_TEST/TEST_02_\343\202\267\343\203\237\343\203\245\343\203\254\343\203\274\343\202\267\343\203\247\343\203\263\345\256\237\350\241\214\350\250\230\351\214\262.md" @@ -77,6 +77,9 @@ | `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/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 追補 | — | — | 単灯形指標(修正前後対比)・灯間 NCC(raw/smooth)・3×3 パネル | `scripts/build_singles_fix_summary.py` の出力 | +| `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 | ### sweep_summary.csv の値(参考、TEST_01 line と一致確認用) @@ -133,6 +136,7 @@ | 球ロフト版評価 (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 --no-bake --screenshot ` + `uv run python scripts/show_led_geometry.py --scene --screenshot ` | | 球ロフト円形光源版レンダ・評価 (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` | ## 過去の整理実績 (Cleanup History) diff --git "a/docs/06_TEST/TEST_09_\347\205\247\346\230\216\345\210\206\345\270\203\343\201\256\345\275\242\344\270\215\344\270\200\350\207\264\343\201\256\345\216\237\345\233\240\345\210\207\343\202\212\345\210\206\343\201\221.md" "b/docs/06_TEST/TEST_09_\347\205\247\346\230\216\345\210\206\345\270\203\343\201\256\345\275\242\344\270\215\344\270\200\350\207\264\343\201\256\345\216\237\345\233\240\345\210\207\343\202\212\345\210\206\343\201\221.md" index 4179775..fa18428 100644 --- "a/docs/06_TEST/TEST_09_\347\205\247\346\230\216\345\210\206\345\270\203\343\201\256\345\275\242\344\270\215\344\270\200\350\207\264\343\201\256\345\216\237\345\233\240\345\210\207\343\202\212\345\210\206\343\201\221.md" +++ "b/docs/06_TEST/TEST_09_\347\205\247\346\230\216\345\210\206\345\270\203\343\201\256\345\275\242\344\270\215\344\270\200\350\207\264\343\201\256\345\216\237\345\233\240\345\210\207\343\202\212\345\210\206\343\201\221.md" @@ -1,5 +1,14 @@ # 照明分布の形不一致の原因切り分け (Shape Mismatch Root-Cause Investigation) +> ⚠️ **BEFORE FIX 注記**: 本ドキュメントの数値はすべて**シェーディング法線アーティファクト +> ([TEST_12](TEST_12_シェーディング法線アーティファクトの発見と修正.md),2026-08-18 修正)込み**である. +> 修正後の単灯再検証(TEST_12 追補)により,中核結論のうち **「シミュは 3 灯がほぼ同形(灯間 NCC +> 0.95x/0.99)=非対称相補性を原理的に再現できない → B1 非対称幾何が唯一の残存候補」は撤回**. +> 高相関は全マップ共通のアーティファクト構造が作った見かけで,修正後のシミュは非対称な相補性を +> 部分的に再現する(left-right が最も異なる点は実機と一致).「Y 軸単調勾配」「単灯 peak/mean +> 1.5〜1.7」等の絶対量も大半がアーティファクト起因.レバー探索の経緯・実機アンカーの定量化の +> 記録として本文を保持する. + 本ドキュメントは,[TEST_08 面光源スケール軸バグ](TEST_08_面光源スケール軸バグの発見と修正.md) の修正後もなお残る**「照明分布の“形”が実機と一致しない」問題**について,原因を実験で切り分けていく継続記録である. > **最優先の判定基準**: 本調査は CoV/勾配などの**数値の絶対量ではなく,実機マップとの「形の一致」**を唯一の判定基準とする.形が一致しない限り「筐体を仮想的に変えて結果を予測する」というツール本来の目的(筐体改善の事前検討)が成立しないため.判定には実機マップを参照とした **NCC/SSIM + 視覚比較 + 放射プロファイル**を用い,peak/mean(中心の尖り具合)を補助指標とする. diff --git "a/docs/06_TEST/TEST_12_\343\202\267\343\202\247\343\203\274\343\203\207\343\202\243\343\203\263\343\202\260\346\263\225\347\267\232\343\202\242\343\203\274\343\203\206\343\202\243\343\203\225\343\202\241\343\202\257\343\203\210\343\201\256\347\231\272\350\246\213\343\201\250\344\277\256\346\255\243.md" "b/docs/06_TEST/TEST_12_\343\202\267\343\202\247\343\203\274\343\203\207\343\202\243\343\203\263\343\202\260\346\263\225\347\267\232\343\202\242\343\203\274\343\203\206\343\202\243\343\203\225\343\202\241\343\202\257\343\203\210\343\201\256\347\231\272\350\246\213\343\201\250\344\277\256\346\255\243.md" index 20e89ea..d0a47fb 100644 --- "a/docs/06_TEST/TEST_12_\343\202\267\343\202\247\343\203\274\343\203\207\343\202\243\343\203\263\343\202\260\346\263\225\347\267\232\343\202\242\343\203\274\343\203\206\343\202\243\343\203\225\343\202\241\343\202\257\343\203\210\343\201\256\347\231\272\350\246\213\343\201\250\344\277\256\346\255\243.md" +++ "b/docs/06_TEST/TEST_12_\343\202\267\343\202\247\343\203\274\343\203\207\343\202\243\343\203\263\343\202\260\346\263\225\347\267\232\343\202\242\343\203\274\343\203\206\343\202\243\343\203\225\343\202\241\343\202\257\343\203\210\343\201\256\347\231\272\350\246\213\343\201\250\344\277\256\346\255\243.md" @@ -87,6 +87,55 @@ - `output/` の修正前出力は歴史的記録として保持([TEST_02](TEST_02_シミュレーション実行記録.md) 冒頭の BEFORE FIX 注記を参照). +## 追補 — 単灯相対結論の再検証 (Addendum: Single-Light Re-verification) + +TEST_09 実験5 の中核結論「シミュは 3 灯がほぼ同形(灯間 NCC 0.95x)=実機の非対称相補性 +(0.85/0.61/0.41)を原理的に再現できない → 残差の唯一の候補は B1 非対称幾何」を, +基準単灯 3 灯(blend w0.05_a0.1・d=16・spp=1024,`configs/_tmp_fix_{bottom,left,right}.yaml`)の +修正後再レンダで再検証した(2026-08-18.ロフト w1p4 系はユーザー判断でスキップ). + +### 灯間 NCC(SIM_ROI・mean 正規化) + +raw マップの NCC はノイズで希釈される(無相関ノイズが相関を 0 方向へ引っ張る.単灯 +spp=1024 はノイズ 5.3% > 構造振幅 3.8〜4.4% でノイズ支配)ため, +平滑化(median 5px + gaussian σ=4)後の構造のみの NCC を正とする: + +| セット | bottom-left | bottom-right | left-right | +| --- | --- | --- | --- | +| 修正前(平滑) | 0.987 | 0.992 | 0.986 | +| **修正後(平滑)** | **0.854** | **0.934** | **0.727** | +| 実機(平滑) | 0.917 | 0.662 | 0.440 | +| (参考)raw: 修正前 / 修正後 / 実機 | 0.888 / 0.363 / 0.853 | 0.891 / 0.392 / 0.606 | 0.869 / 0.329 / 0.414 | + +### 単灯の形(summary.csv 抜粋) + +| 灯 | peak/mean(修正前→修正後) | top/bot(修正前→修正後) | 実機 | +| --- | --- | --- | --- | +| bottom | 1.672 → 1.648 | 0.872 → 0.968 | p/m 1.218・t/b 0.931 | +| left | 1.613 → 1.473 | 0.875 → 0.956 | p/m 1.267・t/b 0.922 | +| right | 1.546 → 1.521 | 0.890 → 0.963 | p/m 1.201・t/b 0.946 | + +※ 修正後の単灯マップはほぼ平坦で raw の peak/mean はノイズスパイク支配.以後の単灯実験は +spp 増強(≥4096)または平滑化後指標を使うこと. + +### 判定 + +1. **「3 灯ほぼ同形」は撤回**: 修正前の高相関(0.99)は全マップ共通のアーティファクト構造が + 作っていた見かけだった.修正後のシミュは灯ごとに明確に異なるフットプリントを持つ. +2. **非対称相補性は部分的に再現される**: 3 ペアの NCC は 0.73〜0.93 と非均等で, + 「left-right が最も異なる」順序は実機(0.44 が最小)と一致する.ただし差の振幅は + 実機(0.92→0.44)より弱く(0.93→0.73),最類似ペアも実機 b-l vs シミュ b-r で異なる. +3. **単灯の平らさ残差は縮小して残る**: top/bot は 0.96 前後で実機(0.92〜0.95)とほぼ整合. + peak/mean の差は残るが raw 指標がノイズ支配のため要再測定(高 spp). +4. **含意**: TEST_09 の「等方な変更では 3 ペアを一様にしか動かせない → 非対称幾何(漏れ・開口) + の検証が必須」という実験4 の主動機は,アーティファクト起因として大幅に弱まった. + 残る差分(相補性の振幅・最類似ペアの並び・実機の斜め構造)の切り分けを優先課題として + 再設定するのが妥当. + +成果物: `output/singles_fix/{bottom,left,right}/`・`output/singles_fix/{summary,pairwise_ncc}.csv` +(raw / smooth 両方を記録,解釈は smooth を正とする)・ +図 `output/_slide_panels/singles_fix_shape_roi.png`・集計 `scripts/build_singles_fix_summary.py`. + ## 再現コマンド (Reproduction) ```powershell diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index c5fb80b..c725aab 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -76,3 +76,4 @@ - **TEST_11 改訂 — 評価板嵌め込み・ロフト一体化版で幾何上限を更新(CoV 床 ≈0.12 を確定)(2026-08-18)**: ユーザー指摘「初版は板が球内に浮いて縁に隙間がある.すっぽり嵌めたい」を受け,① 球を板に貫入させる fit 版(四隅貫通・ROI 四隅に壁が写る難あり,3D 確認のみでレンダ未実施)→ ② Fusion のロフト相当の「板輪郭矩形→球断面円」遷移スカートをスクリプト生成し球お椀と一体化した版(`scripts/generate_sphere_loft_housing.py`,Hermite ブレンドで球側接線連続・板実体に食い込むリムでシール・watertight)へ 2 段階で改訂.結果: CoV 0.135→**0.120**(現行筐体比 -30%)・angular_ratio 0.110 と均一性/対称性は更に向上したが peak/mean は 1.32→1.39 と微増(閉じるほど中央集中がわずかに強まるトレードオフ).**結論は不変=幾何の理想極限でも実機 0.0695 に届かず,残差の本命は非幾何要因(ISP LSC 等)**.運用変更 2 点(ユーザー指示): (a) **幾何変更時はレンダ前に 3D 配置確認→OK 後にレンダ**を必須化(CLAUDE.md 必須ルール追記),(b) **spp は 8192→1024 に統一**(TEST_09/10 との条件統一優先.残留ノイズ 2.3%・CoV 汚染 +0.002 で許容).成果物: `configs/scene_sphere_r100_loft.yaml`,`configs/meshes/球ロフト_r100.stl`,`output/sphere_r100_loft/`,図 `output/_slide_panels/sphere_loft_{shape_roi,relative}.png`(1×4 パネル),記録 [TEST_11 §改訂](06_TEST/TEST_11_球体筐体実験.md). - **TEST_11 追補 — 円形光源(disk)対応と完全軸対称化・発光面形状の不感を確認 (2026-08-18)**: ユーザー指示「光源を矩形でなく円形にして軸上に置きたい」に対応.スキーマの area 光源に `shape: disk`(radius 必須検証付き,rectangle は後方互換)を追加し `lights.py` を rectangle/disk 共通の半幅スケールに一般化(SPEC_02 更新・スケール実寸検証テスト追加・fast 898 件全パス).3D 確認ツール 2 種(sm-visualize マーカー・show_led_geometry)も disk 描画対応.同面積円板(r=1.7662mm=9.8mm² 保存)でレンダした結果,**全指標が矩形版と MC ノイズ内で完全一致**(CoV 0.12047 vs 0.12044)=完全間接キャビティでは発光面形状は不感(TEST_09「Lambertian 壁が光源形状を洗い流す」の再確認)で,矩形 LED の非軸対称性は残差要因でないことを確定.以後は円形光源版を球実験の正準構成とする.成果物: `configs/scene_sphere_r100_loft_disk.yaml`,`output/sphere_r100_loft_disk/`,1×5 比較パネル更新,記録 [TEST_11 §追補](06_TEST/TEST_11_球体筐体実験.md). - **TEST_12 シェーディング法線アーティファクトの発見と修正 — Step 8 残差の支配成分がレンダリングバグと判明 (2026-08-18)**: 完全軸対称化した球実験の輝度マップが同心円にならない違和感(ユーザー指摘)を起点に消去法診断(円形/矩形プレート×浮き球/ロフト筐体の 4 診断=すべて対称,実物評価板のみ非対称,`face_normals=true` で完全対称化)でバグを特定.**原因**: builder の PLY 出力に法線が無く Mitsuba がスムーズ頂点法線を自動生成 → 評価板裏面は巨大三角形 26 枚・全頂点エッジ上で法線が約 47° 傾き,評価面全体が汚染補間される.**修正**: builder で `face_normals: true` を強制(1 行+再発防止テスト).**影響**: 現行筐体全灯 CoV 0.1717→**0.0610**(実機 0.0695 を下回る),勾配 24.7→6.8%(実機 8.35%),C/P 1.328→1.073(実機 1.091)=**Step 8-13 以降の「残差 2.4×」の大半と「Y 軸単調勾配」の見かけはこのアーティファクトだった**.球ロフトは CoV 0.0628・angular_ratio 0.005(完全同心円)で現行筐体とほぼ同等=**現行筐体はすでに理想積分球級の混合性能**(TEST_11 の「球で -30% 改善」も撤回).振幅系指標が実機と揃った今,残る差分は「形」(実機の斜め構造 vs シミュの上端暗,NCC 0.616)に移った.過去の絶対値・形の結論は要再検証,相対比較の結論(ロフト不感・レバー序列)は共有アーティファクトのため方向性は保持見込み(各文書の BEFORE FIX 注記参照).検証手順: 再構成 full_base を修正前コードで保存済み結果と一致確認(CoV 差 1e-4)→ 修正後再レンダで前後差を分離.成果物: `output/{full_base_fix,sphere_r100_loft_disk_fix}/`,図 `output/_slide_panels/sphere_fix_{shape_roi,relative}.png`,記録 [TEST_12](06_TEST/TEST_12_シェーディング法線アーティファクトの発見と修正.md). +- **TEST_12 追補 — 単灯再検証で TEST_09 中核結論「3 灯同形」を撤回・非対称相補性の部分再現を確認 (2026-08-18)**: 基準単灯 3 灯(blend w0.05_a0.1)を修正版で再レンダ(ロフト w1p4 系はユーザー判断でスキップ).灯間 NCC(平滑)は修正前 0.99 均等 → **修正後 0.85/0.93/0.73 の非対称**=「シミュは 3 灯ほぼ同形で非対称相補性を再現できない → B1 非対称幾何が唯一の候補」(TEST_09)はアーティファクトが作った見かけと判明し撤回(TEST_09 冒頭に BEFORE FIX 注記).修正後シミュは「left-right が最も異なる」点で実機(0.92/0.66/0.44)と一致するが,差の振幅は弱く最類似ペアは不一致=実験4(漏れ点検)の主動機は大幅に弱まり,残る課題は相補性の振幅・並びと実機の斜め構造の切り分けに再設定.計測上の学び: 単灯 spp=1024 はノイズ 5.3% > 構造振幅 4% で raw 指標(特に peak/mean・NCC)はノイズ支配 → 灯間 NCC は raw/smooth 併記とし解釈は smooth を正(`pairwise_ncc.csv`),以後の単灯実験は spp≥4096 推奨.成果物: `output/singles_fix/`,`scripts/build_singles_fix_summary.py`,図 `output/_slide_panels/singles_fix_shape_roi.png`,記録 [TEST_12 §追補](06_TEST/TEST_12_シェーディング法線アーティファクトの発見と修正.md).