# 立方体キャビティ導入と球との比較 (Cube Cavity Introduction and Comparison with Sphere)

球ではなく**立方体**のキャビティを新設し，一辺 L を 120〜360mm の全 10 条件でスイープして，
球（TEST_15 の最良設計 `similar_radial`）と**内面積で対応づけて**比較した（2026-08-31〜09-01）．
「球のほうが理想積分球だから有利」という素朴な予想は成り立たず，**同じ内面積なら立方体が
一貫して球より均一**（構造 CoV で球の 0.62〜0.89 倍，L=120 のみ互角）で，L=280 の時点で
球の全 10 条件の最良値を超えた．両指標とも L に対し厳密に単調改善で頭打ち未到達．
懸念だった「四隅の写り込み」は方位フーリエ m=4 成分で直接定量し，
検出限界（系統誤差床 ±0.1%）レベルでほぼゼロであることを確認した．

関連:

- 前提となる結論と方法論: [TEST_15_バッフル導入と球半径スイープ](TEST_15_バッフル導入と球半径スイープ.md)
- 球実験の起点: [TEST_11_球体筐体実験](TEST_11_球体筐体実験.md)
- 実行記録: [TEST_02_シミュレーション実行記録](TEST_02_シミュレーション実行記録.md)

## 背景・動機 (Motivation)

TEST_15 の結論は「効き目の序列は 板直下の喉 > 接合の相似・G2 化 > 球半径そのもの」だった．
つまり律速はキャビティの大域形状ではなく，評価板まわりの局所幾何である．ここから仮説を立てた．

**立方体にはロフトも接合も存在しない．** 評価板は矩形，立方体の上面も矩形なので，板は上面の
開口にそのまま嵌まる．TEST_15 で苦労した「矩形→円の遷移」「接合の曲率不連続」「板直下の喉」と
いう問題群が**構造的に消える**．しかも立方体の上面は板の縁から外へ広がる水平な天井そのもので，
TEST_15 最良の「リム水平出し」（`similar_radial`）が目指した形と一致する．

一方で立方体は「ランバート光源を壁に置くと壁面照度が一様になる」という球だけが持つ性質を失う．
どちらが勝つかは実際に回さないと分からない——これが実験の主眼である．製作面でも立方体は
3D プリント・組立が容易なはずで，実機化の観点でも意味がある．

## 実験条件 (Setup)

材質・センサ・レンダ設定・LED の面積と radiance・評価板の位置は TEST_15 から一切変更していない．
変えたのは筐体メッシュ（球ロフト → 立方体）と，それに従属する LED の Z・バッフル径だけである．

| 項目 | 値 |
| --- | --- |
| レンダ | spp=1024 / max_depth=16 / 512² / llvm_ad_rgb / path / orthographic (50×52) |
| 内壁材質 | blendbsdf ρ=0.85 / ω=0.05 / α=0.1（TEST_11〜15 と直接比較するため校正値 ρ≈0.81 は不使用） |
| 光源 | 円板 半径 1.7662mm（面積 9.8mm² 保存）・`board_baffle` 構成（底面中心に密着・評価板向き +Z） |
| バッフル | LED の 10mm 手前・板の全点から LED を隠す最小半径 ×1.05・厚み 1mm（TEST_15 と同じ閉形式） |
| 評価 | `configs/eval_baseline_dng_target_shape.yaml`（linear + mean アンカー 207.82） |
| 評価板 | 99×102mm・キャビティ側の面は z=−4.5mm・**全条件で不変** |

### 立方体の幾何 (Cube Geometry)

`scripts/generate_cube_housing.py` で閉ソリッドをスクリプト生成する．上から順に，

1. リム矩形（板輪郭から 1.5mm 内側・z=0）＝球版と同じく板の厚み内に食い込んでシール
2. 天井: z=0 の水平面．リム矩形から内壁正方形（L×L）まで広がる
3. 側壁 4 枚: z=0 から z=−L
4. 底面: z=−L．中心に LED（壁面から 0.5mm 浮かせ・+Z 向き），その 10mm 上にバッフル

