diff --git a/CLAUDE.md b/CLAUDE.md index ffd1dc5..4b4b719 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ ## 開発進捗 -最新: フェーズ 7(実装)— **研究室サーバ(Newton)で計算する仕組みを整備**.`sm-remote` で手元からコード送信・tmux でジョブ起動・結果回収ができ,GPU(cuda_ad_rgb)は手元 CPU の 37〜72 倍で結果も一致(初回セットアップは ENV_02「研究室サーバ編」,日常操作は ENV_04「研究室サーバでの実行」).**環境**: mitsuba は **3.7.1 に固定**(テストは `uv run python -m pytest`).2026-09-13 に開発機の Smart App Control が評価モードからオンに切り替わり mitsuba がブロックされたため,**SAC はオフ**にした(ENV_04 参照).直前の研究ステップは [TEST_17](docs/06_TEST/TEST_17_オフ軸LED配置の影響とサイズ依存.md) オフ軸 LED 配置(**未実施**: ずれ量の感度曲線・非対称ピーク非単調性の原因・フラット天井版・直方体 L×L×D・ノイズフロア).詳細は [docs/PROGRESS.md](docs/PROGRESS.md). +最新: フェーズ 7(実装)— **TEST_18 照明配置依存性の球と立方体の比較**(LED の位置 θ・向き・個数を同内面積ペアで振った 255 条件.配置依存は球が立方体の 1/2〜1/3,球は θ≈30° が軸上より均一,対向 2 灯以上で形状差が消え,真下向きならバッフル不要)と,**スイープの高速化**(`sm-render`/`sm-evaluate` の本体を `render/pipeline`・`evaluation/pipeline` に関数化してプロセス内実行,`--no-figures`,遮蔽検証を cuda で,`--workers 2`.1 条件 球 40 秒 → 6 秒).サーバは `sm-remote`(学外からは `SM_REMOTE_HOST=Newton-via-lab`).**環境**: mitsuba は **3.7.1 に固定**(テストは `uv run python -m pytest`),開発機の **SAC はオフ**(ENV_04 参照).同一 seed の再レンダは集計指標が一致するので,ノイズフロアは `render.seed` を変えて測る.詳細は [docs/PROGRESS.md](docs/PROGRESS.md). 実装済みモジュール: - `src/sm_tias_lightsim/uniformity.py` — Rec.709 輝度変換 + CoV/std/max-min(SmTIAS-Evaluation コピー) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 243bb0f..787863c 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -98,3 +98,7 @@ - **学外からの接続**: Tailscale に登録済みの研究室 PC(サーバとは別)に OpenSSH Server を入れて Tailscale からのみ受け付け,SSH の踏み台(ProxyJump)にして Newton に入れるようにした(Newton 側は無変更.大学 VPN やサブネットルーターより影響範囲が自分の PC に閉じる).失敗パターン: 研究室 PC は管理者アカウントのため鍵を `C:\ProgramData\ssh\administrators_authorized_keys` に置く必要があるうえ,両 PC の管理者 PowerShell のプロンプトが同一で鍵を手元 PC に登録してしまった → `hostname` で確かめてから実行する(手順は ENV_02「学外から接続する」). - **レンダは画素単位では再現しない(GPU・CPU とも)**: 最終確認で基準シーンを同条件で繰り返すと,約 97% の画素が MC ノイズ程度に異なった(平均の差 3〜7e-4・CoV の差 1e-5).切り分け実験: ① 同じシーンオブジェクトを 2 回レンダ → 丸め誤差だけ(並列加算の順序.平均は一致)/ ② シーンを読み込み直す → ノイズ程度の差 / ③ コーネルボックスは読み込み直しても丸め誤差だけ.=このシーン固有で,読み込み時に並列で作られる加速構造かサンプリング用の表の丸め差が,最大 16 回の反射で経路の分岐として増幅されると推定(どちらかは未切り分け).過去の「seed 固定で決定論的」という前提は厳密には成り立たないが,集計指標の比較には影響しない.裏返せば,同じ条件の繰り返しで未実施の**ノイズフロア**を測れる. - **サーバでのスイープ実測**: 球 10 条件のスイープ全体が 5 分 49 秒(手元 2 時間 13 分).レンダ+評価だけなら 1 条件約 10 秒で 79 倍.GPU 1 枚(`--gpu 0`)で CPU は平均 156%・最大 342%(64 スレッド中)と共用サーバへの負荷は小さく,GPU 使用率の平均は 3%=時間の大半は CPU 側の形状生成・シーン読み込み・評価(GPU を増やしても速くならない).研究室 PC 経由の pull は 31.8 MB を 16 秒. + +- **スイープの高速化 — レンダ/評価の関数化・プロセス内実行・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+重心.追加実験(方位角依存・真下向き多灯 N=2/4/8)は同日夜に実行(結果は TEST_18 末尾).