TEST_18 までのレンダは spp=1024 固定で,大きいキャビティほど生の輝度が低く相対ノイズが 7〜26% に達していた(指標はノイズ補正で救っている).研究室サーバの GPU で 1 条件 5 秒に なったので,spp を 256〜8192 で振り,(1) 計算時間のうち GPU が何秒か,(2) ノイズが 1/√spp で下がるか,(3) 各指標がどの spp で安定するかを測って今後の標準 spp を決めた (2026-09-14).結論: GPU 時間は spp に厳密に比例し固定費は 0.8 秒.ノイズは 1/√spp 則に 正確に乗る.構造 CoV は 1024 で十分,画像全体 min/max 比を暗い条件で比べるなら 2048〜4096.
関連:
--workers: ENV_04 開発コマンド「研究室サーバでの実行」mi.render / 保存 / 評価).
mi.render は dr.sync_thread() で GPU の完了を待ってから測る(投げっぱなしで短く見える
ことを防ぐ).GPU 率 = mi.render ÷ 全体SM_DRJIT_THREADS=16・逐次実行6 条件 × 2 seed の平均.
| spp | 全体 s | GPU(mi.render)s | CPU 固定費 s | GPU の割合 |
|---|---|---|---|---|
| 256 | 2.0 | 1.2 | 0.8 | 60% |
| 512 | 3.2 | 2.5 | 0.8 | 76% |
| 1024 | 5.9 | 5.1 | 0.8 | 87% |
| 2048 | 11.1 | 10.3 | 0.8 | 93% |
| 4096 | 20.9 | 20.1 | 0.8 | 96% |
| 8192 | 40.6 | 39.8 | 0.7 | 98% |
| 条件 | 生 mean | ノイズ CoV(1024) | ノイズ × √spp(6 段階の範囲) |
|---|---|---|---|
| 球 φ340 軸上 | 0.355 | 0.092 | 2.93〜2.99 |
| 球 φ340 θ=90° | 0.323 | 0.145 | 4.63〜4.67 |
| 立方体 L=234 軸上 | 0.387 | 0.104 | 3.30〜3.32 |
| 立方体 L=234 θ=90° | 0.356 | 0.156 | 4.97〜5.08 |
| 球 φ500 θ=90° | 0.153 | 0.189 | 5.84〜6.05 |
| 立方体 L=340 θ=90° | 0.174 | 0.200 | 6.23〜6.38 |
spp_noise.png 下段.誤差棒は seed 2 つの差の半分.
| 指標 | 1024 での状態 | 安定する spp |
|---|---|---|
| 構造 CoV | 256→1024 で 5〜15% 低下後ほぼ一定.seed 差 ≤0.0005 | 1024 で十分(8192 との差 ≤0.002) |
| 画像全体 min/max(補正あり) | 明るい条件は安定(seed 差 0.003).暗い φ500・L=340 は 0.93〜0.94 で seed 差 0.01 | 2048〜4096(暗い条件が 0.95〜0.96 に収束し seed 差 0.002) |
| 画像全体 min/max(補正なし) | どの条件も spp とともに上昇し続ける | 8192 でも収束しない(ノイズ補正は必須) |
| 輪帯平均 min/max | θ=90° で 0.97〜0.99 に張り付き,seed 差 0.003〜0.01 | spp では改善しない(方位平均の問題) |
pkill がサンプラー自身を止めたため記録が無い.
GPU 時間は dr.sync_thread() で同期した実測で取れているので結論には影響しない--workers 2 では 1 条件あたり 1 割ほど短くなる(ENV_04)mi.render の時間は同期してから測る.cuda variant では非同期に GPU へ投げられるので,
dr.eval + dr.sync_thread() を挟まないと数十 ms に見える--only scripts だけだと足りないことがある.新しい src モジュール
(evaluation/fullimage.py)を使うスクリプトは,全体を push してから回すpkill -f は再起動時に自分も殺す.サンプラーを再起動するなら先に止めてから
起動する順序を守るか,PID ファイルで管理する# YAML 生成(TEST_18 の _tmp_led_placement を流用するので先に sweep_led_placement.py --prepare-only) uv run python scripts/sweep_spp_noise.py --prepare-only # サーバで実行(GPU 0).spp を絞るなら --spps 256 512 1024 uv run sm-remote push uv run sm-remote run --name spp --gpu 0 --threads 16 -- python scripts/sweep_spp_noise.py uv run sm-remote pull spp_noise_sweep # 解析(図と表) uv run python scripts/build_spp_noise_comparison.py
出力: output/spp_noise_sweep/(レンダ別 72 ディレクトリ + summary.csv + spp_summary_table.csv +
spp_noise.png).
--workers