天井 z=0 と板照明面 z=−4.5 の間の 4.5mm の窪みは球スイープと同一条件で残した（交絡なし）．
球版と違い**全ての面が平面なので三角形分割は物理（法線・交差）に影響しない**．周方向サンプルは
半ステップずらしてメッシュエッジが XZ / YZ 対称面に乗らないようにし（TEST_15 のすり抜け対策），
矩形の隅には厳密角の頂点を挿入して面取りを防いだ．外面の天板は z=+3 に持ち上げ，内面天井との
共面（ゼロ厚）を避けている．

L の下限は 102mm（評価板 99×102mm が上面に収まる限界）．天井余白を考慮し 120mm から振った．
実行は段階的で，まず傾向を安く見るため両端＋中間の 5 条件（120/160/200/280/360），
傾向が確認できた後に残り 4 条件（140/180/240/320），さらに発表資料の整理時に
球スイープと同数（10 条件）に揃える 10 条件目として L=220 を追加した（いずれもユーザー指示）．

| 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 |
| 220 | −219.5 | 290,994 | 3.47% | 5.24mm |
| 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，後続 5 条件（140/180/220/240/320）は 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: 全 10 筐体＋バッフルで確認（生成時に強制チェック）
- 3D 配置確認: 半割り断面をユーザーに提示し OK を得てからレンダ（CLAUDE.md 必須ルール．
  後続 4 条件は承認済みパラメトリック設計の中間サイズとして同様に断面生成・確認）
- 遮蔽: 板全面 41×41 点 × LED 33 点 = 55,473 本のレイキャストが**全 10 条件で 100% 遮蔽**（最小余裕 9.6〜10.5mm）
- 法線監査: `audit_scene_normals` で裏向き面 0・シェーディング法線逸脱 ≤0.06°（L=120 / 360 の 2 条件）

### 「同じ大きさ」の定義 (Size-matching Definition)

球と立方体の比較では「同じ大きさ」の定義が自明でない．多重反射の理論では放射輝度は総内面積と
開口比で決まるため，**内面積を揃える**解釈を採用した（積分球としての比較）．スイープ自体は
キリの良い L で振り，比較は内面積を横軸にした曲線の重ね描き＋対数内挿で行う．
なお内面積を揃えると立方体は球より**深さが約 3 割浅い**（球は中心が板から −0.92r 下にあるため
縦に長い．例: 球 r=250 は深さ 480mm，同内面積の立方体は 341mm）．

## 結果 1 — 立方体でもムラの「形」は同心円ドームのまま (Shape Stays Concentric)

立方体化しても輝度分布は球と同じ**同心円状のドーム**で，四角い模様は現れない．
極座標分解では L=120 で動径分散 118 に対し方位分散 5.96（angular_ratio 0.048）＝構造の
95% 以上が同心円成分で，球（r=88 で 116 vs 4.0）と同じ内訳である．

理由は 3 つ．① `board_baffle` 構成の一次照射（バッフル裏 → 床の明るいリング）が軸対称で，
板の照度は cos 重みで真下方向が支配するため，1 バウンス目の分布が筐体形状によらず軸対称になる．
② ρ=0.85 の多重拡散反射が 2 バウンス目以降の放射を等方化し，壁の形の情報を洗い流す．
③ 仮に板縁基準の成分があっても，その等高線が四角く見えるのは四隅の近傍だけである．

これは TEST_15 の「効くのは板直下の局所幾何であって大域形状ではない」の裏返しの確認であり，
**輪帯（方位平均）プロファイルによる比較が立方体に対しても正当**であることを意味する．

## 結果 2 — 同一内面積で立方体が球を上回る (Cube Beats Sphere at Equal Area)

立方体 10 条件の実測（構造 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 |
| 220 | 0.1026 | 0.0147 | 0.944 | 1.039 | 3.78% | 0.437 |
| 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 に対して厳密に単調改善**で，
10 本の輪帯プロファイルは交差せずサイズ順に並ぶ（球 `similar_radial` と同じ素直な効き方）．

