Newer
Older
SmTIAS-LightSim / docs / 06_TEST / TEST_03_輝度マップ形状追跡.md

輝度マップ形状追跡 (Luminance Map Shape Tracking)

数値指標 (CoV / 勾配 / C/P) は分布のばらつきを集約する量であり,「形そのもの」は捕えない.本ドキュメントはシミュレーション結果と実機の 輝度マップ形状を画像で並べ,改善 Step ごとに形がどう変わったか/変わっていないかを追跡する.

関連:

なぜ「形」を別軸で追跡するのか (Motivation)

均一性の数値指標(CoV,勾配 %,中心/周辺比)は 分布の集約値 であり,空間的なピーク位置・対称性・勾配方向 といった「形の特徴」を区別できない.例えば:

  • 実機: ROI 中央付近にピークを持つ楕円状の分布 → C/P ≈ 1.065
  • シミュ: ROI 下端にピークを持つ Y 軸単調勾配 → C/P ≈ 1.328

両者は 形が全く違うが,どちらも「C/P 比という数値」だけで議論すると同じ尺度上に並んでしまう.シミュレーションを実機に近づけるには数値だけでなく形の一致も必要.

比較パネル (Comparison Panel)

輝度マップ形状の追跡: 実機 (TARGET) と Step 8-1 / 8-3 / 8-7 の比較(共有 colorbar・実機色域基準)

生成スクリプト: scripts/build_luminance_evolution_panel.py.

表示方針: mean 揃え + 共有 colorbar(実機色域基準)

Step 8-8 で導入した mean 揃え正規化 をパネル生成にも適用している.具体的には:

  1. 各 ROI を mean=target_mean (146.7146) に線形ゲインで揃える — 線形ゲインなので形状指標 (CoV / 勾配 / C/P / max-min) は厳密に不変
  2. 共有 colorbar の値域は実機 ROI の 5〜95 パーセンタイル (≈ 134〜155) を採用 — 実機色域を「基準座標」として固定
  3. シミュは実機色域からはみ出ると飽和 — 上端の暗領域は黒に振り切れ,下端の明領域は白に飽和

この表示方針により 「シミュが実機色域を逸脱している事実」が視覚的に直接見える.数値 (CoV / 勾配) だけでは伝わらない「分布の広がりの違い」と「形(ピーク位置・対称性)の違い」が同時に確認できる.

観察された事実 (Observations)

実機 vs シミュ全 Step を並べて見て判明したこと:

パネル形の特徴共有 colorbar での見え方
実機 (TARGET)ROI 中央〜下に明るい楕円状の大きな領域.左右にほぼ対称.カメラ系の異方性(光学系の周辺減光 + ISP LSC 補正残差)に支配される典型パターン全体が中間色(実機色域内)でグラデーション.CoV=0.0426 の穏やかな分布
Step 8-1 (出発点,linear + mean 正規化)ROI 下端のみ明るく,上端に向かって単調に減衰する Y 軸単調勾配.LED 配置の物理的事実(下・左・右の 3 基板 U 字型配置で上対応の基板なし)を素直に反映下端は白く完全飽和,上端は黒く振り切れ.実機色域に収まらない急峻な勾配.CoV=0.1826
Step 8-3 (OETF 適用後,sRGB)数値指標は半減(CoV 0.183 → 0.089)したが,輝度マップの形は出発点と区別がつかない.OETF はピクセル値の単調変換で相対順序を変えないため形は構造的に不変Step 8-1 と全く同じ形.CoV だけが半減(OETF の非線形圧縮で分布が縮む)が,飽和パターンは継続
Step 8-7 (発光面 size 1.5×1.5,linear + mean 正規化)絶対値スケールは 2.83× 上昇したが,形は出発点と同じ Y 軸単調勾配.形状指標がほぼ不変だったことと整合Step 8-1 と区別不能の形.mean 正規化で表示スケールが完全に揃う
Step 8-9 (LED 位置を Fusion STL から正確化,linear + mean 正規化)LED 位置を「3+ギャップ+3」の実機配置に直したが,形は依然として Y 軸単調勾配.数値指標 CoV/勾配/C/P も 1% 以内の微変化Step 8-1 と区別不能の形.LED 位置の数 mm 誤差は多重反射で平滑化される
Step 8-10 (LED 配光を spot emitter で表現,cutoff=90/beam=30)数値指標は悪化(CoV +4%, 勾配 +15%, C/P +5%)が,目視で下端の明るい領域が中央寄りに集中.X 方向の対称性が部分的に改善.Y 方向の偏りは不変他の 4 シミュは下端が X 全幅で明るいが,spot は下中央のみが集中して明るい.左右端はやや暗く,実機の中央ピーク楕円の X 方向成分に部分的に符号一致
Step 8-11 (データシート従順版,cos^1.2 相当 spot + R=0.89)spot 集中度を上げる (FWHM 112°) + 反射率を 0.89 に.Step 8-10 と 8-9 の中間の数値.形は依然 Y 軸単調勾配で 8-10 の X 方向効果は cos^1.2 と反射率上昇が打ち消し合いやや緩和Step 8-10 と類似の形だが集中度がわずかに緩和.データシート従順度を上げても形は変わらないことを確定

学び (Findings)

1. 数値の縮小 ≠ 形の改善

Step 8-3 OETF は「指標数値の符号化ドメイン不一致」を解消したのみで,シミュの形は実機の形に近づいていない.OETF は単調変換であり,ピクセル間の相対順序を保つため形は不変.

