# 材質パラメータ再スイープと残差の構造分解 (Material Parameter Re-sweep and Residual Decomposition)

面法線アーティファクト（[TEST_12](TEST_12_シェーディング法線アーティファクトの発見と修正.md)）の修正後，
内壁の材質パラメータ 3 軸 (ρ / ω / α) を全数スイープして実機に最も近い条件を確定し，
さらに残差を低次成分に分解して「材質で直せる誤差」と「直せない誤差」を分離した（2026-08-30〜31）．

関連:

- 前提となる修正: [TEST_12_シェーディング法線アーティファクトの発見と修正](TEST_12_シェーディング法線アーティファクトの発見と修正.md)
- 形の追跡方針: [TEST_03_輝度マップ形状追跡](TEST_03_輝度マップ形状追跡.md)
- 実行記録: [TEST_02_シミュレーション実行記録](TEST_02_シミュレーション実行記録.md)

## 背景・動機 (Motivation)

反射率スイープ（`output/sweep_reflectance/`）と blend BSDF スイープ（`output/blend_sweep/`）は
いずれも面法線修正**前**に実施しており，当時はシミュの不均一性の 6 割超がシェーディング法線
アーティファクトだった．したがって「どの材質パラメータが実機に近いか」という結論は
**アーティファクトへのフィッティングになっていた可能性が高く，引き直しが必要**だった．

加えて TEST_12 で実機とシミュが数値レベルで整合するようになったため，**指標を使った比較が
初めて意味を持つ**状態になった．ここで材質パラメータを確定させれば，以後の設計検討
（未製作筐体の予測）の土台になる．

## 実験条件 (Setup)

固定条件は既存レンダと完全に同一に保ち，`printer_white` の材質定義だけを書き換えた
（テンプレート: `configs/_tmp_fn_full_base.yaml`）．

| 項目 | 値 |
| --- | --- |
| レンダ | spp=1024 / max_depth=16 / 512² / llvm_ad_rgb / path / orthographic |
| 幾何・光源・センサ | 変更なし（現行筐体・18 灯・`ortho_scale` 50×52） |
| 評価 | `configs/eval_baseline_dng_target.yaml`（linear + mean アンカー 207.82） |
| 比較対象 | 実機全灯 `lightsim/luminance_maps/full_MiniTIAS_QM_20260601_124500.npy` |

スイープ軸（ω=0 は α に依存しないため α は 1 値のみ．計 60 条件）:

| 軸 | 意味 | 値 |
| --- | --- | --- |
| ρ | diffuse 成分の反射率 | 0.75 / 0.78 / 0.82 / 0.85 / 0.88 / 0.90 |
| ω | blendbsdf の roughconductor 混合比（0 なら純 diffuse） | 0 / 0.05 / 0.15 / 0.30 |
| α | roughconductor の GGX 粗さ | 0.1 / 0.3 / 0.6 |

実行は無人 6 時間枠で行い，58 ジョブを 3.98 時間で完走した（1 ジョブ 179〜332 秒．
基準点 ρ=0.85/ω=0.05/α=0.1 は `output/full_base_fix/` を再利用し再レンダしていない）．

### 指標の扱い

形の一致度は **平滑化（median 5px + gaussian σ=4）後の NCC 対実機**を用いる．
TEST_12 追補で確認したとおり生マップの NCC は MC ノイズに支配される（単灯でノイズ 5.3%
> 構造振幅 3.8〜4.4%）ためである．振幅系は CoV / 中心周辺比 / 勾配 / 動径 min-max の
実機との相対乖離を用い，総合スコアは形と振幅を半々で重み付けした（`sweep_bsdf_grid_fix.py`）．

## 結果 1 — ρ が支配的，ω・α はほぼ無効 (Results: ρ Dominates)

スコア上位 5 条件:

| 条件 | score | CoV | C/P | 勾配 [%] | 動径 min/max | NCC | 打切損失 [%] |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **ρ0.82 ω0（純 diffuse）** | **0.0789** | 0.0669 | 1.0915 | 8.38 | 0.862 | 0.857 | 5.1 |
| ρ0.78 ω0.05 α0.1 | 0.0801 | 0.0701 | 1.0925 | 8.47 | 0.858 | 0.853 | 3.0 |
| ρ0.82 ω0.05 α0.3 | 0.0854 | 0.0665 | 1.0899 | 8.25 | 0.866 | 0.856 | 6.0 |
| ρ0.82 ω0.05 α0.6 | 0.0873 | 0.0681 | 1.0934 | 8.54 | 0.866 | 0.854 | 6.0 |
| ρ0.85 ω0.15 α0.6 | 0.0900 | 0.0672 | 1.0902 | 8.27 | 0.867 | 0.845 | 12.9 |
| **実機 全灯** | — | **0.0695** | **1.0911** | **8.35** | **0.860** | 1.000 | — |

純 diffuse（ω=0）系列の ρ 応答:

| ρ | CoV | 勾配 [%] | C/P | 動径 min/max | NCC | score |
| --- | --- | --- | --- | --- | --- | --- |
| 0.75 | 0.0761 | 10.33 | 1.1152 | 0.831 | 0.852 | 0.1749 |
| 0.78 | 0.0723 | 9.52 | 1.1053 | 0.844 | 0.852 | 0.1301 |
| **0.82** | **0.0669** | **8.38** | **1.0915** | **0.862** | 0.857 | **0.0789** |
| 0.85 | 0.0626 | 7.54 | 1.0816 | 0.874 | 0.860 | 0.1204 |
| 0.88 | 0.0584 | 6.79 | 1.0728 | 0.888 | 0.856 | 0.1655 |
| 0.90 | 0.0552 | 6.19 | 1.0660 | 0.898 | 0.858 | 0.1977 |
| 実機 | 0.0695 | 8.35 | 1.0911 | 0.860 | 1.000 | — |

読み取れること:

1. **振幅系 4 指標が単調かつ独立に同じ ρ を指す**．実機値との交差点は CoV → 0.80，
   勾配 → 0.815，C/P → 0.82，動径 min-max → 0.815．**偶然では揃わない一致**であり，
   ρ が真に効いているパラメータであることの裏付けになる．
2. **ω・α はほぼ効かない**．ρ を固定して ω・α を全振りしても CoV の変化幅は 0.008〜0.011
   にとどまるのに対し，ρ 単独では 0.0542〜0.0797 と 3 倍動く．
3. **例外は ω=0.30・α=0.1（強い準鏡面）のみ**で，これだけ全指標で外れ値になる
   （勾配 3.5〜4.8%，NCC 0.61〜0.70）．壁が鏡に近づく別レジームであり，実機の白色樹脂とは
   かけ離れている．
4. **結論として blendbsdf は不要**．純 diffuse でよく，調整対象パラメータが ρ 1 つに減る．

図: `output/_slide_panels/bsdf_grid_response.png`（指標 × ρ の応答曲面），
`output/_slide_panels/bsdf_grid_contact_sheet.png`（全 60 条件の輝度マップ一覧）．

## 結果 2 — 形は材質パラメータでは動かない (Shape Is Insensitive)

**60 条件すべてで NCC は 0.6118〜0.8599**，外れ値の ω=0.30/α=0.1 系列を除けば
**0.8135〜0.8599** に収まり，基準点（0.8544）からほとんど改善しない．
応答曲面の NCC パネルはほぼ水平線になる．

コンタクトシートで目視しても **60 セルが実質すべて同じ絵**（左右対称の中央ブロブ＋上端の
暗い帯）であり，実機の「右下が明るく左上隅が暗い斜め構造」はどの条件でも現れない．

振幅系が ρ で 3 倍動くのに形の相関が動かない ── **残る形の差は材質パラメータでは
原理的に埋まらない**ことが，網羅探索によって実証された．

これは [TEST_03](TEST_03_輝度マップ形状追跡.md) の主題「数値の縮小 ≠ 形の改善」が，
面法線修正後の新しい条件でも成立することを意味する．

## 結果 3 — 残差の構造分解 (Residual Decomposition)

指標だけでは最終判断にならないため，実機との残差マップ
（mean 正規化後の `(sim - real) / mean(real)` [%]）を直接観察し，
さらに `定数 + 傾き(X, Y) + お椀(R²)` で最小二乗分解した．

純 diffuse 系列:

| ρ | 残差 RMS [%] | 傾き [%] | 方位 [deg] | お椀 [%] | 分解後の残り [%] |
| --- | --- | --- | --- | --- | --- |
| 0.75 | 3.58 | 5.79 | −146.1 | **−1.77** | 1.01 |
| 0.78 | 3.63 | 6.00 | −143.7 | **−0.90** | 0.99 |
| 0.82 | 3.72 | 6.19 | −140.7 | **+0.27** | 0.99 |
| 0.85 | 3.83 | 6.36 | −138.2 | +1.12 | 0.97 |
| 0.88 | 4.00 | 6.56 | −136.3 | +1.91 | 0.98 |
| 0.90 | 4.12 | 6.69 | −134.9 | +2.46 | 0.94 |

全 60 条件での広がり: 傾き 5.79〜8.74%，方位 −146.1〜−127.1 deg，お椀 −2.12〜+4.92%．

読み取れること:

1. **ρ が制御しているのはお椀（動径）成分だけ**であり，**ρ ≈ 0.81 でゼロ交差**する．
   振幅系 4 指標から読んだ 0.80〜0.82 と独立に一致する．
2. **傾き成分（約 6%・方位 −140 deg）はどの ρ でもほぼ一定**．光沢を混ぜると
   最大 8.74% まで**悪化**する．材質パラメータでは手が届かない．
3. **傾きとお椀を除くと残りは約 1%** ＝ ほぼ MC ノイズ．モデル誤差はこの 2 成分で
   ほぼ説明し尽くされている．
4. したがって **残差 RMS で ρ を選んではならない**．RMS は支配項である傾き（直せない誤差）を
   測ってしまうため ρ=0.75 が最良に見えるが，これは誤り．**お椀成分がゼロになる ρ** が
   正しい選択基準である．

図: `output/_slide_panels/bsdf_grid_rho_series.png`（上段 輝度マップ / 下段 残差マップ），
`output/_slide_panels/bsdf_grid_top_residual.png`（上位条件の残差マップ）．

### 単灯での確認 — 傾きは基板ごとに違う (Per-Board Check)

既存の単灯レンダ（`output/singles_fix/`，ρ=0.85・ω=0.05・α=0.1．全灯と同一条件）に
同じ分解を適用した（追加レンダなし）:

| 灯 | 残差 RMS [%] | 傾き [%] | 方位 [deg] | お椀 [%] | 分解後の残り [%] |
| --- | --- | --- | --- | --- | --- |
| 全灯 | 3.99 | 6.55 | −137.4 | 1.77 | 0.99 |
| bottom | 3.98 | 6.00 | −143.0 | 3.56 | 1.23 |
| left | 4.55 | 7.17 | −151.7 | 3.16 | 1.30 |
| **right** | **2.30** | **1.84** | **−62.0** | 1.43 | 1.94 |

**傾きは全灯共通の性質ではなく，基板ごとに異なる**．bottom と left は 6〜7% で方位も近い
（−143 / −152 deg）のに対し，**right だけ 1.84% とほぼ傾きがない**（傾きが小さいため方位
−62 deg 自体はほとんど意味を持たない）．

これは原因の切り分けに直結する．**仮に傾きがカメラ由来（LSC 補正残差）であれば，同じカメラ・
同じ ROI を使う以上 4 条件すべてに同一の傾きが乗るはずである**．そうなっていない以上，
**傾きの主要部分はカメラのアーティファクトではなく，bottom と left の基板のモデル化誤差**と
判断できる．right は既にほぼ整合している．

なお，実機単灯の ROI mean は bottom 57.75 / left 61.46 / right 63.55（露出・ISO 固定の
同一セッション）で **右 > 左 > 下 の 10% の広がり**があるのに対し，シミュ（`singles_fix`）は
6.539 / 6.559 / 6.575 と **0.5% 以内でほぼフラット**であり，基板間の出力差が未モデル化である．
ただし一律のゲイン差だけでは「right だけ傾きが小さい」ことを説明できないため，
位置・向き・配光のいずれかが bottom / left で外れている可能性が高い．

## 結論 (Conclusions)

1. **内壁材質は ρ ≈ 0.81 の純 diffuse（ω=0）を採用する**．振幅系 4 指標と残差のお椀成分が
   独立に同じ値を指しており，材質パラメータの探索はここで決着とみなしてよい．
   blendbsdf は不要．