生 CoV が L とともに増えるのは輝度低下（おおむね 1/面積）による MC ノイズで，TEST_15 の作法
どおり構造成分で比較する．内面積を横軸に球 `similar_radial`（10 条件）と重ね，対数内挿で
同一面積の値を比べると:

| 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 |
| 220 | 0.0147 | 0.0201 | 0.73 | 0.944 | 0.920 |
| 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=140 以上で立方体が一貫して勝ち**，
  比は L に対して単調に開く（構造 CoV で球の 0.62〜0.89 倍）．交差点は内面積 10 万 mm² 前後
- **L=280 の立方体（0.0109）が球の全 10 条件の最良値（r=250 の 0.0145）を既に下回る**．
  L=360 は 0.0090 / 0.964 で本プロジェクトの全条件を通じた最良
- 輪帯プロファイルの標準誤差帯に対して差は十分大きく，内面積の近い直接ペア
  （L=120↔r=88 / L=200↔r=150 / L=360↔r=250）でもどの距離帯でも立方体の曲線が上にある
- 内側・外側とも L に対して単調改善で頭打ち未到達（球 `similar_radial` と同じ傾向）

つまり **ムラの「形」は球と同じで，「量」（ドームの深さ）が 2〜4 割浅い**．TEST_15 で球側に
施した改良（喉の除去・リム水平出し）は，立方体では最初から構造的に備わっている形であり，
それを上回った事実は「球固有の等照度性より，板まわりの局所幾何の素直さが効く」ことを示す．

## 結果 3 — 四隅の痕跡は検出限界以下 (No Four-fold Imprint)

立方体固有の懸念「四隅が暗くなる」を，輪帯ごとの方位プロファイルの **cos 4φ 成分（m=4）**で
直接定量した（`scripts/analyze_fourfold_component.py`）．四回対称の構造は対称性から m=4 にしか
現れず，板は鏡映対称なので信号は板軸に揃った符号付き係数 a4（正＝四隅が暗い）だけに出る．
直交成分 b4 は対称性からゼロのはずで，**生きたノイズ対照**になる．球側の a4 は評価系
（長方形 ROI・楕円ビン・ノイズ）が作る背景値を与える．

| ペア（同内面積） | 立方体 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=220 vs r=150 | −0.004% | −0.037% | +0.033% |
| 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 で，
  均一性への実害としては無視できる
- **「四隅が暗い」符号（a4 > 0）の一貫した信号は無い**．符号はサイズに対してばらつき，
  輪帯プロファイルにも外側へ向かう成長がない
- **ノイズ対照 b4 が系統誤差床 ~0.1% を示した**（球でも +0.09% 出る）．MC ノイズ伝播だけの
  形式的な σ は有意性を過大評価するので，|a4| ≲ 0.1% はゼロと読むべきである
- 床を明確に超えるのは **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.89 倍（L=120 のみ互角）で
  比は L に対し単調に開き，L=280 で球の全条件最良を超え，L=360（0.0090 / 0.964）が全条件を
  通じた最良．全 9 条件で単調改善・頭打ち未到達
- **ムラの「形」は球と同一の同心円ドーム**で，立方体の四角さは写り込まない（m=4 成分は
  検出限界レベル）．差が出るのはドームの「深さ」だけ
- TEST_15 の序列「喉 > 接合 > サイズ」の帰結として自然な結果．立方体はロフト・接合・喉が
  構造的に存在せず，最良設計『リム水平出し』の形を最初から備えている
- **実用面でも立方体が有利**．同内面積で深さが約 3 割浅く（球 r=250: 480mm vs L=341mm），
  平面のみで製作も容易．設計探索の主軸は今後立方体系に移してよい
- 絶対輝度は面積にほぼ反比例して落ちる（L=360 は L=120 の 1/8）．均一性・寸法・明るさの
  三つ巴の trade-off は球と同様に残る

## 限界・注意点 (Limitations)

- **レンダラのバージョンが混在**（先行 5 条件 = mitsuba 3.8.0，後続 4 条件 = 3.7.1）．
  アンカー再レンダで統計的に区別不能（上記 Setup 参照）を確認済みだが，bit 一致ではない