2. これまでの全改善ステップは「形を変えない変更」だった

Step種別形への影響
8-1 spp 校正MC ノイズ低減(線形平均化)形不変
8-2 反射率スイープ線形ゲイン + 一様な多重反射スケール形ほぼ不変
8-3 OETF 順方向適用単調変換(非線形だが順序保存)形不変
8-4 max_depth 検証多重反射の打ち切り位置(一様寄与)形ほぼ不変
8-5 3D 可視化改善表示側の変更(物理計算には不介入)形不変
8-6 LED 物性確定線形ゲイン(radiance 値の校正)形不変
8-7 発光面サイズ検証局所幾何との縮退(絶対値変化)+ 点光源近似形不変
8-8 linear mean 正規化表示用の線形ゲイン(指標は不変)形不変
8-9 LED 位置の Fusion STL 反映LED 数 mm 移動,多重反射で平滑化形不変
8-10 LED 配光を spot emitterLED 中央集中型配光で X 方向の対称性に変化X 方向の対称性が部分改善(Y 方向は不変)
8-11 データシート従順版 (cos^1.2 spot + R=0.89)spot 集中度上昇 + 反射率上昇の打ち消し合い形は不変(8-10 と類似),数値指標は 8-10 と 8-9 の中間

8-10 / 8-11 で 「形を変える可能性のある変更」は LED 指向性 (spot config) のみ であり,これは数値指標を悪化させたが目視で X 方向の対称性向上を確認.Step 8-11 でデータシート従順度を上げても形は構造的に変わらない.依然として Y 方向の中央ピークは LSC モデル化が必要.

3. 実機の形 = シミュの形 + 動径補正

実機の輝度マップ形状(中央付近にピークを持つ楕円状)は,

実機の形 = シミュの Y 軸勾配(LED 配置由来) + カメラ系の動径補正(LSC 残差)

として説明可能.シミュ側にこの 動径補正 を加えない限り,形を実機に合わせることはできない.

4. 「形」と「分布の広がり」は別次元の差

mean 揃え + 共有 colorbar 表示により判明したこと: シミュ vs 実機は 形(ピーク位置・対称性)が違う だけでなく 分布の広がり(CoV)も違う(実機 0.0426 vs シミュ 0.18+ 系で約 4.3×).LSC モデル化はこの両方を同時に縮める可能性があるが,どちらが先に解消するかは実装してみないと分からない.

5. 光線追跡の方向(path / ptracer)は形を変えない(Mitsuba 上で実証)

Step 8-12 で perspective sensor + scalar_rgb + spp=4096 で path と ptracer を直接比較.bot/top 比が path 2.035 vs ptracer 2.006 で誤差 1.4% で一致 = Helmholtz 相反原理が Mitsuba 上でも「形について」実証された.

絶対値は Mitsuba 実装の正規化差で 1.99× 違うが,形(空間パターン)は同じ.これにより**「光線追跡の方向を変えれば形が変わるかも」という直感が物理的にも実装的にも成立しないこと**が確定し,LSC モデル化が唯一の道であることが強化された.

LSC モデル化の意義 (再認識) (Significance of LSC Modeling)

TEST_01 Step 8-N 候補(LSC 順方向モデル) は,単に「指標残差 1.6〜1.9× を縮める」だけでなく,「シミュの空間勾配パターンに動径補正を重ね,実機の中央ピーク形状を作る」根本的な構造的改善 である.

LSC は ROI 中心からの距離に依存する動径ゲインで,

  • 周辺を持ち上げる(実機 ISP の補正と同じ符号)
  • ROI 中央を相対的に明るく見せる
  • シミュの Y 軸勾配と合成すると「中央寄りピーク」の形が現れる

→ 以後の改善判断はこの 2 軸(数値 + 形)で行う.数値残差だけ追っていると「形は変わっていない」改善で満足してしまう恐れがある.

再現コマンド (Reproduction)

uv run python scripts/build_luminance_evolution_panel.py

出力先: docs/06_TEST/figures/luminance_map_evolution.png(.gitignore 対象.再生成可能)

スクリプトの処理フロー

  1. 各データソース(実機 PNG / シミュ luminance.npy)から 生輝度配列 を読み込み
  2. 実機: Rec.709 luma 変換 → ROI 抽出(configs/eval_real.yaml の roi 設定)
  3. シミュ: 2D luminance.npy をそのまま ROI 抽出(configs/eval_baseline.yaml の roi 設定)
  4. Step 8-3 のみ OETF + 露出アンカーを順方向適用,他は mean 揃え正規化 (Step 8-8 apply_mean_anchor) で mean=146.7146 に統一
  5. 共有 colorbar の値域は実機 ROI の 5〜95 パーセンタイル で固定し,全画像を hot cmap + 同一 vmin/vmax で描画

新規 Step を追加する場合

scripts/build_luminance_evolution_panel.py の PANELS リストに 1 エントリ追加するだけで自動でパネルに並ぶ:

PANELS = [
    # 既存エントリ ...
    {
        "loader": _load_sim_linear,                    # or _load_sim_oetf / _load_real
        "args": (ROOT / "output" / "<new_step_dir>" / "luminance.npy",),
        "title": "Step 8-N: <description>",
        "subtitle": "<scene/eval setting>",
    },
]

追加後はパネルを再生成し,本ドキュメントの「観察された事実」表に 1 行追加する.

参照 (References)