2. **残る誤差は約 6% の傾き成分**（方位 −140 deg ＝ 左上が明るすぎ・右下が暗すぎ）であり，
   材質では直せない．これが次の主題になる．
3. **傾きは bottom / left の基板に固有**であり，right はほぼ整合している．カメラ由来ではなく
   モデル化誤差である．

## 限界・注意点 (Limitations)

- **ノイズフロアを測っていない**．上位 4 条件（score 0.0789〜0.0873）は実質横並びであり，
  「ρ=0.82 が ρ=0.78 より良い」とは言えない．正しい主張は「ρ ≈ 0.80〜0.82」まで．
  同一条件を異なる seed で 2 回レンダし，シミュ同士の指標差を測れば各指標の到達可能上限が
  出る（未実施）．
- **`max_depth=16` 据え置きによる打ち切り損失**が ρ とともに増える（ρ=0.82・ω=0 で 5.1%，
  ρ=0.90 で 20.6%）．採用条件は許容範囲だが，高 ρ 側の条件は打ち切り誤差と交絡している．
  なお blendbsdf の roughconductor 成分は `material="none"`（反射率 1.0 の完全反射体）のため，
  ω が大きいほど実効反射率が上がり打ち切り損失も増える（ρ0.88・ω0.30 で 26.8%）．
- **総合スコアの重み付け（形と振幅で半々）は恣意的**である．全成分を
  `output/bsdf_grid_fix/summary.csv` に残してあるため，別の重みで並べ替え直せる．
- **実機データのセッションが揃っていない**．全灯は 2026-06-01（MiniTIAS），単灯 3 灯は
  2026-06-15（SmTIAS）で撮影セッションが別．単灯どうしの比較は露出・ISO 固定の同一
  セッションなので有効だが，全灯と単灯の絶対振幅を横並びにするには露出正規化が要る．
- **比較対象が実機 1 台・全灯 1 枚**である．ρ の妥当性を単灯 3 条件で独立検証していない．

## 次にやること (Next Steps)

1. **単灯 3 本を ρ=0.81・純 diffuse で引き直す**（3 レンダ約 10 分）．ρ の独立検証と，
   bottom / left の傾きが ρ 非依存で残ることの確認が同時に取れる．
2. **傾き成分の原因切り分け**: LED 基板ごとの出力・位置・向き・配光のどれが効くかを
   単灯で個別に検証する．
3. **ノイズフロアの測定**（seed 違い 2 本のレンダ）．以後すべての一致度指標の解釈の前提になる．
4. `configs/scene_baseline.yaml` の既定材質を ρ=0.81 純 diffuse に更新するかの判断．

## 再現コマンド (Reproduction)

```powershell
# スイープ（無人実行．時間予算で自動打ち切り，1 ジョブ完了ごとに summary.csv を更新）
uv run python scripts/sweep_bsdf_grid_fix.py --budget-hours 5.5

# 指標の可視化（応答曲面 + 上位条件の形比較）
uv run python scripts/build_bsdf_grid_panel.py --top 3

# 輝度マップそのものの可視化（一覧 / ρ 系列 + 残差 / 上位条件の残差）
uv run python scripts/build_bsdf_grid_visual.py --top 4
```

出力: `output/bsdf_grid_fix/summary.csv`（60 条件）・各条件の `luminance.npy` と `metrics.csv`・
ログ `output/_sweep_bsdf_grid_fix.log`・図 `output/_slide_panels/bsdf_grid_*.png`．

## 参照 (References)

- [TEST_12_シェーディング法線アーティファクトの発見と修正](TEST_12_シェーディング法線アーティファクトの発見と修正.md): 本再スイープの前提となる修正
- [TEST_13_物理モデル健全性の一括監査](TEST_13_物理モデル健全性の一括監査.md): 打ち切りバイアスの見積もり式と絶対放射量の検証
- [TEST_03_輝度マップ形状追跡](TEST_03_輝度マップ形状追跡.md): 「数値と形は別軸」という評価方針
- [TEST_02_シミュレーション実行記録](TEST_02_シミュレーション実行記録.md): 出力ディレクトリの索引