- **全条件 1 シードのみ**．ノイズフロア（seed 違い）は球スイープから引き続き未測定
- **m=4 解析は楕円距離 d ≤ 0.75 の輪帯のみ**．それより外側（四隅にしか画素が無い帯）は方位
  カバレッジが欠けてフーリエが偽信号を作るため除外した．四隅そのものの落ち込みは輪帯
  プロファイルの動径成分（min/max）に計上されており，取りこぼしではない
- 天井の 4.5mm の窪み（板周りの段差）は球と条件を揃えるため残した．立方体では完全に平らな
  天井（rim_z=−4.5）にでき，未検証の改善余地がある
- 材質は校正値（ρ≈0.81 純 diffuse）ではなく旧条件（ρ=0.85 blendbsdf）．TEST_11〜15 と直接
  比較するための選択で，絶対値の実機予測には引き直しが必要
- `board_baffle` は実機の LED 配置（下/左/右 3 基板）とは無関係な理想化である点も球と同じ

## 失敗パターン・方法論の学び (Pitfalls and Methodology)

- **楕円距離ビンの外側輪帯に方位フーリエを当ててはならない**．d > 0.707（辺中点）の輪帯は
  四隅方向にしか画素が無く，カバレッジの欠けが m=0（平均）を m=4 に漏れ込ませて巨大な偽信号を
  作る．全セクタに画素がある輪帯だけを使うこと
- **対称性からゼロのはずの直交成分（b4）をノイズ対照として同時に計算する**と，MC ノイズ以外の
  系統誤差床（今回 ~0.1%）が実測でき，形式的な σ による有意性の過大評価を防げる
- **`angular_ratio` の跳ね上がり（L=360 で 0.71）は今回も見かけ**．分母の動径分散が 118→7.1 に
  潰れたためで，方位分散の絶対値（6→17，mean 比 ~2%）で読むこと（TEST_15 の再確認）
- 立方体の幾何検証はすべて一発で通った（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. フラット天井版（rim_z=−4.5，板周りの段差を消す）の追試．立方体で初めて可能になる形
2. 深さを別軸にした直方体スイープ（L×L×D）．内面積を揃えると立方体は球より浅い事実の延長で，
   実機の厚み制約に直結する
3. ノイズフロア（seed 違い 2 本）と，バッフル構成での spp 増（球スイープと共通の宿題）
4. 実機予測に使うなら材質を TEST_14 の校正値（ρ≈0.81 純 diffuse）で引き直す

## 再現コマンド (Reproduction)

```bash
# 幾何生成のみ（3D 配置確認用．レンダはしない）
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

# 遮蔽の検証（評価板から LED へのレイが全て遮られることを実測）
uv run python scripts/verify_baffle_occlusion.py --scene configs/_tmp_cube_size/scene_board_baffle_L200.yaml

# スイープ本体（全 9 条件．レンダ + 評価．既存結果は再利用される）
uv run python scripts/sweep_cube_size.py

# 球との比較図 + 集約表（内面積で対応づけ）
uv run python scripts/build_cube_sphere_comparison.py

# 四隅の痕跡の定量（m=4 成分）
uv run python scripts/analyze_fourfold_component.py
```

出力: `output/cube_size_sweep/board_baffle/`（条件別 10 ディレクトリ + `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`．

## 参照 (References)

- [TEST_15_バッフル導入と球半径スイープ](TEST_15_バッフル導入と球半径スイープ.md): `board_baffle` 構成・評価の作法・球側の全データ
- [TEST_14_材質パラメータ再スイープと残差の構造分解](TEST_14_材質パラメータ再スイープと残差の構造分解.md): 材質の確定と「形は材質で動かない」の実証
- [TEST_02_シミュレーション実行記録](TEST_02_シミュレーション実行記録.md): 出力ディレクトリの索引
- [SPEC_03_基準設計の物理構成](../04_SPEC/SPEC_03_基準設計の物理構成.md): 座標系と評価板の物理仕様
