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 9d68d3a..c0b0a69 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" @@ -92,6 +92,7 @@ | `output/offaxis_led_sweep/` (10 ディレクトリ) | TEST_17 | `configs/_tmp_offaxis/scene_offaxis_*.yaml`(`scripts/sweep_offaxis_led.py` が生成.LED を**深さ方向軸の中点の高さ・+X 側の壁面**に置き板中心 (0,0,-4.5) へ向けた board_baffle 構成.球 similar_radial r ∈ {88, 100, 135, 170, 250} + 立方体 L ∈ {120, 160, 200, 280, 360}.バッフルは視線上 10mm・数値サイジング.材質・spp=1024・d=16 据え置き・mitsuba 3.7.1) | `configs/eval_baseline_dng_target_shape.yaml` | m=1 符号付き a1 が全条件で負(LED 側が暗い)= -1.6〜-7.2%.サイズとともに約 4 割まで減衰.位置ずれの Δ構造CoV は球 ±0.006 以内・立方体 +0.010〜+0.033 — [TEST_17](TEST_17_オフ軸LED配置の影響とサイズ依存.md) 参照 | **オフ軸頑健性は球 > 立方体(軸上と逆転)**を実証.遮蔽は全 10 条件 55,473 本 100%(傾き追従の LED サンプルに一般化済み) | | `output/offaxis_led_sweep/{summary.csv,offaxis_comparison.png}`・`_placement_check/cutaway_*.png` | TEST_17 | — | — | 条件別集約 CSV/解析図(輝度マップ 2 行 + a1・重心・構造 CoV の内面積依存を軸上と重ね描き)/レンダ前 3D 確認の半割り断面 10 枚 | `scripts/build_offaxis_comparison.py`・`show_scene_cutaway.py` の出力.レンダ前 3D 確認(CLAUDE.md 必須ルール)の記録を兼ねる | | `output/led_placement_sweep/` (255 ディレクトリ) | TEST_18 | `configs/_tmp_led_placement/scene_*.yaml`(`scripts/sweep_led_placement.py` が生成.同内面積ペア 球 r ∈ {100,135,170,250} ↔ 立方体 L ∈ {141,187,234,340} で,LED をキャビティ中心から見た極角 θ=0〜120°(13 段階)に置く位置スイープ・θ=60/90/120° の向き 3 通り(板向き+バッフル/壁法線向き+バッフル/真下向き)・θ=90° の輪に N=1〜4 灯(総光束保存)・seed 違いの再レンダ,追加実験の方位角 φ=15〜40°(立方体)と真下向き N=2/4/8 灯.材質・spp=1024・d=16 据え置き.Newton cuda_ad_rgb・mitsuba 3.7.1・`--workers 2` で 1 条件 5〜6 秒) | `configs/eval_baseline_dng_target_shape.yaml` | 配置依存の幅(θ 全域の構造 CoV max−min)は球 0.015〜0.023・立方体 0.025〜0.071.球は θ≈30° が軸上より均一(r=170: 0.0193→0.0057).対向 2 灯で構造 CoV 0.005〜0.010 と形状差が消える.真下向きはバッフル無しで板向きと同等 — [TEST_18](TEST_18_照明配置依存性の球と立方体の比較.md) 参照 | **配置依存は球が立方体の 1/2〜1/3**(仮説成立).図なし評価(`--no-figures`)なので各条件に figures/ は無い.`row.json` が条件ごとの集約行(並列・再開用) | +| `output/led_placement_sweep_rho081/` (60 ディレクトリ + 解析出力) | TEST_18 | `configs/_tmp_led_placement_rho081/scene_*.yaml`(`sweep_led_placement.py --material calibrated --key-subset` が生成.内壁を TEST_14 の校正材質 純 diffuse ρ=0.81 に置き換えた主要 60 条件=位置スイープ ペア 1・3,多灯 N=2/4・真下向き ペア 3) | 同上 | 配置依存の幅 球 0.030 vs 立方体 0.077〜0.098.軸上は両形状とも大きく改善(旧材質の光沢が作るリングが消える)— [TEST_18](TEST_18_照明配置依存性の球と立方体の比較.md) 結果 7 | 主結論が材質に依らないことの確認.解析は `build_led_placement_comparison.py --material calibrated` | | `output/led_placement_sweep/{summary.csv,analysis.csv,position_summary.csv,position_sensitivity.png,position_maps.png,direction_comparison.png,count_comparison.png,azimuth_comparison.png,ring_comparison.png,analysis_report.txt}`・`_placement_check/cutaway_*.png` | TEST_18 | — | — | 条件別集約 CSV/方位フーリエ m=1〜4・構造 CoV・重心の解析 CSV/位置・向き・灯数・方位角・真下向き多灯の解析図 6 枚/レンダ前 3D 確認の半割り断面 23 枚 | `scripts/build_led_placement_comparison.py`・`show_scene_cutaway.py` の出力.レンダ前 3D 確認(CLAUDE.md 必須ルール)の記録を兼ねる | | `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_18_\347\205\247\346\230\216\351\205\215\347\275\256\344\276\235\345\255\230\346\200\247\343\201\256\347\220\203\343\201\250\347\253\213\346\226\271\344\275\223\343\201\256\346\257\224\350\274\203.md" "b/docs/06_TEST/TEST_18_\347\205\247\346\230\216\351\205\215\347\275\256\344\276\235\345\255\230\346\200\247\343\201\256\347\220\203\343\201\250\347\253\213\346\226\271\344\275\223\343\201\256\346\257\224\350\274\203.md" index 1aca7b7..3f544e1 100644 --- "a/docs/06_TEST/TEST_18_\347\205\247\346\230\216\351\205\215\347\275\256\344\276\235\345\255\230\346\200\247\343\201\256\347\220\203\343\201\250\347\253\213\346\226\271\344\275\223\343\201\256\346\257\224\350\274\203.md" +++ "b/docs/06_TEST/TEST_18_\347\205\247\346\230\216\351\205\215\347\275\256\344\276\235\345\255\230\346\200\247\343\201\256\347\220\203\343\201\250\347\253\213\346\226\271\344\275\223\343\201\256\346\257\224\350\274\203.md" @@ -4,9 +4,11 @@ オフ軸配置では球のほうが頑健」と分かった.本実験は「積分球が使われる理由は照明配置への 依存が小さいからではないか」というユーザーの仮説を,**LED の位置(極角 θ を 0〜120° で 13 段階)・向き(3 通り)・個数(1〜4 灯)** を系統的に振って検証した(2026-09-14). -仮説は成立した.**球の配置依存は同内面積の立方体の 1/2〜1/3** で,しかも球は軸上より -少しずらした位置(θ≈30°)のほうが均一になる.立方体の優位は軸上の 1 点に限られる. -一方,**対向 2 灯以上の対称配置にすると形状差はほぼ消え**,どちらも単灯軸上より均一になる. +仮説は成立した.**球の配置依存は同内面積の立方体の 1/2〜1/3** で,立方体の優位は軸上の +1 点に限られる.一方,**対向 2 灯以上の対称配置にすると形状差はほぼ消え**,どちらも単灯軸上より +均一になる.校正材質(純 diffuse ρ=0.81)で主要条件を引き直しても(結果 7)この結論は変わらない. +※ 旧材質(光沢 5% の blendbsdf)では「球は軸上より θ≈30° が均一」に見えたが,これは光沢成分が +作る軸上のリング構造によるもので,校正材質では両形状とも軸上が最良になる. 関連: @@ -82,9 +84,10 @@ 構造 CoV も全ペアで立方体が悪い(1.5〜2.1 倍) - **立方体は θ とともに単調に悪化**し,板の直下(θ=120°)で軸上の 3.4〜5.0 倍.底面上 (θ≤40°)でも a1 は既に −2〜−6% ある(平らな床に置いた LED は近い側壁を強く照らす) -- **球は軸上が最良ではない**.θ=20〜40° で構造 CoV が最小(r=170: 0.0193 → 0.0057, - r=250: 0.0145 → 0.0043)になり,軸上の同心円状のリング構造(TEST_15 のドーム)が - 崩れて平坦になる.θ≥90° で軸上と同程度に戻り,最悪でも軸上の 1.0〜1.7 倍 +- **球は(旧材質では)軸上が最良ではない**.θ=20〜40° で構造 CoV が最小(r=170: 0.0193 → + 0.0057,r=250: 0.0145 → 0.0043)になり,軸上の同心円状のリング構造(TEST_15 のドーム)が + 崩れて平坦になる.θ≥90° で軸上と同程度に戻り,最悪でも軸上の 1.0〜1.7 倍. + **ただしこのリング構造は旧材質の光沢成分が作るもので,校正材質では消える**(結果 7) - 立方体の軸上の優位(TEST_16)は確認できる(ペア 2〜4 で球の 0.66〜0.77 倍)が, **軸上の 1 点だけ**であり,θ=10° でも立方体は a1 が −1.7〜−2.5% 出る - a1 の符号: 球は θ=10〜20°(r≥135)で **正**(LED 側が明るい)になり,θ が大きくなると @@ -179,11 +182,37 @@ - 小さい立方体(L=141)は真下向きだと N=8 でも 0.019 と悪い.壁際で下を向いた LED が 床の隅を強く照らすため +## 結果 7 — 校正材質(純 diffuse ρ=0.81)でも結論は変わらない (Calibrated Material) + +TEST_14 で確定した内壁材質(純 diffuse ρ=0.81.旧材質は blendbsdf ρ=0.85・光沢 5%)で +主要 60 条件(位置スイープをペア 1・3,多灯 N=2/4・真下向きをペア 3)を引き直した +(`output/led_placement_sweep_rho081/`). + +| 位置スイープ(θ 全域) | 旧材質 → 校正材質 | +| --- | --- | +| 球 r=100: 軸上 / 平均 / 幅 / max\|a1\| | 0.0311 / 0.0244 / 0.0153 / 4.1% → **0.0117** / 0.0267 / 0.0296 / 5.7% | +| 球 r=170 | 0.0193 / 0.0164 / 0.0232 / 3.8% → **0.0039** / 0.0172 / 0.0298 / 4.5% | +| 立方体 L=141 | 0.0280 / 0.0513 / 0.0671 / 9.6% → 0.0199 / 0.0522 / 0.0975 / 11.3% | +| 立方体 L=234 | 0.0139 / 0.0293 / 0.0514 / 8.3% → **0.0056** / 0.0294 / 0.0773 / 10.8% | + +- **配置依存の幅は球 0.030 vs 立方体 0.077〜0.098(2.6〜3.3 倍),max\|a1\| は 4.5〜5.7% vs + 10.8〜11.3%(2〜2.4 倍)で,球の優位はむしろ広がる**(ρ が下がり多重反射の混合が弱まる分, + 立方体の劣化が大きい) +- **軸上の構造 CoV は両形状で大きく下がる**(球 r=170: 0.0193 → 0.0039,立方体 L=234: + 0.0139 → 0.0056).旧材質の軸上にあったリング構造は光沢 5% の roughconductor 成分が作って + いたもので,純 diffuse では消える.その結果,**校正材質では両形状とも軸上が最良**になり, + 球の「θ≈30° が最良」は消える(r=170: θ=0° 0.0039 → 30° 0.0075 → 90° 0.0250). + オフ軸の悪化は球のほうが緩やか(θ=90° で軸上の 6 倍 vs 立方体 7 倍,絶対値で 0.025 vs 0.039) +- **多灯は材質に依らない**: 対向 2 灯・4 灯(板向き)は球 0.0057/0.0039,立方体 0.0055/0.0053, + 真下向き 4 灯は球 0.0079・立方体 0.0116 と旧材質と同じ水準 +- 生 mean は ρ の低下で約 30% 暗くなる(絶対輝度は校正材質の値を使うこと) + ## 結論 (Conclusions) -- **仮説成立**: 照明位置への依存は球が同内面積の立方体の 1/2〜1/3.球は軸上より θ≈30° - のほうが均一で「どこに置いてもそこそこ」,立方体は軸上の 1 点だけが良く,板に近づく - ほど急激に悪化する +- **仮説成立**: 照明位置への依存は球が同内面積の立方体の 1/2〜1/3(校正材質では 1/2.6〜1/3.3). + 球は「どこに置いてもそこそこ」,立方体は軸上の 1 点だけが良く,板に近づくほど急激に悪化する. + 旧材質で見えた「球は θ≈30° が軸上より均一」は光沢成分によるもので,校正材質では両形状とも + 軸上が最良 - **向き**: 板と反対(真下)に向ければバッフル無しで板向きバッフル構成と同等. キャビティ中心へ向ける(壁法線向き)のは最悪 - **個数**: 対向 2 灯以上の対称配置で形状差は消え,どちらも単灯軸上より均一.立方体は @@ -200,7 +229,8 @@ - 方位角は結果 5 で θ=90° の 1 灯だけ測った.N=3 の方位依存・θ を変えた方位依存は未測定 - 壁法線向きのバッフルはキャビティ寸法の 5〜44% と大きく,実物の設計として妥当かは別問題 (結果は「その向きに置くと大きなバッフルが要る」ことも含めた評価) -- 材質は旧条件(ρ=0.85 blendbsdf).絶対値の実機予測には校正値での引き直しが必要 +- 主実験は旧材質(ρ=0.85 blendbsdf).校正材質での引き直しは主要 60 条件のみ(結果 7). + 絶対輝度の実機予測には校正材質の値を使う - 真下向きの球 θ=60° は発光面の半分が壁を向く(発光方向と壁法線が 120°).物理的には 「壁際に伏せた LED」で成立するが,実装の都合で選んだ向きである @@ -219,7 +249,7 @@ ## 次にやること (Next Steps) 1. a1 の符号反転(球 θ=10〜20°)の機構の確認(一次照射キャップの位置) -2. 校正材質(ρ≈0.81 純 diffuse)での引き直し(代表条件だけでも結論が変わらないか) +2. 校正材質での全条件の引き直し(主要 60 条件では結論不変を確認済み.向き・方位角・N=8 は未) 3. 直方体 L×L×D(深さだけ変える)と天井を平らにした球(TEST_17 の宿題) 4. 真下向き多灯の頭打ちを解く配置(LED を少し上向き/板側の壁の反射率を上げる等) @@ -232,6 +262,8 @@ --output output/led_placement_sweep/_placement_check/cutaway_cube_L234_th090_board_n4.png # スイープ本体(研究室サーバ・GPU 1 枚・2 並列.1 条件 5〜6 秒) +# 校正材質で主要条件だけ: ... -- python scripts/sweep_led_placement.py --material calibrated --key-subset --workers 2 +# → uv run sm-remote pull led_placement_sweep_rho081 → build_led_placement_comparison.py --material calibrated uv run sm-remote push uv run sm-remote run --name place --gpu 0 --threads 16 -- python scripts/sweep_led_placement.py --workers 2 uv run sm-remote pull led_placement_sweep diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 0f4318e..05b9f62 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -101,4 +101,4 @@ - **スイープの高速化 — レンダ/評価の関数化・プロセス内実行・cuda 遮蔽検証・2 並列 (2026-09-14)**: ユーザー指示「効率化を先に」を受け,`scripts/profile_sweep_step.py` で 1 条件の内訳を実測してから手を入れた.**計測結果**: GPU のレンダ本体(spp=1024・512²)が 4.4〜5.2 秒で床.その上に `uv run sm-render`/`sm-evaluate` の起動・import・YAML・PLY 書き出しで約 2.5 秒,図の描画で約 2 秒,さらに遮蔽検証を YAML の llvm で回していたため球で約 25 秒(頂点 21 万個のメッシュを CPU で読み直す)が乗り,球 1 条件 40 秒・立方体 13 秒だった.**対策**: ① `sm-evaluate`/`sm-render` の本体を `evaluation/pipeline.py:evaluate_image`・`render/pipeline.py:render_yaml` に関数化し CLI は引数パースと例外変換だけに(CLI 挙動は不変)/ ② `--no-figures`(`save_figures=False`)/ ③ `runner.ensure_variant` を切り出し,遮蔽検証の前に cuda を確定(25 秒 → 0.5 秒)/ ④ スイープはサブプロセスをやめプロセス内で呼ぶ / ⑤ `--workers N`(spawn のプロセスプール).**実測**: 立方体 13 → 5.5 秒,球 40 → 約 6 秒.`--workers` は GPU 律速のため 1→5.5・2→5.0・3→4.5〜5.8 秒でほぼ変わらず,**2 を推奨**(CPU 側処理を隠す分だけ).残り 75 条件が 8 分で終わった.**発見**: 同一 seed の再レンダは集計指標が 4 桁まで一致し(画素はノイズ程度に変わるが集計で消える)ノイズフロアにならない → `RenderConfig.seed` を追加し `mi.render` に渡す(再現性条件は rep ごとに seed を変えた YAML).`/implement` の 4 フェーズ(coder → tester 101 件追加 → refactorer → docs)を,ユーザー就寝中の指示に基づき Phase 1 の動作確認をサーバ実走で代行して完走.GPU は 0 番のみ使用(ユーザー指示). -- **TEST_18 照明配置依存性の球と立方体の比較 — 配置依存は球が立方体の 1/2〜1/3 (2026-09-14)**: ユーザーの仮説「積分球が使われる理由は照明配置への依存が小さいから」を,同内面積 4 ペア(球 r=100/135/170/250 ↔ 立方体 L=141/187/234/340)で **LED の位置(キャビティ中心から見た極角 θ=0〜120° を 13 段階)・向き(板向き+バッフル/壁法線向き+バッフル/真下向き)・個数(θ=90° の輪に N=1〜4)・再現性(seed 違い)** の 198 条件で検証した(Newton cuda・1 条件 5〜6 秒).**結果 ①**: θ 全域での構造 CoV の幅は球 0.015〜0.023・立方体 0.025〜0.071(1.2〜3.1 倍),max\|a1\| は 3〜4% vs 4.5〜11%.立方体は θ とともに単調に悪化し板の直下で軸上の 3.4〜5 倍.**球は θ≈30° が軸上より均一**(r=170: 0.0193 → 0.0057.軸上のリング構造が崩れる)で「どこに置いてもそこそこ」.立方体の優位は軸上の 1 点だけ.**結果 ②**: 真下向き(板が背後=バッフル無し)は板向き+バッフルと同等で 5〜30% 明るい.壁法線向き(キャビティ中心向き)は最悪(2〜5 倍).**結果 ③**: 対向 2 灯で m=1 は ≤0.3% に消え構造 CoV は 0.005〜0.010=単灯軸上より均一で形状差が消える.立方体は N=3 で崩れる(3 回対称が 4 回対称の壁と噛み合わない).**ノイズフロア**: 構造 CoV ±0.0007・a1 ±0.08%.設計への含意は「単灯なら球,多灯にできるなら側壁の対向 2〜4 灯・真下向き・バッフル無しで立方体でも球と同等」.**方法論**: 極角 θ を両形状共通のパラメータにし,立方体の稜(45°)は外す.板の近くのバッフルは外殻の貫通を許容し食い込み量を記録(壁法線向きは半径がキャビティ寸法の 0.6 を超えたら無効).解析は TEST_16/17 の方位フーリエ(m=1〜4)+構造 CoV+重心.**追加実験(同日夜)**: ① 方位角: 立方体は面の中央が最良で稜へ寄せるほど構造 CoV が 1.3〜1.75 倍に悪化(球は方位に依らない)/ ② 真下向き多灯(バッフル無し): 2 灯以上で非対称は消え単灯軸上より均一だが,板向き+バッフルの多灯には 1.5〜2.5 倍劣り N を増やしても頭打ち(一次照射が壁の下半分に集中し動径構造が残る).全 255 条件(TEST_18 結果 5・6). +- **TEST_18 照明配置依存性の球と立方体の比較 — 配置依存は球が立方体の 1/2〜1/3 (2026-09-14)**: ユーザーの仮説「積分球が使われる理由は照明配置への依存が小さいから」を,同内面積 4 ペア(球 r=100/135/170/250 ↔ 立方体 L=141/187/234/340)で **LED の位置(キャビティ中心から見た極角 θ=0〜120° を 13 段階)・向き(板向き+バッフル/壁法線向き+バッフル/真下向き)・個数(θ=90° の輪に N=1〜4)・再現性(seed 違い)** の 198 条件で検証した(Newton cuda・1 条件 5〜6 秒).**結果 ①**: θ 全域での構造 CoV の幅は球 0.015〜0.023・立方体 0.025〜0.071(1.2〜3.1 倍),max\|a1\| は 3〜4% vs 4.5〜11%.立方体は θ とともに単調に悪化し板の直下で軸上の 3.4〜5 倍.**球は θ≈30° が軸上より均一**(r=170: 0.0193 → 0.0057.軸上のリング構造が崩れる)で「どこに置いてもそこそこ」.立方体の優位は軸上の 1 点だけ.**結果 ②**: 真下向き(板が背後=バッフル無し)は板向き+バッフルと同等で 5〜30% 明るい.壁法線向き(キャビティ中心向き)は最悪(2〜5 倍).**結果 ③**: 対向 2 灯で m=1 は ≤0.3% に消え構造 CoV は 0.005〜0.010=単灯軸上より均一で形状差が消える.立方体は N=3 で崩れる(3 回対称が 4 回対称の壁と噛み合わない).**ノイズフロア**: 構造 CoV ±0.0007・a1 ±0.08%.設計への含意は「単灯なら球,多灯にできるなら側壁の対向 2〜4 灯・真下向き・バッフル無しで立方体でも球と同等」.**方法論**: 極角 θ を両形状共通のパラメータにし,立方体の稜(45°)は外す.板の近くのバッフルは外殻の貫通を許容し食い込み量を記録(壁法線向きは半径がキャビティ寸法の 0.6 を超えたら無効).解析は TEST_16/17 の方位フーリエ(m=1〜4)+構造 CoV+重心.**追加実験(同日夜)**: ① 方位角: 立方体は面の中央が最良で稜へ寄せるほど構造 CoV が 1.3〜1.75 倍に悪化(球は方位に依らない)/ ② 真下向き多灯(バッフル無し): 2 灯以上で非対称は消え単灯軸上より均一だが,板向き+バッフルの多灯には 1.5〜2.5 倍劣り N を増やしても頭打ち(一次照射が壁の下半分に集中し動径構造が残る).③ 校正材質(純 diffuse ρ=0.81)で主要 60 条件を引き直し: 配置依存の幅は球 0.030 vs 立方体 0.077〜0.098 と結論は不変(むしろ差が広がる).ただし旧材質の光沢 5% が作っていた軸上のリング構造が消え,**校正材質では両形状とも軸上が最良**(「球は θ≈30° が最良」は旧材質の産物).全 255 + 60 条件(TEST_18 結果 5〜7).**失敗パターン**: spawn のワーカーには主プロセスで切り替えた出力ディレクトリ(材質)が伝わらず,旧材質の row.json を再利用して 60 条件が空振りした → 材質を run_job の引数で渡す.