Newer
Older
SmTIAS-LightSim / docs / 06_TEST / TEST_14_材質パラメータ再スイープと残差の構造分解.md

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

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

関連:

背景・動機 (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 条件:

条件scoreCoVC/P勾配 %動径 min/maxNCC打切損失 %
ρ0.82 ω0(純 diffuse)0.07890.06691.09158.380.8620.8575.1
ρ0.78 ω0.05 α0.10.08010.07011.09258.470.8580.8533.0
ρ0.82 ω0.05 α0.30.08540.06651.08998.250.8660.8566.0
ρ0.82 ω0.05 α0.60.08730.06811.09348.540.8660.8546.0
ρ0.85 ω0.15 α0.60.09000.06721.09028.270.8670.84512.9
実機 全灯—0.06951.09118.350.8601.000—

純 diffuse(ω=0)系列の ρ 応答:

ρCoV勾配 %C/P動径 min/maxNCCscore
0.750.076110.331.11520.8310.8520.1749
0.780.07239.521.10530.8440.8520.1301
0.820.06698.381.09150.8620.8570.0789
0.850.06267.541.08160.8740.8600.1204
0.880.05846.791.07280.8880.8560.1655
0.900.05526.191.06600.8980.8580.1977
実機0.06958.351.09110.8601.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 の主題「数値の縮小 ≠ 形の改善」が, 面法線修正後の新しい条件でも成立することを意味する.

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

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

純 diffuse 系列:

ρ残差 RMS %傾き %方位 degお椀 %分解後の残り %
0.753.585.79−146.1−1.771.01
0.783.636.00−143.7−0.900.99
0.823.726.19−140.7+0.270.99
0.853.836.36−138.2+1.120.97
0.884.006.56−136.3+1.910.98
0.904.126.69−134.9+2.460.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.996.55−137.41.770.99
bottom3.986.00−143.03.561.23
left4.557.17−151.73.161.30
right2.301.84−62.01.431.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)

# スイープ(無人実行.時間予算で自動打ち切り,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)