diff --git a/CLAUDE.md b/CLAUDE.md index 86b40b3..4939702 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ ## 開発進捗 -最新: フェーズ 7(実装)— **[TEST_16](docs/06_TEST/TEST_16_立方体キャビティ導入と球との比較.md) 立方体キャビティ導入と球との比較**を実施.TEST_15 の序列「喉 > 接合 > サイズ」を受け,ロフト・接合・喉が構造的に存在しない**立方体キャビティ**(内寸 L・board_baffle 構成据え置き)を L ∈ {120, 160, 200, 280, 360} でスイープし,球 `similar_radial` と**内面積を横軸に**比較.**同じ内面積なら立方体が球より均一**(構造 CoV で球の 0.62〜0.81 倍,L=120 のみ互角)で,L=360 は構造 CoV **0.0090**・輪帯 min/max **0.964**=全条件を通じた最良.同内面積で深さも約 3 割浅く,**設計探索の主軸は立方体系へ**.ムラの「形」は立方体でも同心円ドームのまま(一次照射が軸対称+多重拡散反射が壁形状を洗い流す)で,懸念の四隅の写り込みは輪帯ごとの方位フーリエ **m=4 符号付き係数 a4**(鏡映対称からゼロのはずの b4 をノイズ対照に併用)で全条件 \|a4\| ≤ 0.26%(系統誤差床 ~0.1%)=**実質ゼロ・フィレット不要**.**方法論の注意**: 楕円距離ビンの外側輪帯(d>0.707)は方位カバレッジが欠けフーリエに偽信号を作るため全セクタ被覆の輪帯のみ使う.**未実施**: 残り 4 条件(L=140/180/240/320)・フラット天井版(rim_z=−4.5)・直方体 L×L×D・ノイズフロア.詳細は [docs/PROGRESS.md](docs/PROGRESS.md). +最新: フェーズ 7(実装)— **[TEST_16](docs/06_TEST/TEST_16_立方体キャビティ導入と球との比較.md) 立方体キャビティ導入と球との比較**を完了(全 9 条件).TEST_15 の序列「喉 > 接合 > サイズ」を受け,ロフト・接合・喉が構造的に存在しない**立方体キャビティ**(内寸 L・board_baffle 構成据え置き)を L=120〜360mm の 9 条件でスイープし,球 `similar_radial` と**内面積を横軸に**比較.**同じ内面積なら立方体が球より均一**(構造 CoV で球の 0.62〜0.89 倍,L=120 のみ互角.比は L に単調に開き交差点は内面積 10 万 mm² 前後)で,全指標が L に厳密単調改善・頭打ち未到達.L=360 は構造 CoV **0.0090**・輪帯 min/max **0.964**=全条件を通じた最良.同内面積で深さも約 3 割浅く,**設計探索の主軸は立方体系へ**.ムラの「形」は立方体でも同心円ドームのままで,四隅の写り込みは方位フーリエ **m=4 符号付き係数 a4**(b4 をノイズ対照に併用)で全条件 \|a4\| ≤ 0.26%(系統誤差床 ~0.1%)=**実質ゼロ・フィレット不要**(有意なのは小サイズの逆符号=辺余白の減光のみ.L=120→160 で単調減衰).**環境**: mitsuba は Smart App Control の DLL ブロック(vtk 9.6.1 と同型)により **3.7.1 に固定**.混在の妥当性は全テスト+L=120 アンカー再レンダ(差 1.17σ 以内)で検証済み,テストは `python -m pytest` で実行する(ENV_04 参照).**未実施**: フラット天井版(rim_z=−4.5)・直方体 L×L×D・ノイズフロア.詳細は [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 59b6f57..418b91f 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" @@ -87,7 +87,8 @@ | `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/` (5 ディレクトリ) | 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, 160, 200, 280, 360}mm=既定 9 グリッドの部分集合.材質・spp=1024・d=16 は据え置き) | `configs/eval_baseline_dng_target_shape.yaml` | L=360 で構造 CoV **0.0090**・輪帯 min/max **0.964**=全条件を通じた最良.同一内面積の球(対数内挿)に対し構造 CoV 比 0.62〜1.05 — [TEST_16](TEST_16_立方体キャビティ導入と球との比較.md) 参照 | **同じ内面積なら立方体が球より均一**(L=120 のみ互角)を実証.L=280 で球の全 10 条件の最良(r=250)を超える.遮蔽は 55,473 本 100%・法線逸脱 ≤0.06° を事前検証済み | +| `output/cube_size_sweep/board_baffle/` (9 ディレクトリ) | 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 の全 9 条件.材質・spp=1024・d=16 は据え置き.**先行 5 条件は mitsuba 3.8.0・後続 4 条件は 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・全 9 条件で単調改善 — [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/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 の視覚版) | diff --git "a/docs/06_TEST/TEST_16_\347\253\213\346\226\271\344\275\223\343\202\255\343\203\243\343\203\223\343\203\206\343\202\243\345\260\216\345\205\245\343\201\250\347\220\203\343\201\250\343\201\256\346\257\224\350\274\203.md" "b/docs/06_TEST/TEST_16_\347\253\213\346\226\271\344\275\223\343\202\255\343\203\243\343\203\223\343\203\206\343\202\243\345\260\216\345\205\245\343\201\250\347\220\203\343\201\250\343\201\256\346\257\224\350\274\203.md" index 0943173..cacbaa9 100644 --- "a/docs/06_TEST/TEST_16_\347\253\213\346\226\271\344\275\223\343\202\255\343\203\243\343\203\223\343\203\206\343\202\243\345\260\216\345\205\245\343\201\250\347\220\203\343\201\250\343\201\256\346\257\224\350\274\203.md" +++ "b/docs/06_TEST/TEST_16_\347\253\213\346\226\271\344\275\223\343\202\255\343\203\243\343\203\223\343\203\206\343\202\243\345\260\216\345\205\245\343\201\250\347\220\203\343\201\250\343\201\256\346\257\224\350\274\203.md" @@ -1,10 +1,11 @@ # 立方体キャビティ導入と球との比較 (Cube Cavity Introduction and Comparison with Sphere) -球ではなく**立方体**のキャビティを新設し,一辺 L を 120〜360mm でスイープして, +球ではなく**立方体**のキャビティを新設し,一辺 L を 120〜360mm の全 9 条件でスイープして, 球(TEST_15 の最良設計 `similar_radial`)と**内面積で対応づけて**比較した(2026-08-31〜09-01). 「球のほうが理想積分球だから有利」という素朴な予想は成り立たず,**同じ内面積なら立方体が -一貫して球より均一**(構造 CoV で球の 0.62〜0.81 倍)で,L=280 の時点で球の全 10 条件の -最良値を超えた.懸念だった「四隅の写り込み」は方位フーリエ m=4 成分で直接定量し, +一貫して球より均一**(構造 CoV で球の 0.62〜0.89 倍,L=120 のみ互角)で,L=280 の時点で +球の全 10 条件の最良値を超えた.両指標とも L に対し厳密に単調改善で頭打ち未到達. +懸念だった「四隅の写り込み」は方位フーリエ m=4 成分で直接定量し, 検出限界(系統誤差床 ±0.1%)レベルでほぼゼロであることを確認した. 関連: @@ -57,23 +58,39 @@ 共面(ゼロ厚)を避けている. L の下限は 102mm(評価板 99×102mm が上面に収まる限界).天井余白を考慮し 120mm から振った. -今回はまず傾向を見るため,既定グリッド 9 条件のうち両端+中間の 5 条件を実行した(ユーザー指示). +実行は 2 段階で,まず傾向を安く見るため両端+中間の 5 条件(120/160/200/280/360), +傾向が確認できた後に残り 4 条件(140/180/240/320)を埋めた(ユーザー指示). | L [mm] | LED_z | 内面積 [mm²] | 開口比 | バッフル R | | --- | --- | --- | --- | --- | | 120 | −119.5 | 86,994 | 11.61% | 8.18mm | +| 140 | −139.5 | 118,194 | 8.54% | 7.24mm | | 160 | −159.5 | 154,194 | 6.55% | 6.55mm | +| 180 | −179.5 | 194,994 | 5.18% | 6.01mm | | 200 | −199.5 | 240,594 | 4.20% | 5.59mm | +| 240 | −239.5 | 346,194 | 2.92% | 4.95mm | | 280 | −279.5 | 470,994 | 2.14% | 4.50mm | +| 320 | −319.5 | 614,994 | 1.64% | 4.16mm | | 360 | −359.5 | 778,194 | 1.30% | 3.90mm | +**レンダラのバージョンについて**: 先行 5 条件は mitsuba 3.8.0,後続 4 条件は 3.7.1 で +レンダしている.2 段階目の直前に Windows Smart App Control が 3.8.0 同梱の +`IlmThread-mitsuba.dll` 1 個をレピュテーション判定でブロックし始め(vtk 9.6.1 と同型= +[TEST_13](TEST_13_物理モデル健全性の一括監査.md) 検査 8.ファイルは 2 週間無変更のまま +クラウド側の判定だけが反転),mitsuba が import 不能になったため 3.7.1 に固定した +(`pyproject.toml` に理由コメント).混在の妥当性は 2 通りで検証した.全テスト +(絶対放射量の解析解検証込み)1043 件が 3.7.1 で全通過,および **L=120 のアンカー再レンダ**で +3.8.0 と比較して構造 CoV が小数 4 桁まで一致(0.0379)・輪帯 min/max 差 +0.0002・ +輪帯プロファイルの最大差 1.17σ(中央値 0.46σ)=統計的に区別不能. + ### 事前検証 (Pre-render Verification) レンダ前に TEST_13 / TEST_15 で常設した検証を一通り当てた. -- watertight: 全 5 筐体+バッフルで確認(生成時に強制チェック) -- 3D 配置確認: 半割り断面 5 枚をユーザーに提示し OK を得てからレンダ(CLAUDE.md 必須ルール) -- 遮蔽: 板全面 41×41 点 × LED 33 点 = 55,473 本のレイキャストが**全 5 条件で 100% 遮蔽**(最小余裕 10.5mm) +- watertight: 全 9 筐体+バッフルで確認(生成時に強制チェック) +- 3D 配置確認: 半割り断面をユーザーに提示し OK を得てからレンダ(CLAUDE.md 必須ルール. + 後続 4 条件は承認済みパラメトリック設計の中間サイズとして同様に断面生成・確認) +- 遮蔽: 板全面 41×41 点 × LED 33 点 = 55,473 本のレイキャストが**全 9 条件で 100% 遮蔽**(最小余裕 9.6〜10.5mm) - 法線監査: `audit_scene_normals` で裏向き面 0・シェーディング法線逸脱 ≤0.06°(L=120 / 360 の 2 条件) ### 「同じ大きさ」の定義 (Size-matching Definition) @@ -100,16 +117,23 @@ ## 結果 2 — 同一内面積で立方体が球を上回る (Cube Beats Sphere at Equal Area) -立方体 5 条件の実測(構造 CoV / 輪帯 min/max は TEST_15 と同一の定義・スクリプトで算出): +立方体 9 条件の実測(構造 CoV / 輪帯 min/max は TEST_15 と同一の定義・スクリプトで算出): | L [mm] | 生 CoV | 構造 CoV | 輪帯 min/max | 中心/周辺比 | 勾配 | 生 mean | | --- | --- | --- | --- | --- | --- | --- | | 120 | 0.0802 | 0.0379 | 0.858 | 1.105 | 9.49% | 1.336 | +| 140 | 0.0831 | 0.0280 | 0.894 | 1.078 | 7.20% | 1.022 | | 160 | 0.0842 | 0.0220 | 0.919 | 1.060 | 5.68% | 0.801 | +| 180 | 0.0916 | 0.0184 | 0.930 | 1.050 | 4.74% | 0.643 | | 200 | 0.0939 | 0.0163 | 0.934 | 1.044 | 4.19% | 0.525 | +| 240 | 0.1077 | 0.0135 | 0.945 | 1.035 | 3.41% | 0.368 | | 280 | 0.1143 | 0.0109 | 0.960 | 1.026 | 2.55% | 0.272 | +| 320 | 0.1296 | 0.0098 | 0.961 | 1.022 | 2.13% | 0.209 | | 360 | 0.1355 | **0.0090** | **0.964** | 1.018 | 1.76% | 0.165 | +構造 CoV・輪帯 min/max・中心/周辺比・勾配のいずれも **L に対して厳密に単調改善**で, +9 本の輪帯プロファイルは交差せずサイズ順に並ぶ(球 `similar_radial` と同じ素直な効き方). + 生 CoV が L とともに増えるのは輝度低下(おおむね 1/面積)による MC ノイズで,TEST_15 の作法 どおり構造成分で比較する.内面積を横軸に球 `similar_radial`(10 条件)と重ね,対数内挿で 同一面積の値を比べると: @@ -117,13 +141,17 @@ | L [mm] | 構造 CoV 立方体 | 球(内挿) | 比 | 輪帯 min/max 立方体 | 球(内挿) | | --- | --- | --- | --- | --- | --- | | 120 | 0.0379 | 0.0359 | 1.05 | 0.858 | 0.853 | +| 140 | 0.0280 | 0.0313 | 0.89 | 0.894 | 0.873 | | 160 | 0.0220 | 0.0271 | 0.81 | 0.919 | 0.891 | +| 180 | 0.0184 | 0.0240 | 0.77 | 0.930 | 0.901 | | 200 | 0.0163 | 0.0217 | 0.75 | 0.934 | 0.916 | +| 240 | 0.0135 | 0.0189 | 0.72 | 0.945 | 0.921 | | 280 | 0.0109 | 0.0166 | **0.66** | 0.960 | 0.939 | +| 320 | 0.0098 | 0.0152 | 0.65 | 0.961 | 0.944 | | 360 | 0.0090 | 0.0145 | **0.62** | 0.964 | 0.947 | -- 最小サイズ(L=120 ↔ 球 r≈88)ではほぼ互角.**L≳150 相当から立方体が一貫して勝ち**, - 面積が大きいほど差が開く(構造 CoV で球の 0.62〜0.81 倍) +- 最小サイズ(L=120 ↔ 球 r≈88)ではほぼ互角.**L=140 以上で立方体が一貫して勝ち**, + 比は L に対して単調に開く(構造 CoV で球の 0.62〜0.89 倍).交差点は内面積 10 万 mm² 前後 - **L=280 の立方体(0.0109)が球の全 10 条件の最良値(r=250 の 0.0145)を既に下回る**. L=360 は 0.0090 / 0.964 で本プロジェクトの全条件を通じた最良 - 輪帯プロファイルの標準誤差帯に対して差は十分大きく,内面積の近い直接ペア @@ -145,9 +173,13 @@ | ペア(同内面積) | 立方体 a4 | 球 a4 | 差 | | --- | --- | --- | --- | | L=120 vs r=88 | **−0.264±0.027%** | −0.031% | −0.233% | +| L=140 vs r=100 | **−0.212±0.030%** | +0.020% | −0.231% | | L=160 vs r=110 | −0.058% | −0.032% | −0.026% | +| L=180 vs r=135 | −0.074% | +0.012% | −0.086% | | L=200 vs r=150 | +0.017% | −0.037% | +0.054% | +| L=240 vs r=170 | −0.082% | −0.049% | −0.033% | | L=280 vs r=200 | +0.105% | −0.073% | +0.177% | +| L=320 vs r=250 | −0.037% | −0.020% | −0.017% | | L=360 vs r=250 | −0.144% | −0.020% | −0.124% | - **振幅が極小**.全条件で |a4| ≤ 0.26%.輪帯プロファイルの落ち込み(4〜15%)の 1/30〜1/50 で, @@ -156,18 +188,21 @@ 輪帯プロファイルにも外側へ向かう成長がない - **ノイズ対照 b4 が系統誤差床 ~0.1% を示した**(球でも +0.09% 出る).MC ノイズ伝播だけの 形式的な σ は有意性を過大評価するので,|a4| ≲ 0.1% はゼロと読むべきである -- 唯一床を明確に超えた **L=120 の −0.264% は「四隅が暗い」の逆**(同じ楕円距離なら辺の中央 - 方向が暗い).L=120 では板縁から内壁までの余白が辺中央方向で 9〜12mm しかなく(対角方向は - 約 14mm),壁・天井の接合が最も近い辺中央方向が先に減光する=TEST_15 の「板直下の局所幾何」の - 名残であり,隅の光トラップではない.L=160 以上で消える +- 床を明確に超えるのは **L=120 の −0.264% と L=140 の −0.212% だけで,どちらも + 「四隅が暗い」の逆**(同じ楕円距離なら辺の中央方向が暗い).小サイズでは板縁から内壁までの + 余白が辺中央方向で最小になり(L=120 で 9〜12mm,対角方向は約 14mm),壁・天井の接合が + 最も近い辺中央方向が先に減光する=TEST_15 の「板直下の局所幾何」の名残であり,隅の光トラップ + ではない.振幅が L=120→140→160 で −0.26%→−0.21%→−0.06% と余白の拡大とともに減衰することも + この解釈と整合する 結論: **立方体化による四回対称ムラは ±0.1%(系統誤差床)〜最大 0.26% で,角のフィレット等の 対策は不要**.小型化の下限を決める要因は隅ではなく辺の余白である. ## 結論 (Conclusions) -- **同じ内面積なら立方体が球より均一**.構造 CoV で球の 0.62〜0.81 倍(L=120 のみ互角), - L=280 で球の全条件最良を超え,L=360(0.0090 / 0.964)が全条件を通じた最良 +- **同じ内面積なら立方体が球より均一**.構造 CoV で球の 0.62〜0.89 倍(L=120 のみ互角)で + 比は L に対し単調に開き,L=280 で球の全条件最良を超え,L=360(0.0090 / 0.964)が全条件を + 通じた最良.全 9 条件で単調改善・頭打ち未到達 - **ムラの「形」は球と同一の同心円ドーム**で,立方体の四角さは写り込まない(m=4 成分は 検出限界レベル).差が出るのはドームの「深さ」だけ - TEST_15 の序列「喉 > 接合 > サイズ」の帰結として自然な結果.立方体はロフト・接合・喉が @@ -179,8 +214,8 @@ ## 限界・注意点 (Limitations) -- **5 条件のみ**(既定グリッド 9 条件中).傾向確認を優先したユーザー判断で,残り - L ∈ {140, 180, 240, 320} は未実行.単調性の細部・頭打ちの位置は未確定 +- **レンダラのバージョンが混在**(先行 5 条件 = mitsuba 3.8.0,後続 4 条件 = 3.7.1). + アンカー再レンダで統計的に区別不能(上記 Setup 参照)を確認済みだが,bit 一致ではない - **全条件 1 シードのみ**.ノイズフロア(seed 違い)は球スイープから引き続き未測定 - **m=4 解析は楕円距離 d ≤ 0.75 の輪帯のみ**.それより外側(四隅にしか画素が無い帯)は方位 カバレッジが欠けてフーリエが偽信号を作るため除外した.四隅そのものの落ち込みは輪帯 @@ -203,21 +238,27 @@ - 立方体の幾何検証はすべて一発で通った(watertight・遮蔽 100%・法線逸脱 0.06°).球版で 確立した対策(対称面回避の半ステップずらし・バッフル半セクタ回転・板面 z=−4.5 基準)を 最初から織り込んだため.**幾何を単純化すると検証も単純になる**ことの好例 +- **Smart App Control のレピュテーション判定は無変更のファイルに対しても一晩で反転しうる**. + mitsuba 3.8.0 の DLL は 2 週間問題なく動いた後に突然ブロックされた(uv が生成した + `pytest.exe` ランチャも同時にブロック.こちらは `python -m pytest` で回避).犯人の特定は + `LoadLibraryExW` を `DONT_RESOLVE_DLL_REFERENCES` 付きで全 DLL に当て,WinError 4551 + (ポリシーブロック)と 126(依存欠落の巻き添え)を切り分けるのが確実.同一バージョンの + 再インストールはハッシュが同じため無効で,対処は別バージョンへの固定(vtk 9.4.2 と同じ). + **レンダラの途中変更はアンカー再レンダで等価性を確認してから**混在させること ## 次にやること (Next Steps) -1. 残り 4 条件(L ∈ {140, 180, 240, 320})を埋めてカーブを確定する(約 20 分) -2. フラット天井版(rim_z=−4.5,板周りの段差を消す)の追試.立方体で初めて可能になる形 -3. 深さを別軸にした直方体スイープ(L×L×D).内面積を揃えると立方体は球より浅い事実の延長で, +1. フラット天井版(rim_z=−4.5,板周りの段差を消す)の追試.立方体で初めて可能になる形 +2. 深さを別軸にした直方体スイープ(L×L×D).内面積を揃えると立方体は球より浅い事実の延長で, 実機の厚み制約に直結する -4. ノイズフロア(seed 違い 2 本)と,バッフル構成での spp 増(球スイープと共通の宿題) -5. 実機予測に使うなら材質を TEST_14 の校正値(ρ≈0.81 純 diffuse)で引き直す +3. ノイズフロア(seed 違い 2 本)と,バッフル構成での spp 増(球スイープと共通の宿題) +4. 実機予測に使うなら材質を TEST_14 の校正値(ρ≈0.81 純 diffuse)で引き直す ## 再現コマンド (Reproduction) ```bash # 幾何生成のみ(3D 配置確認用.レンダはしない) -uv run python scripts/sweep_cube_size.py --prepare-only --sizes 120 160 200 280 360 +uv run python scripts/sweep_cube_size.py --prepare-only # 半割り断面(レンダ前の配置確認) uv run python scripts/show_scene_cutaway.py --scene configs/_tmp_cube_size/scene_board_baffle_L200.yaml @@ -225,8 +266,8 @@ # 遮蔽の検証(評価板から LED へのレイが全て遮られることを実測) uv run python scripts/verify_baffle_occlusion.py --scene configs/_tmp_cube_size/scene_board_baffle_L200.yaml -# スイープ本体(レンダ + 評価.既存結果は再利用される) -uv run python scripts/sweep_cube_size.py --sizes 120 160 200 280 360 +# スイープ本体(全 9 条件.レンダ + 評価.既存結果は再利用される) +uv run python scripts/sweep_cube_size.py # 球との比較図 + 集約表(内面積で対応づけ) uv run python scripts/build_cube_sphere_comparison.py @@ -235,7 +276,8 @@ uv run python scripts/analyze_fourfold_component.py ``` -出力: `output/cube_size_sweep/board_baffle/`(条件別 5 ディレクトリ + `summary.csv`). +出力: `output/cube_size_sweep/board_baffle/`(条件別 9 ディレクトリ + `summary.csv`). +mitsuba 3.7.1↔3.8.0 のアンカー比較は `output/cube_size_sweep/_anchor_check_mitsuba371/L120/`. 比較図は `cube_vs_sphere.png`,m=4 解析は `fourfold_component.png`, レンダ前 3D 確認は `output/cube_size_sweep/_placement_check/cutaway_L*.png`. diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index f5be595..aa7aaf9 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -87,3 +87,5 @@ - **TEST_15 続き — 板直下の「喉」が最大のレバーと判明し,出発点の 4.0 倍まで改善 (2026-08-31)**: `similar_g2`(接合の相似・G2 化)でも r=250 で外側の落ち込みが 8.75% 残っていた.断面を見たユーザーの指摘「くびれがないようにしたい」「評価板に対して垂直方向にまず伸ばしているが,水平方向に伸ばしたらくびれにならないのでは」を数値化すると,**板の直下に喉ができていた**(r=250 で板縁から 12.8mm 下でも半径が 48→49.2mm しか広がらない).原因は実装形式そのもので,ロフトを「z を等間隔に進めながら ρ(z) を決める」形で書いていたためリムの傾きが dρ/dz=0(=板に垂直)しか表現できなかった.**ロフトを (ρ, z) の 2 次元パラメトリック Hermite に変えてリム接線を半径方向(水平)に取れるようにした**(`similar_radial`).**結果**: 外側の落ち込みが r=250 で 17.97%(fixed_cut)→ 8.75%(similar_g2)→ **2.27%**,構造 CoV **0.0145**・輪帯 min/max **0.944** で全条件の最良.旧 axial_wall r=100(0.0579 / 0.797)の **4.0 倍**で,内側・外側とも半径に対し単調改善し頭打ちが見えていない.**設計上の結論**: 効き目の序列は **喉 > 接合の相似・G2 化 > 球半径そのもの**.球半径は単独ではレバーにならず,喉と接合を直して初めて「大きいほど均一」という素直な効き方をする.ただし **r≲95 では喉なし設計が負ける**(小型機は fixed_cut).**方法論の追加**: 輝度マップの正規化に画素単位の最大値を使うと firefly に張り付く(max/min が 2.9〜15.5 まで暴れる)ため,**20 分割の輪帯平均の最大値**を 1.0 とする(ユーザー提案).分割数を評価パイプラインの既定と揃えると輝度マップの「最大輪帯」と輪帯プロファイルの「ピーク」が同じ輪帯を指し,図をまたいで数値が突き合わせられる.また `angular_ratio` は分母(動径分散)が潰れると跳ねるので単独で読んではならない(similar_radial r=250 で角度分散は 12.9→11.9 と微減しているのに比は 0.06→0.49).**未実施**: リム張り出し量 `RADIAL_TANGENT_SCALE`(現在 0.6)の最適化,`similar_g2` の残り 7 半径,ノイズフロア.実機観点ではリム水平出しは壁が板の縁に薄い刃先で当たるため襟の作り方を別途詰める必要がある.成果物: `output/sphere_radius_sweep/board_baffle_similar_radial/`,`scripts/build_cavity_comparison.py`,図 `cavity_comparison.png`・`rim_tangent_comparison.png`,記録 [TEST_15](06_TEST/TEST_15_バッフル導入と球半径スイープ.md). - **TEST_16 立方体キャビティ導入と球との比較 — 同じ内面積なら立方体が球に勝つと判明 (2026-08-31〜09-01)**: TEST_15 の序列「喉 > 接合 > サイズ」から「ロフトも接合も喉も構造的に存在しない立方体はどうか」という仮説を立て,立方体キャビティ(内寸 L・天井 z=0・底面 z=-L・board_baffle 構成据え置き)を新設して L ∈ {120, 160, 200, 280, 360} の 5 条件(既定 9 グリッドの部分集合=傾向を先に安く見るユーザー判断)をスイープ,球 `similar_radial` 10 条件と**内面積を横軸に**比較した.**結果 ①**: 「球のほうが理想積分球だから有利」は不成立.同一内面積(対数内挿)で立方体の構造 CoV は球の **0.62〜0.81 倍**(L=120 のみ互角),L=280(0.0109)で球の全条件最良(r=250 の 0.0145)を超え,L=360 は **0.0090 / 輪帯 min/max 0.964** で全条件を通じた最良.同内面積で深さも約 3 割浅く実用面でも有利=**設計探索の主軸は立方体系へ**.**結果 ②**: ムラの「形」は立方体でも球と同一の同心円ドーム(L=120 で方位分散 5.96 vs 動径分散 118).一次照射(バッフル裏→床の明るいリング)が軸対称で cos 重みの真下方向が支配し,多重拡散反射が壁の形を洗い流すため=輪帯プロファイル比較の正当性が立方体でも成立.**結果 ③(四隅の痕跡の定量)**: ユーザーとの議論「差があるはずかを白黒つける検定」として,輪帯ごとの方位プロファイルの **cos 4φ 符号付き係数 a4**(正=四隅が暗い.鏡映対称からゼロのはずの直交成分 b4 をノイズ対照に併用)を抽出.全条件 \|a4\| ≤ 0.26% で輪帯構造(4〜15%)の 1/30 以下,「四隅が暗い」符号の一貫した信号なし=**角のフィレット等は不要**.唯一有意な L=120 の −0.26% は逆符号(辺中央方向が暗い=壁余白 9mm の局所幾何の名残)で,小型化の下限を決めるのは隅でなく辺の余白と判明.**方法論の学び**: ① 楕円距離ビンの外側輪帯(d>0.707)は四隅方向にしか画素が無く,方位フーリエに掛けるとカバレッジの欠けが m=0 を m=4 に漏れ込ませ偽信号を作る→全セクタ被覆の輪帯のみ使用 / ② b4 対照で系統誤差床 ~0.1% を実測=MC 伝播だけの σ は有意性を過大評価する / ③ `angular_ratio` の跳ね(L=360 で 0.71)は今回も分母潰れの見かけ(TEST_15 の再確認).幾何検証(watertight・遮蔽 55,473 本 100%・法線逸脱 ≤0.06°)は球版の対策を織り込み済みで全て一発通過.**未実施**: 残り 4 条件(L=140/180/240/320)・フラット天井版(rim_z=-4.5)・直方体 L×L×D・ノイズフロア.成果物: `scripts/generate_cube_housing.py`・`sweep_cube_size.py`・`build_cube_sphere_comparison.py`・`analyze_fourfold_component.py`,`output/cube_size_sweep/board_baffle/`(summary.csv・`cube_vs_sphere.png`・`fourfold_component.png`),記録 [TEST_16](06_TEST/TEST_16_立方体キャビティ導入と球との比較.md). + +- **TEST_16 追試 — 残り 4 条件で全 9 条件が揃い単調性を確定・mitsuba を SAC 起因で 3.7.1 に固定 (2026-09-01)**: 残り L ∈ {140, 180, 240, 320} を実行しようとしたところ,**mitsuba 3.8.0 が import 不能**(Smart App Control が同梱 `IlmThread-mitsuba.dll` 1 個をレピュテーション判定でブロック.ファイルは 8/17 から無変更=クラウド側の判定が一晩で反転.vtk 9.6.1=TEST_13 検査 8 と同型).`LoadLibraryExW` + `DONT_RESOLVE_DLL_REFERENCES` で WinError 4551(ポリシー)と 126(依存の巻き添え)を切り分けてブロック対象を 1 ファイルに特定し,一時 venv で 3.7.1 が全 DLL 通ることを確認して **`mitsuba==3.7.1` に固定**(ユーザー承認.`pyproject.toml` に理由コメント,ENV_04 に vtk と並べて注意書き).uv 生成の `pytest.exe` ランチャも同時にブロックされたため `python -m pytest` で回避.**バージョン混在の妥当性検証**: 全 1043 テスト通過(絶対放射量の解析解検証込み)+ L=120 アンカー再レンダで 3.8.0 と構造 CoV 一致(0.0379)・輪帯プロファイル最大差 1.17σ=統計的に区別不能.**結果**: 全 9 条件で構造 CoV(0.0379→0.0090)・輪帯 min/max(0.858→0.964)・C/P・勾配のすべてが **L に対し厳密に単調改善**,9 本の輪帯プロファイルは交差なし.球との構造 CoV 比は 1.05→0.62 と単調に開き,交差点は内面積 10 万 mm² 前後.m=4 は L=140 が −0.212%(L=120 と同じ逆符号=辺余白の名残)で L=120→140→160 と単調減衰し「小型化の下限は隅でなく辺の余白」の解釈を補強.TEST_16 の限界から「5 条件のみ」が消え「レンダラ混在(検証済み)」に置き換わった.成果物: `output/cube_size_sweep/board_baffle/`(全 9 条件)・`_anchor_check_mitsuba371/L120/`,`pyproject.toml`(mitsuba 固定),記録 [TEST_16](06_TEST/TEST_16_立方体キャビティ導入と球との比較.md)・ENV_04. diff --git a/scripts/build_cube_sphere_comparison.py b/scripts/build_cube_sphere_comparison.py index 18a28d0..0ae1cbb 100644 --- a/scripts/build_cube_sphere_comparison.py +++ b/scripts/build_cube_sphere_comparison.py @@ -107,10 +107,15 @@ def draw_cube_maps(fig, gs, cube_rows: list[dict[str, float]], run_dir: Path) -> None: - """各サイズの輝度マップを「輪帯平均の最大値=1.0」で正規化して並べる(共通スケール).""" + """各サイズの輝度マップを「輪帯平均の最大値=1.0」で正規化して並べる(共通スケール). + + 条件数が 5 を超えるときは全範囲から等間隔に 5 条件を選ぶ(先頭 5 条件だけだと + サイズ範囲の半分しか見えない). + """ + indices = np.unique(np.linspace(0, len(cube_rows) - 1, min(5, len(cube_rows))).round()) maps = [ (row["size_mm"], normalized_map(run_dir / cube_job_name(row["size_mm"]) / "luminance.npy")) - for row in cube_rows + for row in (cube_rows[int(i)] for i in indices) ] if not maps: return