diff --git a/CLAUDE.md b/CLAUDE.md index a75a2c8..3459d95 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ ## 開発進捗 -最新: フェーズ 7(実装)— Step 8 基準設計キャリブレーションの **Step 8-14(物理モデル精緻化)** 進行中.[TEST_10](docs/06_TEST/TEST_10_後側ロフト変形w1p4実験.md) の**初の幾何変更実験**(後側ロフト,blend w0.05_a0.1・spp=1024・d=16)を全灯ロフト重みスイープ w ∈ {0.5, 1.4, 2.0, 4.0} まで拡張完了.**bottom 単灯 peak/mean 1.672→1.508 と幾何レバーが形を動かすことは初実証**したが,**灯間 NCC は不動=対称なキャビティ拡大では非対称相補性(実機 0.85/0.61/0.41 がアンカー)に近づかず,全灯はロフト重みに実質不感**(CoV 0.170〜0.177 で横ばい,w4.0 のみ微悪化・絶対照度 -29%).実機側はロフト w=1.4 版を印刷し初の実機測定 `MiniTIAS_QM_20260726_183416.dng` を取得済み(SmTIAS-Evaluation 分析待ち=シミュ予測「従来筐体とほぼ同じ」の検証).次は実験4(幾何の漏れ点検=漏れの定量化・開口の閉じテスト).詳細な経緯・設計判断・失敗パターンは [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 注記参照).残る差分は「形」(実機の斜め構造,NCC 0.616)で,過去の絶対値ベース結論は要再検証.実機側はロフト 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 コピー) @@ -80,6 +80,10 @@ - 起動・テスト・lint 等の開発コマンドは `docs/02_ENV/ENV_04_開発コマンド.md` にまとめる.**存在する場合は実行前に必ず参照し,推測でコマンドを試さない** - コマンドが新しく確定・変更された時は同ファイルに反映する(無ければその時点で作成する.`/implement` の Phase 4 でも見直される) +### シミュレーション実験の進め方 + +- **幾何(メッシュ・光源・センサ位置)を変えるシーンは,本番レンダを回す前に必ず 3D で配置確認する**(`sm-visualize --no-bake --screenshot` / `scripts/show_led_geometry.py`).確認画像をユーザーに提示し,位置の OK をもらってからレンダを実行する(2026-08-18 ユーザー指示) + ### 手動確認が必要な作業(自分で完了させないこと) 以下は実装完了後にユーザーへ報告し,確認・実施を依頼すること. diff --git "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" index fd62943..0a5f5c5 100644 --- "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" +++ "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" @@ -138,6 +138,17 @@ - ネットワーク状態を確認.Mitsuba 3 の wheel はサイズが大きい(〜100 MB) - 企業ネットワーク内ではプロキシ設定が必要:`uv` は環境変数 `HTTPS_PROXY` を尊重する +### scalar_rgb variant や ad-hoc スクリプトで `LLVM API initialization failed` が出る + +- `llvm_init.py` の自動探索が働くのは **sm-render 等の CLI が llvm_* variant を要求した場合のみ**. + 以下の 2 ケースでは自動探索が呼ばれず,LLVM がインストール済みでも drjit 自身の探索が + 「jitc_llvm_init(): LLVM API initialization failed」で失敗することがある(2026-08-17 の新規構築マシンで確認): + - `variant: scalar_rgb` のシーンを sm-render で実行する場合(drjit は scalar でも LLVM を初期化しようとする) + - `uv run python` で mitsuba を直接 import する ad-hoc スクリプト +- 対処: コマンド実行前に `$env:DRJIT_LIBLLVM_PATH = 'C:\Program Files\LLVM\bin\LLVM-C.dll'` を明示設定する + (または「DRJIT_LIBLLVM_PATH の設定」セクションの手順で User scope に永続化する). +- LLVM 22.1.8(winget 導入)で llvm_ad_rgb / scalar_rgb とも動作確認済み(明示設定時). + ### `LLVM-C.dll could not be found` エラーが出る - コード側が自動探索を試みるが,LLVM が標準パス以外にインストールされているか, 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 4277fb8..c368486 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" @@ -1,6 +1,8 @@ # シミュレーション実行記録 (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/` が無くてもこのドキュメントだけ読めば「過去にどんな試行があったか・どう再現するか」が辿れる**ことを目的とする. @@ -64,6 +66,17 @@ | `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/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` 現行版が生成) | ### sweep_summary.csv の値(参考、TEST_01 line と一致確認用) @@ -111,6 +124,15 @@ | 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 --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/` | ## 過去の整理実績 (Cleanup History) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 7ea94fc..c5fb80b 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -72,3 +72,7 @@ - **left/right 拡張 (2026-07-14)**: 時間短縮のため縮小グリッド w∈{0.05,0.3}×α∈{0.1,0.6}(+w0.6_a0.1)を left/right 単灯でも実走(8 ジョブ).**「w 単調悪化」は 3 灯共通**(w0.6_a0.1 で left 2.03/right 2.20 まで尖る).3 灯揃う 5 材料条件の灯間 NCC は w に対し一様に低下(0.96→0.92→0.86)するが**常に 3 ペア均等で実機の非対称(0.85/0.61/0.41)に近づかず**=「等方な材料変更は 3 ペアを一様にしか動かせない」をスイープ全域で確認.解析スクリプトは --side 引数で 3 灯対応化. - **TEST_10 後側ロフト変形 w=1.4 実験完了 — 幾何レバーが形を動かすことを初実証・対称変形では相補性は不動 (2026-07-26)**: 実験4 に先行し,ユーザーが Fusion で後側筐体のロフトパラメータを 0.5→1.4 に変えた `後側_w1p4.stl`(下側フレア部 Z=-150〜-86 が外側へ最大 10mm 膨張・体積 +6.3%,LED/評価板側は不変)をシミュで評価.TEST_09 パネルの見た目からユーザーが選定した blend w=0.05・α=0.1(形を壊さない最弱光沢で幾何の効きを残す意図)・spp=1024・d=16 で単灯 3+全灯 2(元メッシュ全灯 blend 基準含む)の 5 レンダ.**結果 ①**: bottom 単灯 peak/mean 1.672→1.508 と明確に平ら化=**筐体幾何が形を動かせることの初実証**(TEST_09 の光源側・材料側レバーはすべて不発だった).ただし left/right は不動で NCC 対実機は 3 灯とも微減.**結果 ②**: 灯間 NCC は 0.95x→0.96x と不動(むしろ同形化)=**対称なキャビティ拡大では実機の非対称相補性(0.85/0.61/0.41)に近づかない**.TEST_09 実験5 の「等方な材料変更では 3 ペアを一様にしか動かせない」が対称幾何変更にも当てはまると判明.**結果 ③**: 全灯 CoV 0.1717→0.1701 でほぼ不変=印刷リスクは低いが期待効果も小.**次への示唆**: 非対称相補性の再現には灯ごとに光路が変わる非対称幾何(開口・仕切り・カバー形状)が必要=実験4(幾何の漏れ点検)の優先度を再確認.失敗パターン: 全灯 config を `_tmp_loft_w1p4/` に置いたら scene_baseline.yaml 由来の相対メッシュパスが config 起点解決で file not found→絶対パス化で解決.成果物: `output/loft_w1p4/`(summary.csv 含む),図 `output/_slide_panels/loft_w1p4_shape_roi.png`,記録 [TEST_10](06_TEST/TEST_10_後側ロフト変形w1p4実験.md). - **TEST_10 拡張 — 全灯ロフト重みスイープで「ロフトは全灯に実質不感」を確定 (2026-07-28)**: ユーザー作成の `後側_{w2p0,w4p0}.stl`(w4.0 は体積 +66%・元外形を Z に 43mm はみ出しスマホ面と交差)を追加し,全灯のみ同条件(blend w0.05_a0.1・spp=1024・d=16)で w ∈ {0.5, 1.4, 2.0, 4.0} をスイープ.CoV 0.170〜0.177・NCC 対実機 0.737〜0.747 で全指標横ばい(最大の w4.0 のみ微悪化)=**ロフト(フレア部の対称な膨らみ)は全灯の均一性・形に対して実質不感なパラメータ**.単灯 bottom で見えた平ら化も全灯合成では消える.副次: w4.0 は絶対照度が -29%(キャビティ拡大で光が薄まる).また実機全灯マップを `MiniTIAS_QM_20260601_124500.dng` から単灯と同一手順で npy 化(CoV=0.0695 で Step 8-13 記録値と一致検証済み,`lightsim/luminance_maps/full_*.npy`)し,4×3 形パネルの full 行を実機込みに拡充.均一性の絶対比較用に各セル max=1.0 の相対輝度パネル(シミュ mean/max 0.64〜0.67 vs 実機 0.899)も追加.解析・パネル生成は `scripts/build_loft_w1p4_panel.py` に集約.実機側: ロフト w=1.4 版を印刷・組込みし初の実機測定 `MiniTIAS_QM_20260726_183416.dng`(全灯・定量モード)を取得済み=SmTIAS-Evaluation での分析待ち(シミュ予測「従来筐体とほぼ同じ」の検証ポイント).記録 [TEST_10 §拡張](06_TEST/TEST_10_後側ロフト変形w1p4実験.md). +- **TEST_11 球体筐体実験完了 — 幾何の理想極限(完全閉球・積分球)でも実機の均一性に届かないことを上限実証 (2026-08-17)**: ユーザー発案「筐体を球体に変えたらどうなるか」を,実機構成にとらわれない理想化実験として設計(評価板のみ現行同位置で共通,他メッシュ全撤去,`scripts/generate_sphere_housing.py` によるスクリプト生成の完全閉球殻 r=100mm,単灯を壁向き配置=評価板への直接光ゼロ,blend w0.05_a0.1・d=16).**結果 ①**: CoV 0.1717→**0.1350**(-21%)・mean/max 0.671→0.756 と改善するが,**実機(0.0695/0.899)には遠く及ばない**=漏れゼロ・完全対称・完全間接の理想積分球ですらこの水準で,筐体幾何の追い込みだけでは実機水準の均一性に到達できないことの上限実証.**結果 ②**: 形は Y 単調勾配→中心対称ドームへ質的変化(angular_ratio 0.352→0.126)だが NCC 対実機はむしろ低下(0.744→0.460)=実機の形は「理想混合の形」と構造的に別物で,実機の平坦さは ISP LSC 等の非幾何要因が本命という推定を補強.残る CoV 0.135 の物理源は R=0.85 の未混合一次照射成分(幾何では消せない).失敗パターン: ① 単灯を壁 5mm 手前に置く案 → path tracer の NEE がほぼ外れ spp=64 で相対ノイズ 89% と実用不能 → 壁 50mm 手前へ移動(直接光ゼロは維持)+spp=8192 で残留 0.79% に解決 / ② ptracer への切替案 → orthographic センサ非対応(sample_direction 未実装,Step 8-12 の知見と同根)で不成立.副次: 新マシンに環境を新規構築(uv・LLVM 22・`uv sync`)し,full_base 再評価で保存済み metrics と完全一致を確認=評価パイプラインのマシン間再現性を実証.成果物: `configs/scene_sphere_r100.yaml`,`output/sphere_r100/`,図 `output/_slide_panels/sphere_r100_{shape_roi,relative}.png`,解析 `scripts/build_sphere_panel.py`,記録 [TEST_11](06_TEST/TEST_11_球体筐体実験.md).次: 実験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).