Newer
Older
SmTIAS-LightSim / docs / 06_TEST / TEST_01_キャリブレーション検証履歴.md

キャリブレーション検証履歴 (Calibration Verification History)

⚠️ BEFORE FIX(バグ込み・要再検証): 本ドキュメントの Step 8 系イテレーション(特に A1 BSDF・A8 反射率・A9 max_depth・ξ 配光スイープ)の数値・図はすべて面光源スケール軸バグ(全 LED が幅3mm×高さ2mの巨大ストリップ化)が入った状態で取得したもの.バグの発見・修正・影響は TEST_08,正しい面積での再検証は TEST_09 を参照.記録としては残すが,個々の数値・結論はそのまま信用せず修正後に再検証すること.

本ドキュメントは MiniTIAS 実機(baseline 1 枚 MiniTIAS_20260408_144434)に対するシミュレーション結果の キャリブレーション と 検証イテレーション を時系列で記録する.

目的:

  • 「どの仮説で何を変え,何が起きたか」を残し,後から経緯を辿れるようにする.
  • 失敗・予想外も同等に記録し,方向性のドリフトと「うろ覚えで同じ仮説を試し直す」事態を防ぐ.
  • 各イテレーションの 学び を明示し,次の意思決定の根拠を蓄積する.

関連ドキュメント:

実測ターゲット (Measurement Target)

baseline 1 枚(MiniTIAS_20260408_144434,ROI 1400×1409,sRGB 符号化済み Y' luma):

指標値
mean146.71
CoV0.0427
勾配 %6.10
中心/周辺比 (C/P)1.0650
std6.26
max/min 比1.392

評価は sm-evaluate で実施.シミュ側の比較は OETF 順方向適用後(Step 8-3 以降)に sRGB ドメインで行うのが正式.linear ドメイン比較は Step 8-3 以前または同一条件シミュ間の検証用.

俯瞰サマリ (Overall Progression)

注記 (2026-06-03): 本表の形状指標(CoV / 勾配 / C/P / 動径 min/max)は不均一性の 絶対量 しか測らない.形(Y 軸単調勾配 vs 中央ピーク楕円)の 構造的区別はできない ため,過去の「数値が実機方向に動いた」評価は形を実機に近づける議論としては不十分である.本格的な「形」追跡は TECH_11 形状指標の見直し と TEST_03 輝度マップ形状追跡 で行う.

時系列での主要指標推移.残差倍率 = (シミュ - 実測) / (初期残差 - 実測) として「初期からどれだけ縮まったか」を見る.

Step設定空間meanCoV勾配%C/PCoV 残差倍率
実測 TARGET (旧 PNG sRGB)—sRGB146.710.04276.101.0651.0×
8-1 spp=128R0.85, d8, linearlinear151.790.23624.831.3305.5×
8-1 spp=1024 (基準確定)R0.85, d8, linearlinear152.020.18324.721.3284.3×
8-2 R=0.92 sweepR0.92, d12, linearlinear—0.17019.421.2414.0×
8-3 OETF 適用R0.85, d8, spp1024sRGB146.71*0.08912.571.1442.1×
8-3 OETF + R=0.92 + d=12R0.92, d12sRGB146.71*0.0819.721.1081.9×
8-7 size 1.5×1.5 (Φe 保存)linear, R0.85, d8linear429.990.18626.211.355(形状指標 ≈ 8-1)
実測 TARGET (新 DNG+LSC linear)—linear207.820.06958.351.0911.0×
8-13 新方針シミュ突合R0.85, d8, spp1024linear207.82*0.182624.651.3272.63×
8-14 候補 γ (D1) ROI 整合確認変更なし—————クリア(ROI 物理整合差 < 1%)
8-14 候補 β (A1) 混合 BSDF 最良R0.85 + blendbsdf w0.05 α0.6linear207.82*0.185124.441.323残差 2.66× (悪化)
8-14 候補 β (A1) 混合 BSDF 最悪R0.85 + blendbsdf w0.30 α0.1linear207.82*0.243326.811.366クリア(実機方向に作用しない)
8-14 候補 α 前半 (A9) d=16R0.85, d=16, spp1024linear207.82*0.160420.591.2592.31×(数値改善あり、形不変)
8-14 候補 α 前半 (A9) d=28R0.85, d=28, spp1024linear207.82*0.158320.241.2542.28×(収束、形不変)

* mean アンカー固定.R, d, spp は reflectance, max_depth, samples_per_pixel.

最大の跳躍は 8-3 OETF(残差 4.3× → 2.1×).ただし Step 8-13 で 過去 2.1× は PNG sRGB ガンマ圧縮による楽観値と判明.真の linear 比較での残差は 2.63× が確定基準.現時点では R=0.85, d=8, spp=1024, OETF=off, normalization mean=207.82 で残差 2.63×.残差解消は今後の 物理モデル精緻化 (反射率精度・LED 配光・幾何) に委ねる(TECH_07 / TECH_08 参照).LSC モデル化(Step 8-N 候補)は実機側で順方向適用するアプローチが確立したため 不採用.

イテレーション履歴 (Iteration Log)

Step 8-1: spp 校正 (128 → 1024)

  • 日付: 2026-05-18

  • 背景・問題意識: 初期シミュ(spp=128)と実測の差が CoV 0.236 vs 0.0427 ≈ 5.5 倍 と大きすぎる.これは MC ノイズなのか,物理モデルの構造的勾配なのか,切り分けないと方向性が定まらない.

  • 仮説(物理動機): モンテカルロノイズは 1/√spp で減衰する独立成分.一方,物理由来の空間勾配は spp 非依存.spp を 8 倍にすればノイズ成分の寄与が 1/√8 ≈ 35% に減るので,残った差が「物理」だと確定できる.

  • 試した変更: configs/scene_baseline.yaml の render.spp を 128 → 1024(8 倍).他は据え置き.

  • 期待した効果: ノイズ系指標(max/min, std, CoV の量子化的外れ値成分)は減少.勾配や中心/周辺比は spp 非依存なら不変.

  • 実際の結果:

    指標spp=128spp=1024動いた量
    CoV0.2360.183-22%
    std35.8327.85-22%
    max/min 比11.594.27-63%(極端な外れ値が消えた)
    mean151.79152.02≈ 不変
    中心/周辺比1.3301.328≈ 不変
    勾配 %24.8324.72≈ 不変
  • 解釈: max/min, std, CoV はノイズ由来成分を含んで動いた.中心/周辺比と勾配 % は spp 非依存 → 物理由来の構造的勾配.ノイズ分解 std² = 信号² + ノイズ²,ノイズ ∝ 1/√spp で逆算すると spp=1024 の残留ノイズ std ≈ 8.5,真の物理信号 std ≈ 26.5.spp→∞(ノイズゼロ)でも CoV は ≈ 0.174 までしか下がらない(実測 0.0427 の約 4 倍).

  • 学び: spp を増やしても CoV は 0.183 → 0.174 程度で頭打ち.spp 増加は費用対効果なし.残差 4.3× は物理モデル要因と確定.spp=1024 を基準として確定.

  • 次のアクション: 物理モデル側を疑う.最も効きそうな反射率を振る → Step 8-2 へ.

Step 8-2: 反射率スイープ (R=0.75〜0.92)

  • 日付: 2026-05-18

  • 背景・問題意識: 8-1 で「物理モデル要因」と確定.MiniTIAS は白筐体内壁の多重反射で照明を均一化する設計なので,内壁反射率が直接効くはず.暫定 0.85 が低めの可能性.

  • 仮説(物理動機): 反射率↑ → 多重反射光(より均一な ambient 成分)↑ → 評価板全体が均一に近づく.インテグレーティングスフィア近似 1/(1-R) で R=0.85 → 0.92 で実効反射が 6.7 → 12.5(+88%).

  • 試した変更: materials.printer_white.reflectance を 0.75, 0.80, 0.85(基準), 0.90, 0.92 の 5 点で振る.spp=256, depth=12, linear ドメイン評価.

  • 期待した効果: 単調改善.実測 (CoV=0.0427) に近づける R を見つける.

  • 実際の結果:

    RCoV勾配 %C/P
    0.750.217325.911.350
    0.800.203424.001.316
    0.85(基準)0.189322.081.283
    0.900.175320.151.252
    0.92(マット白プラ実用上限)0.169719.421.241
  • 解釈: 全指標が R に対し単調・線形に改善するが感度が低い(∂勾配/∂R ≈ −38 %/単位,linear).実測 (CoV=0.0427) 到達には外挿で R ≈ 1.2〜1.4 が必要 = 物理範囲外.

  • 学び: 反射率は弱い二次レバー.これ単独では差を閉じられない.構造的に違う何か(評価方法・座標系・ドメイン)を疑うべき.

  • 次のアクション: もっと大きな自由度を持つレバーを探す.評価方法自体を疑う → Step 8-3 へ.

Step 8-3: OETF 順方向適用(手法訂正)

  • 日付: 2026-05-18 頃(コミット 26904da)

  • 背景・問題意識: 反射率スイープでも残差 4× を解消できない.「シミュ linear と実測 sRGB を直接比較」が成立しているか改めて疑った.実測データ提供側 README にも「シミュを線形のまま比較すると勾配/CoV の絶対値は変わる」と明示されていた(見落としていた).

  • 仮説(物理動機): 実測 PNG は実機 ISP の sRGB ガンマ(OETF, IEC 61966-2-1) が掛かった非線形符号化値(Camera2 YUV_420_888 → BT.601 は定義上ガンマ済み R'G'B' 上の量).シミュは linear.「無次元指標はスケール不変」は線形変換のみ成立,非線形 OETF 下では成立しない(Σwᵢ·f(xᵢ) ≠ f(Σwᵢ·xᵢ)).OETF を順方向適用してドメインを揃えれば,物理量差ではなく「符号化ドメイン不一致」だった分が消える.

  • 試した変更:

    • src/sm_tias_lightsim/evaluation/oetf.py を新規実装(標準 sRGB OETF + 露出ソルバ).
    • EvaluationConfig.oetf スキーマ追加(SPEC_02 参照).
    • sm-evaluate に統合.ROI 抽出後・指標算出前に OETF を順方向適用.
    • configs/eval_baseline.yaml で有効化.configs/eval_real.yaml は非適用(実測 PNG への二重適用禁止).
    • 露出は AE が制御する量=実測 ROI mean (146.71) に対数二分でアンカー(線形ゲインなので形状指標には自由度を持ち込まない;OETF が非線形なため「曲線上の動作点」を合わせる原理的アンカーとして必須).
  • 期待した効果: ガンマ非線形性で「同じ物理だが見かけが違う」分が解消,残差が大きく縮む.データに合わせて回す係数はゼロ.

  • 実際の結果:

    ソース空間CoV勾配 %C/P
    R0.85, d8, spp1024linear0.18324.651.327
    〃sRGB0.08912.571.144
    R0.85, d12, spp256sRGB0.09111.161.126
    R0.92, d12, spp256sRGB0.0819.721.108
    実測 TARGETsRGB0.04276.101.0650
    • CoV 0.183 → 0.089(残差 4.3× → 2.1×,67% 解消)
    • 勾配 24.65 → 12.57(残差差 18.6 → 6.5,65% 解消)
  • 解釈: 見かけ差の約 2/3 が符号化ドメイン不一致だったと判明.無彩色シーンでは「linear RGB → チャネル別 OETF → Rec.709 加重和」と「luminance 直接 OETF」が厳密一致(Rec.709 重みは合計 1,R=G=B の無彩色画素では Σwᵢ·f(x) = f(x) = f(x·Σwᵢ)).OETF は不整合を作るのではなく 消す操作.OETF 前のシミュ linear luma と実測 sRGB luma は別ドメインだった.

  • 学び:

    • 寄与順を訂正: OETF(最大・約 2/3)> ISP LSC(残差主因候補)> 反射率(弱い).旧版「主因は ISP レンズシェーディング (83%)」は OETF を抜かした交絡判断で誤りだった.
    • 「データに合わせて回す係数はゼロ」が成立する標準変換は overfitting なしで残差を大きく縮められる.
    • 標準仕様(IEC 61966-2-1, Rec.709)の存在を前提として常に確認すべき.「実機カメラ出力は例外なくガンマ符号化」が標準前提.
  • 次のアクション:

    • OETF 順方向適用を sm-evaluate へ正規実装(コミット 26904da).
    • 残差 1.6〜1.9× は LSC で対処予定(Step 8-N 未着手).残差はガンマ曲線いじりで消さず正直に保持.

Step 8-4: max_depth 検証 (8 → 12)

  • 日付: 2026-05-18 頃
  • 背景・問題意識: max_depth=8 で打ち切ると 0.85^8 ≈ 27% のエネルギーが「未追跡」のまま残る.均一化に効く 後段多重反射 を取りこぼしている可能性.
  • 仮説(物理動機): 後段反射光は「均一な ambient 成分」(部屋の壁が消灯後も薄明るく見える理屈,閉じた拡散面でのインテグレーティングスフィア応答).これを取りこぼすと勾配が 系統的に過大評価 される.
  • 試した変更: 同条件で render.max_depth を 8 と 12 で比較レンダ.
  • 期待した効果: depth↑ で勾配 ↓.
  • 実際の結果: 同一 R=0.85, spp=1024 で
    • 勾配 (linear): 24.65 → 22.08 = -2.6 pt
    • 勾配 (sRGB): 12.57 → 11.16 = -1.4 pt
    • CoV (sRGB, R0.85): 0.089 → 0.091(誤差レベル,方向は spp ノイズに埋もれる)
  • 解釈: depth=8 は系統的に勾配を 過大評価.エネルギー 27% 未追跡分のうち均一寄与分が効いていた.
  • 学び:
    • キャリブ用途は depth≥12 推奨.
    • レンダコスト ~1.5× になるので,確定 configs/scene_baseline.yaml の render.max_depth は 現状 8 のまま(既知差分 #8).
    • 3D ベイクは可視化用途で 均一性をなるべく忠実に見せたいので,--bake-max-depth 16 で render 設定から独立化(コミット a0fe07d).「2D 校正都合」と「3D 可視化忠実性」を分離.
  • 次のアクション: 確定 YAML の depth 変更は保留.3D ベイクのみ独立化で適用.

Step 8-5: 3D 可視化改善(path ベイク・テクスチャ投影・幾何カリング etc.)

  • 日付: 2026-05-18 〜 2026-05-XX(コミット 7181efa, c32ccd6, a0fe07d)
  • 背景・問題意識: 内部キャリブ調整は 8-3 までで頭打ち感.並行して シミュ結果の「見せ方」(3D ビュー)が分かりにくい問題が浮上.特に「評価板はテクスチャ投影で正確,壁は per-vertex ベイクで荒い」という 手法非対称 が,物理判断の混乱を生んでいた.
  • 仮説(物理動機,複数):
    • per-vertex ベイク(直接光 + cos) → path ベイク(多重反射込み per-face MC) にすれば物理的に正確になる.
    • 評価板・壁・カバーをすべて同じ手法(path ベイク)で計算し,共有 clim・統一着色 で見せれば,相対比較が物理に基づく.
    • 隣接内壁の「見かけ 100 倍段差」は物理ではなく,法線が外を向く「外向き面(≈ 0 入射)」の混在 が主因では?
  • 試した変更:
    • src/sm_tias_lightsim/visualize/baker.py に mode="path"(scalar_rgb,コサイン重点 hemisphere MC,多重反射込み per-face 照度)追加.exclude_mesh_ids 対応.max_depth 引数で render 設定から独立.
    • src/sm_tias_lightsim/visualize/viewer.py 全メッシュ統一着色(共有 lit-clim・log/linear・単一カラーバー・viridis・depth peeling)を既定化.
    • --render <luminance.npy> で評価板への任意テクスチャ投影(E = π · L / ρ で壁と同一 W/m² スケール).
    • --bake-cache <npz> で 1 回計算 → 以後即時.
    • --cull-outward(既定 ON)で外向き ≈ 0 面を非描画.
    • --bake-max-depth(既定 16)で render 設定から独立.
    • --no-sensor-marker / --no-led-markers / --no-markers でマーカー個別非表示.
  • 期待した効果: 評価板も壁も多重反射込みで正しく着色,共有 clim で物理どおりの相対比較が可能になる.外向き面除外で「暗殻の濁り」「見かけ段差」が消える.
  • 実際の結果:
    • 評価板を path ベイクで多重反射込み着色.壁・カバーとも統一 clim でほぼ均一に見える(物理どおり).
    • 外向き面除外で「隣接内壁の見かけ 100 倍段差」が解消.内壁照度自体は同一手法ベイクで ~1〜2 倍以内 = 物理どおりほぼ均一だった.
    • 一方,per-face MC ベイク特有の シーム/粒状感/scalar_rgb の遅さ(高 samples 非現実的)は残る.
  • 解釈:
    • 「見え方の問題」と「物理の問題」を 厳格に分離: 同一手法で計算すれば物理は均一.見かけ段差は 手法非対称(評価板=テクスチャ・壁=ベイク)と 外向き面の混入 で説明できた.
    • per-face MC ベイクの原理的天井(粒状感・継ぎ目)は 対症療法で消えない.
  • 学び:
    • 物理量と計算手法の対称性を常に問う: 同じ物理量を異なる手法で計算してはいけない.
    • 見え方 ≠ 物理: 見かけ 100 倍段差が出ても,同手法で再計算すれば 1〜2 倍以内なら物理は均一.
    • per-face シーム/粒状感の解消は 全メッシュ UV 統合シームレスライトマップベイク が必要 = 別プロジェクト規模.
  • 次のアクション:
    • 精細な評価は引き続き 2D sm-render/sm-evaluate(path tracer)で(校正済みの定量結果,不変).
    • シーム解消は別タスク(必要時に /implement).
    • path ベイク高速化(wavefront/GPU 化)も別タスク.

Step 8-6: LED 物性確定 (LP-2835D90VW)

  • 日付: 2026-05-27(コミット f5048a4)

  • 背景・問題意識: SPEC_03 既知差分 #3「LED 1 個あたりの実 W 値が未検証」を残していた.現状 radiance=2807.247 は実測 mean アンカーで決まった校正値で,規格値からの導出ではない.LED 物性が確定すれば,独立に検証できる.

  • 仮説(物理動機): 規格値から radiance を独立推定し,現校正値と並べる.大きく合えば 物理妥当性の担保,合わなければ何かのレバーの不確かさを炙り出せる(縮退の所在が分かる).

  • 試した変更: LED Paradise 商品ページから物性取得.SPEC_03 LED セクションを拡張.

    • 型番: LP-2835D90VW(Ra98 SunLightLED 2835 チップ LED 4000K)
    • 電気: Vf 3.1 V (typ), If 60 mA (max),駆動条件は 規格通り 60 mA フル(ユーザー確認)
    • 光学: Φv 16–19 lm @ 60 mA(中央値 17.5 lm),配光角 120°(半値全幅,Lambertian と整合),Ra 98,色温度 4000 K
    • 詳細 IES プロファイル:未提供(LED Paradise は公開せず)
  • 期待した効果: 校正値 2807 と規格推定が大きく合うか,どこに不確かさが残るかを明確化.

  • 実際の結果: 規格値から radiance を独立計算

    ステップ値
    Φv(typ 中央値)17.5 lm
    LER(4000K Ra98 典型値)≈ 280 lm/W
    Φe = Φv / LER0.0625 W
    A = 2.8 × 3.5 mm9.8 × 10⁻⁶ m²
    規格推定 L = Φe / (A·π)≈ 2030 W/(m²·sr)
    現状校正値2807 W/(m²·sr)
    比1.38×
    • サニティチェック: ウォールプラグ効率 = Φe / (Vf·If) = 0.0625 / 0.186 ≈ 33.6%(実用 LED として妥当範囲,Cree 等で 40%・廉価品で 25–30%).
    • integrating sphere 近似で 1.38× を反射率に帰着: R=0.85 → 0.89 で (1-0.85)/(1-0.89) = 1.36×(観測 1.38× とほぼ一致).R=0.89 はマット白プラ実用上限 0.92 の範囲内.
  • 解釈:

    • 規格 → radiance の換算は物理的に整合(桁・係数とも).
    • 校正値が 1.38× 高い差分は 反射率の不確かさに帰着可能(物理範囲内 R≈0.89 で説明可).LED 側が大きくおかしいわけではない.
    • 形状指標への影響なし(線形ゲイン).
  • 学び:

    • 物理レバーを 1 個ずつ独立化する作業は,絶対値が動かなくても 不確かさの所在を局所化する 価値がある.
    • 既知差分 #3 をクローズ(LED 物性確定・物理整合確認済み).残課題は反射率の実フィラメント分光データでの再校正(既知差分 #1)に帰着.
    • 配光は「データシート記載が配光角 120° のみ,IES 未提供」.Lambertian 仮定は数学的に整合だが厳密検証は不可.実 SMD 2835 はやや前方凸の可能性があり ISP LSC と打ち消し合う近似として現状妥当.
  • 次のアクション: 次は LED 周辺幾何の検証(発光面サイズの妥当性)→ Step 8-7 へ.

Step 8-7: 発光面サイズ検証 (2.8×3.5 vs 1.5×1.5,Φe 保存)

  • 日付: 2026-05-27

  • 背景・問題意識: 「現実装はパッケージ外形 2.8 × 3.5 mm を発光面として使う」仮定が物理的に正しいか疑問.実 SMD 2835 の真の発光部は チップ + 蛍光体 ~1.5 × 1.5 mm(パッケージ面積の ~23%)のみで,周りは白プラスチック筐体(光らない).

  • 仮説(物理動機,複数):

    • 評価板まで 65 mm vs 発光面 ~1.5〜2.8 mm → distance/size ≈ 25〜40 で 遠方界点光源近似が成立.形状指標は発光面サイズに不変のはず.
    • 絶対値(mean)は校正で吸収済みなので変化しないはず.
  • 試した変更: configs/scene_baseline_emitter_real.yaml を Python ワンライナーで自動生成.

    • 全 18 LED の size: 2.8, 3.5 → 1.5, 1.5 mm
    • 全 18 LED の radiance: 2807.247 → 12227.12 W/(m²·sr)(スケール係数 4.356 = 元面積 / 新面積)
    • Φe = L · A · π は厳密に保存(0.0864 W per LED で同一).
    • linear ドメインで sm-evaluate 比較(OETF 経由しない直接比較).
  • 期待した効果: mean ≈ 不変,CoV/勾配/C/P/max-min/radial profile ≈ 不変(点光源近似が成立する遠方界).

  • 実際の結果(linear,同条件):

    指標元 (2.8×3.5)検証 (1.5×1.5)比評価
    mean152.52429.992.82×⚠️ 予想外に大きく変化
    std27.8580.122.88×mean スケールに比例
    CoV0.18260.18631.02×✅ 形状指標 ≈ 不変
    勾配 %24.6526.211.06×✅ 形状指標 ≈ 不変
    C/P1.3271.3551.02×✅ 形状指標 ≈ 不変
    max/min4.284.361.02×✅ 形状指標 ≈ 不変
    放射プロファイル中心/端1.631.681.03×✅ 形状指標 ≈ 不変

    画像保存先: output/baseline_linear_npy/ と output/emitter_real/(各 figures/luminance_map.png, radial_profile.png, histogram.png, zone_map.png).放射プロファイルの曲線形は目視で瓜二つ,色スケールのみ違う.

  • 追跡調査: 予想外の 2.83× mean 上昇の機序を STL 幾何分析で追跡.

    • LED 基板カバー(meshes/LED基板カバー.stl)は z=-66.6〜-64.1 の 2 階建て構造(天井梁 + 底板).
    • LED 中心 z=-65.3 は底板 z=-65.5 の上面から 0.2 mm の至近距離.
    • 底板には LED ごとに 複雑な曲線形の穴あり(trimesh の euler_number=-4 = genus 3 と整合).LED は穴の中に位置.
    • 仮説: 厚みゼロの面光源(z=-65.3)と固体(z=-65.5〜-66.6)の 0.2 mm coplanar 状態で Mitsuba 上に予期しない遮蔽相互作用が起きている可能性.完全機序解明には Mitsuba のレイトレース内部追跡が必要(時間 vs 効果が合わないので深入りせず).
  • 解釈:

    • 形状指標については仮説(点光源近似)が 実証成立: CoV/勾配/C/P/max-min/radial profile すべて 1〜6% 以内(spp=1024 の MC ノイズ範囲程度).
    • 絶対値については仮説が 不成立: mean が 2.83× も動いた.発光面サイズと LED 周辺幾何(カバー)の縮退で,両者は分離できない.
    • 校正値 2807 は「2.8 × 3.5 mm 発光面 + 現カバー幾何」の組み合わせで決まる縮退値.発光面サイズだけ変えると mean が大きく動くが,それを校正で吸収させれば形状指標は変わらない.
  • 学び:

    • 「点光源近似で発光面サイズは結果に効かない」は 不完全な命題:形状指標については成立,絶対値については局所幾何との縮退で不成立.
    • 現実装は「発光面が物理的には不正確(パッケージ外形を使用)」だが,シミュ目的(相対分布評価)の妥当性は守られている.
    • 厚みゼロ面光源と固体の coplanar/near-coplanar 配置は,Mitsuba 上での挙動が直感に反することがある.将来 LED 周辺幾何(カバー設計)を変更する場合は,発光面サイズも同時に見直す必要がある.
    • 完全機序解明より「確認できた事実を正直に記録」を優先する判断は,時間 vs 効果のトレードオフで妥当.
  • 次のアクション:

    • SPEC_03 LED セクションに「発光面サイズの近似と検証」記述を追加(本ドキュメント完成後).
    • 検証用ファイル configs/scene_baseline_emitter_real.yaml, configs/eval_baseline_linear.yaml, output/emitter_real/, output/baseline_linear_npy/ は 検証アーティファクトとして保持(後から再現できるように).
    • 本筋 LSC モデル化(Step 8-N)に進む.

Step 8-8: linear 評価モードへの mean 揃え正規化導入

  • 日付: 2026-05-27

  • 背景・問題意識: Step 8-7 で size 1.5×1.5 検証時,linear ドメインでの絶対値 mean が 429.99(baseline は 152.02)まで跳ね上がった.形状指標は不変だったが,輝度マップを画像で並べると color scale が桁違いで「形」の比較が阻害される.TEST_03 輝度マップ形状追跡 で問題化.

  • 仮説(物理動機): OETF 順方向適用(Step 8-3)の露出アンカーと同じ思想を linear ドメインに対称展開する.線形ゲイン α = target_mean / mean は形状指標 (CoV / 勾配 / C/P / max-min) に対し 厳密に不変 なので,「絶対値スケールだけ揃える」操作として安全に適用できる.

  • 試した変更: sm-evaluate に normalization セクションを追加実装.

    • 新規モジュール src/sm_tias_lightsim/evaluation/normalize.py の apply_mean_anchor(values, target_mean) -> (normalized, alpha).
    • EvaluationConfig スキーマに NormalizationConfig(enabled / type Literal"mean_anchor" / target_mean)追加.
    • model_validator で OETF + normalization 同時有効化を ValidationError として禁止(露出アンカー二重適用回避).
    • ROI 抽出後・OETF 前段に正規化ステージを挿入(パイプライン 4 に該当).
    • configs/eval_baseline_linear.yaml に normalization.enabled: true / target_mean: 146.7146 を設定.
  • 期待した効果: linear 評価結果の mean が常に 146.7146 に揃い,形状指標は変更前と一致.

  • 実際の結果(output/baseline/luminance.npy で動作確認):

    指標正規化前 (mean=152.52)正規化後 (mean=146.71)差
    mean152.5204146.7146target_mean に厳密一致
    CoV0.18260.182577≈ 不変(誤差レベル)
    max/min4.27594.2759厳密一致
    C/P1.32711.3271厳密一致
    勾配 %24.6524.65不変
    std27.8526.7868α=0.962 倍にスケール(想定通り)

    α = target_mean / src_mean = 146.7146 / 152.52 = 0.961934.

  • 解釈: 線形ゲイン正規化の物理的不変性が実証された.形状指標は誤差レベルで一致し,mean は厳密に target_mean に揃う.後段の TEST_03 比較パネル再生成に向けた評価本体の対称化が完了.

  • 学び:

    • 「データに合わせて回す係数ゼロ」の操作は,linear / sRGB 両ドメインに対称に展開できる.OETF 露出アンカー(Step 8-3)と本 Step は同じ思想で,適用ドメインが違うだけ.
    • 排他制御をスキーマレベル(model_validator)で実装することで,二重適用のリスクを使用時点ではなく設定時点で防げる.
    • 単体テスト・スキーマテスト・CLI 統合テストの 62 件追加で挙動の厳密性(mean 一致・形状指標不変)が保証された.
  • 次のアクション:

    • TEST_03 の比較パネル生成スクリプト (scripts/build_luminance_evolution_panel.py) が利用する Step 8-1 / 8-7 の入力を linear + normalization 評価結果に揃え,color scale を共有して「形」の比較を強化する(別フェーズ・別コミット).
    • 本筋 LSC モデル化(Step 8-N)は引き続き未着手.

Step 8-9: LED 位置を Fusion 360 設計 STL から抽出して反映

  • 日付: 2026-05-28

  • 背景・問題意識: 既知差分 #2「左右 LED 基板の正確な位置・向き」が未解消だった.現 YAML の LED 18 個の座標は 「下基板を Z 軸まわり ±90° 回転」と推定で算出していたため,Fusion 360 設計とのズレが残る可能性.特に下基板内の LED 6 個の X 配置を等間隔 8.7mm と仮定 していたが,実機写真 (REFERENCE/led_board_closeup.jpg) を見ると 3 個 + 部品ギャップ + 3 個 の配置と疑われていた.

  • 仮説(物理動機): Fusion 360 のアセンブリ全体を STL でエクスポートすれば,3 基板分の LED 18 個 + LED 基板カバー 3 枚をワールド座標で取得できる.それを真の値として YAML を更新すれば,既知差分 #2 をクローズできる.形状指標への影響は不明だが「物理表現の正確さ」が向上する.

  • 試した変更:

    • configs/meshes/SmTIASv3.stl を Fusion 360 で全体エクスポート(File → Export,ワールド座標系)
    • 抽出スクリプト scripts/extract_led_positions_from_stl.py を新規作成: 連結成分分割 (union-find) → LED 候補 (extents ≤4×4×1.5mm) / カバー候補 (extents 細長板状) で分類 → 各 LED に最寄りカバーを紐付け → bottom/right/left 自動命名 + 基板内ソート
    • 抽出結果 configs/leds_extracted.yaml を scene_baseline.yaml の lights セクションへ置換(18 LED)
  • 期待した効果:

    • 既知差分 #2 のクローズ
    • 形状指標は 多重反射が支配的なら微変化のみ,大きく動かない予想
    • LED 配置の物理的正確性が向上
  • 実際の結果(output/baseline_v3_leds/,linear + normalization 評価):

    指標旧 LED(推定値)新 LED(Fusion STL)差
    mean (pre-normalize)152.52167.95+10.1%
    α (mean 揃え係数)0.9619340.873423-10%
    mean (post-normalize)146.7146146.7146同(アンカー一致)
    CoV0.182580.18151-0.6%
    勾配 %24.6524.13-0.5pt
    C/P1.3271.318-0.7%
    max/min4.27594.2713≈ 0
    std26.7926.63-0.6%
  • LED 位置の主な変更:

    観点旧 YAML新 STL(Fusion)
    下基板 X 配置等間隔 8.7mm × 6(-21.67〜+21.67)3+ギャップ+3(4.2mm 間隔 + 中央 10.8mm + 4.2mm 間隔,-10.0〜+17.6)
    下基板 X 中心0.0+3.8(右オフセット)
    左右基板 X 距離±70.2±66.0(4.2mm 内側)
    左右基板 Y 中心0.0-12.0(やや下寄り)
    Z 位置-65.3-66.1(0.8mm スマホ側)
    direction(全 LED)(0, 0, -1)(0, 0, -1)(不変)
  • 解釈:

    • 形状指標は 1% 以内のほぼ不変.多重反射が支配的で,LED 位置の数 mm レベルの誤差は ROI 上で平滑化される(評価板まで 65 mm に対し誤差 ~4 mm は約 6%、多重反射でさらに薄まる).
    • 絶対 mean が +10% 増加.新 LED 配置の方が評価板への光量効率が高い(理由: 不明だが,下基板 X 中心が +3.8mm 右オフセットしていて評価板中央への幾何関係が変わった可能性).mean アンカーで吸収されるため形状指標には影響しない.
    • 形は出発点と同じ Y 軸単調勾配(TEST_03 比較パネル で確認).LED 位置の正確化も「形を変えない変更」の一例.
    • 実機写真 (REFERENCE/led_board_closeup.jpg) で LED 配置が「3+ギャップ+3」と一致.これは中央の電流制限抵抗 2 個分のスペース(10.8mm)に対応.
  • 学び:

    • 設計データ (Fusion 360) を真実の源にすると物理表現が正確になる.手動推定座標はエラーが入りやすい.
    • 形状指標は LED 位置の細かいズレに対し頑健.多重反射が支配的なシーンでは数 mm の誤差は薄まる.これは Step 8-7 の発光面サイズ検証と同じ「点光源近似」の系の発見.
    • これで既知差分 #2 がクローズ.既存の改善ステップ 8-1〜8-7 + 本 Step 8-8/9 で 「形を変えない変更」の集合が完成.本筋 LSC モデル化(Step 8-N)に進む準備が整った.
  • 次のアクション:

    • SPEC_03 既知差分 #2 をクローズ
    • 本筋 LSC モデル化 (Step 8-N) に進む

Step 8-10: LED 配光を spot emitter で表現(X 方向の部分改善)

  • 日付: 2026-05-28

  • 背景・問題意識: Step 8-1〜8-9 で「形を変えない変更」を網羅し,emitter 指向性が形に効くかどうかを次に検証.データシート LP-2835D90VW の配光角 120° (FWHM) は数学的に厳密 Lambertian(現状の area emitter)と整合するが,Mitsuba の spot emitter で smoothstep 補間を使うと「中央集中度」が違うため,多重反射経由の評価板への分布が変わる可能性.

  • 仮説(物理動機):

    • LED の指向性プロファイルが変わると,LED 直下の壁の局所照度が変わる
    • 多重反射経由でも評価板への分布パターンに微変化が出る可能性
    • ただし「Y 軸単調勾配」は LED 配置(下・左・右の U 字型 3 基板,上対応の基板なし)の物理的偏りなので emitter 指向性では変えられない予想
  • 試した変更:

    • src/sm_tias_lightsim/scene/schema.py に SpotLight クラスを新規追加(type='spot', position, direction, cutoff_angle, beam_width, intensity).LightConfig Union に組み込み
    • src/sm_tias_lightsim/scene/lights.py に spot 分岐を追加(look_at で to_world transform 構築 → Mitsuba spot emitter dict)
    • configs/scene_baseline_spot.yaml を新規作成:18 LED を area → spot に変換(flux Φ=0.0864 W per LED 保存)
    • パラメータ: cutoff_angle=90°,beam_width=30° (FWHM 120° と一致する最も標準的な設定).数学的に半値(I/I_0=0.5)は θ=60° に出る
    • intensity I_0=0.026784 W/sr(smoothstep 配光積分 K=3.227 sr で I_0 = Φ/K)
  • 期待した効果: LED 指向性で X 方向(左右対称)の偏りが変わる可能性.Y 方向は不変予想.

  • 実際の結果(output/baseline_spot/,linear + normalization 評価):

    指標Step 8-9 (area)Step 8-10 (spot)差
    mean (pre-normalize)167.9511.49-93%(spot は約 14.6× 暗い)
    α (mean 揃え係数)0.87312.77× 14.6
    mean (post-normalize)146.71146.71同(アンカー)
    CoV0.1810.189+4.4%(数値悪化)
    勾配 %24.1327.69+14.7%(数値悪化)
    C/P1.3181.383+4.9%(数値悪化)
    max/min4.274.15-2.8%(誤差レベル)
  • 目視観察(重要): 数値指標は悪化したが,輝度マップを目視で比較すると下端の明るい領域がやや中央寄りに集中し,左右端は他のシミュより暗い.X 方向の対称性が部分的に改善された.TEST_03 比較パネルで「他のシミュ 4 種と spot の 5 番目」を並べると spot のみ「下中央集中型」と判別できる.

  • 解釈:

    • spot の中央集中型配光(cutoff=90, beam=30)で LED 真下の壁が局所的に強く照らされる
    • その結果,ROI 下中央が他より明るく,下端左右は相対的に暗く
    • X 方向に「中央集中型」のパターンが形成された(実機の中央ピークの X 方向成分に部分的に符号一致)
    • Y 方向の偏りは LED 配置(下・左・右の U 字型 3 基板配置で上対応の基板がない)の物理的事実なので解消されない(LSC モデル化が依然必要)
  • 副次的な発見(未解明): flux 保存で I_0 を計算したのに mean が 14.6× も暗くなった.仮説:(1) Mitsuba spot の falloff 関数が cos ドメインの smoothstep(私の計算は角度ドメイン smoothstep)で I_0 計算が不正確,(2) 点光源 vs 面光源で多重反射の光路長が違う,(3) spot の集中性で「LED 真下の壁」に光が偏り多重反射数が増えて減衰.本筋ではないため深掘りしない.

  • 学び:

    • 数値指標と「形」の改善は別軸.「同心円状に近づいた」と目視で気付くことは CoV/勾配の集約値だけでは捕捉できない.TEST_03 の「2 軸評価」の妥当性が再確認された
    • emitter 指向性は形の一部(X 方向)を変える.これは Step 8-1〜8-9 の「形を変えない変更」とは違う性質の変更
    • ただし 全方向で実機と一致するには LSC モデル化が依然必要(Y 方向の中央ピーク).spot は LSC と並列して使える補完手段
  • 採用判断: scene_baseline.yaml の area light はそのまま残し,configs/scene_baseline_spot.yaml を並列保持.本格採用するかは LSC モデル化との組み合わせ評価後に判断.SpotLight クラス・lights.py 分岐は将来の IES 実装等の基盤として残す.

  • 次のアクション:

    • 本筋 LSC モデル化(Step 8-N)に進む
    • LSC + spot の組み合わせ評価は LSC 実装後

Step 8-11: データシート準拠の照明モデル統合(spot cos^1.2 + R=0.89)

  • 日付: 2026-05-28

  • 背景・問題意識: Step 8-10 で spot emitter (cutoff=90, beam=30 = FWHM 120° の標準解釈) の試行で X 方向の対称性が部分改善した.これを データシート LP-2835D90VW + 物理的整合性 の両面で詰めるとどうなるか検証.

  • 仮説(物理動機):

    • A. パッケージ整合: data sheet 規格値 (Φv=17.5 lm @60mA) と LER 280 lm/W から radiance を独立推定 (Φe=0.0625 W/LED).反射率を Step 8-6 で導出された 0.89(規格 LED + 校正値 mean の物理整合点)に変更
    • B. spot 配光詳細化: 同等品 (Cree/Samsung/Lumileds 系 SMD 2835) の典型配光 cos^1.2 (前方凸) を spot で表現.半値 55.86° (FWHM 111.72°,データシート 120° よりやや前方寄り)
  • 試した変更 (configs/scene_baseline_datasheet.yaml 新規):

    • LED 18 個を spot に変換:cutoff_angle=85°,beam_width=26.72°,I_0=0.021951 W/sr (Φe=0.0625 W を smoothstep 配光積分 K=2.847 sr で割って算出)
    • 反射率 0.85 → 0.89(5 メッシュ共有の printer_white)
  • 期待した効果: 物理的に正確 + Step 8-10 の X 方向改善が継続 + 反射率上昇で多重反射が増えて Y 方向もわずかに均一化される可能性.

  • 実際の結果(output/baseline_datasheet/,linear + normalization 評価):

    指標Step 8-9 (area, R=0.85)Step 8-10 (spot 90/30, R=0.85)Step 8-11 (spot 85/26.72, R=0.89)
    mean (pre-normalize)167.9511.4910.26
    α (mean 揃え係数)0.87312.7714.30
    CoV0.1810.1890.183
    勾配 %24.1327.6926.79
    C/P1.3181.3831.366
    max/min4.274.154.11
  • 目視観察: 形は依然 Y 軸単調勾配.Step 8-10 と 8-11 の差は微小で,X 方向の集中度がわずかに緩和された程度(反射率 0.89 の多重反射均一化と cos^1.2 集中度の打ち消し合い).実機の中央ピーク楕円には近づかず.

  • 解釈:

    • データシート従順度を上げ反射率を物理整合点に動かしても,形は構造的に変わらない(依然 Y 軸単調勾配).多重反射と LED 配置の Y 軸偏りが支配的.
    • 数値指標は Step 8-9 area より悪化のまま (CoV +1%, 勾配 +11%, C/P +4%).数値の意味では「悪化」だが,物理的には「データシート通り」.
    • 「物理的正確性」と「実機形への近づき」は別軸.データシート準拠は物理正確性を担保するが,形改善には LSC 必要.
  • 副次的な発見:

    • α=14.30 で mean が大きく上がる(pre-norm 10.26).spot+反射率 0.89 でも area+0.85 ほど評価板に光が届かない.これは LED 単体 flux 0.0625 W (規格) vs 校正値由来 0.0864 W (1.38× 多い) の物理差が表面化したもの.
    • 「データシート規格値」で動かすと mean は実機 mean に直接合わない(反射率 0.89 でも届かない).真の物理を保つには mean を実機にアンカーする校正値 (radiance=2807) を依然必要とする.これは Step 8-6 で議論した「校正値は局所幾何・反射率不確かさの累積吸収」が真であることを再確認.
  • 学び:

    • データシート準拠の物理モデルは正しいが,実機の校正値 (mean=146.71) を物理パラメータで一意に再現するには反射率以外のレバー (LED 配光・幾何・材料異方性) も同時に動かす必要がある.
    • 既知差分 #1 (反射率) のクローズは依然 実フィラメント分光データの実測が必要.同等品 0.89 の推定値では校正一致しない.
    • 形の改善は依然として LSC モデル化 (Step 8-N) が唯一の道.
  • 採用判断: scene_baseline.yaml は area + R=0.85 のまま(Step 8-9 状態).configs/scene_baseline_datasheet.yaml は 「データシート従順版」として並列保持.LSC モデル化との組み合わせ評価後に本格採用可否を判断.

  • 次のアクション:

    • 本筋 LSC モデル化(Step 8-N)に進む
    • LSC + データシート従順版の組み合わせは LSC 実装後

Step 8-12: Helmholtz 相反原理の Mitsuba 上での実証検証

  • 日付: 2026-05-28

  • 背景・問題意識: 「光線追跡の方向 (path/ptracer) で形が変わるか」 という直感に対して,数学的事実 (Helmholtz 相反原理=光線追跡の方向は無限サンプル極限で同じ結果) を Mitsuba 上で実証するか,例外があるかを実機検証.LSC モデル化に進む前に「方向変更で形を実機に近づける」可能性が無いことを確証するため.

  • 仮説(物理動機):

    • Helmholtz 相反原理: BRDF は方向対称,光輸送方程式は時間反転対称.バックワード (path) とフォワード (ptracer) は同じ積分の異なるサンプリング順序.収束先 (真値) は同じ.
    • 違いは収束速度 (分散) と Mitsuba 実装の正規化の細かい差異だけ.
    • MiniTIAS のような「センサ小・光源分散・拡散主体」シーンでは ptracer が極端に非効率 → spp が大きく必要.
  • 試した変更:

    • schema.py の RenderConfig.integrator Literal に ptracer を追加(4 値: path/direct/volpath/ptracer)
    • configs/scene_baseline_perspective_path.yaml / configs/scene_baseline_perspective_ptracer.yaml を新規作成(同じシーン,sensor 切替: orthographic → perspective, fov=90°, scalar_rgb, spp=4096)
    • 注意: orthographic + ptracer は Mitsuba 3 で Endpoint::sample_direction(): not implemented! でエラー.orthographic sensor が ptracer の光子受け取りインタフェースを実装していない仕様.そのため検証は perspective sensor で実施.
  • 期待した効果: 両方の結果(同じシーン)が同じ形になることを実証.それで「方向変更では形を変えられない」が確定.

  • 実際の結果 (spp=4096, scalar_rgb, perspective):

    指標path (backward)ptracer (forward)比
    mean160.24319.041.99×(Mitsuba 実装の正規化差)
    std29.1574.942.57×
    max212491923×(ptracer の光子集中スパイク残)
    Y プロファイル top67.36110.141.64×
    Y プロファイル mid (Y=256)190.99380.441.99×
    Y プロファイル bot137.05220.981.61×
    bot/top 比(形の指標)2.0352.0060.986 ←ほぼ完全一致
  • 解釈:

    • 形の一致: bot/top 比が誤差 1.4% で一致.Y プロファイルの曲線形状は path と ptracer で 驚くほど一致.Helmholtz 相反原理が Mitsuba 上で「形について」実証された.
    • 絶対値の差: mean が 1.99× 違う.これは Mitsuba 3 の path/ptracer 出力 luminance の正規化差 によるもので,形には影響しない(線形ゲイン).
    • ptracer のノイズ: max スパイク 4919 が残る(光子集中の確率的事象).spp を上げれば収束するが,spp=4096 でも形は明確に見える.
  • 学び:

    • 光線追跡の方向は「形」を変えない:これが MiniTIAS のような拡散主体シーンでは Mitsuba 上でも数値的に確認された.
    • 絶対値スケールは integrator 実装の正規化差で違う:物理的には等価でも,Mitsuba の出力単位定義が path/ptracer で違う.これは「形」の議論には影響しない.
    • orthographic + ptracer は Mitsuba 3 では実行不能:これは MiniTIAS のシーン構成では path/ptracer を直接比較できない技術的制約.perspective sensor でのみ検証可能だった.
    • 方向変更で形を実機に近づける道は無いことが(部分的に)実証された.LSC モデル化が唯一の道との結論を強化.
  • 次のアクション:

    • 本筋 LSC モデル化(Step 8-N)に進む
    • 注: 後続の Step 8-13 で LSC モデル化は不要と確定(実機側で LSC 順方向適用する方針に切替)

Step 8-13: 新方針 (実機 DNG + LSC linear) でのシミュ突合

  • 日付: 2026-06-02

  • コミット: 本イテレーション完了時点(feature/dng-loader-import ブランチで S2→Step D→C'→TECH_07/08 を累積)

  • 背景・問題意識: TECH_06 で MiniTias-Evaluation 側に DNG 読み込み + LSC 順方向適用が実装され,新実機ターゲット (CoV=0.0695) が確定.過去 Step 8-1〜8-12 は PNG sRGB ドメインで比較していたが,TECH_07 / TECH_08 で「実機側 linear + LSC 順方向適用」と「シミュ orthographic」が同じドメイン (「LSC 完璧補正後相当」) に揃うことが判明.本イテレーションで実際に同じ linear ドメインでシミュ vs 実機を計測する.

  • 仮説(物理動機): 過去 Step 8-3 で OETF 順方向適用後の残差 2.1× だったが,これは PNG sRGB ガンマ圧縮による楽観値の可能性.真の linear 比較では残差はもっと大きい.TEST_05 で「PNG sRGB CoV=0.0423 → PNG 擬似 linear CoV=0.0901」と数値実証されており,真の残差は約 2.66× と予想.

  • 試した変更:

    • configs/eval_baseline_dng_target.yaml 新規作成 (S3 Step C')
      • eval_baseline_linear.yaml ベース.差分は 2 点だけ:
        1. normalization.target_mean: 146.7146 → 207.82 (実機 DNG+LSC の白板 ROI mean)
        2. metrics.radial_min_max: true 追加 (S3 Step D で sm-evaluate に統合した新指標)
      • OETF セクションを 意図的に書かない (実機が linear なので両者 linear で比較するため,TECH_08 §#4 ガンマ補正対応 参照)
    • 既存シミュ baseline (output/baseline/luminance.npy) を新 config で評価
  • 期待した効果: 残差 2.5〜3× 程度で TEST_05 の予想値 (2.66×) を実測確認

  • 実際の結果:

    指標実機 DNG+LSCシミュ (本イテレーション)残差
    mean207.82207.82*(mean アンカー後)—
    CoV0.06950.18262.63×
    勾配 %8.3524.652.95×
    中心/周辺 (C/P)1.09111.3271絶対差 0.236
    動径 min/max0.86000.6151絶対差 0.245
    max/min 比1.6174.2762.64×
    • normalization alpha=1.36257(シミュ mean 152.52 → 207.82 に揃え)
    • TEST_05 で予想した「真の残差 2.66×」とほぼ一致(CoV 2.63×)
  • 解釈:

    • 過去 Step 8-3 の 2.1× は楽観値だったことが確定.PNG sRGB ガンマ圧縮が CoV を約 1/2 に縮めていた(TEST_05 §4 参照).
    • 真の linear 比較では残差 2.63× がベースライン.これが「LSC 関連を実機側で全部揃えた後に残る本質的な差」.
    • これは LSC 由来ではない別要因: TECH_07 §限界と注意点 §2 で明示.
    • 残差の主因候補: シミュ物理モデル誤差(反射率精度・LED 配光モデル・メッシュ幾何精度).TECH_08 で実機側変更全 8 項目へのシミュ側対応漏れがないことを網羅確認済.
  • 学び:

    • ガンマ圧縮は CoV を約 2 倍縮める.過去 PNG 評価は楽観的だった.真の精度評価には DNG linear が必須.
    • 「形を変える唯一の道は LSC モデル化」(過去 TEST_03 finding 4)の前提変更: 実機側で LSC 順方向適用するアプローチが MiniTias-Evaluation で確立した今,シミュ側 LSC モデル化は不要.Step 8-N (LSC 順方向モデル) は 不採用 (TECH_07 §検討した代替案).
    • 過去 Step 8-1〜8-12 の試行は無駄ではなかった: 「形は変わらない」確定により,物理モデル誤差以外の方向(emitter 配光・反射率・センサ方向)が排除された.残るは物理モデル誤差(タイプ II 構造的差異も小寄与だが排除不能,TECH_08 §許容している構造的差異).
    • 「対応すべき項目」と「許容している構造的差異」の区別が明確化: タイプ I (本質構造同一・対応概念なし) と タイプ II (構造的差異あり・白板で許容) に分けて整理.
  • 次のアクション:

    • LSC 関連は完結(TECH_07 で明文化).
    • シミュ側変更対応漏れも完結(TECH_08 で明文化).
    • 残差 2.63× の解消は Step 8-14 以降の物理モデル精緻化 として残す:
      • 反射率の実物理整合度の検証(過去 Step 8-2 で R=0.85→0.92 のスイープ実施済.より精密な物理整合チェック)
      • LED 配光モデルの詳細化(過去 Step 8-10/8-11 spot 試行済.より忠実な IES 取得が選択肢)
      • メッシュ幾何精度の評価(過去 Step 8-9 で Fusion STL 抽出済.残る微差を評価)
    • TECH_04 フォールバック条件 C1 候補(SHADING_OFF 撮影)も並行検討の余地あり.

Step 8-14 候補 γ: D1 ROI 整合の再確認(事前確認・クリア)

  • 位置付け: TECH_10 残差主因候補の網羅整理 で候補リスト 4 位とされた D1「シミュ ROI と実機 ROI の物理的整合」 を,Step 8-14 候補 β(A1 内壁の非 Lambertian 性)等の物理モデル変更に進む前の 事前確認として実施.
  • 仮説: シミュ ROI (24, 37, 464, 450) と実機 ROI (539, 1015, 1400, 1409) は解像度・縮尺が大きく異なる(シミュ 512×512 vs 実機 2448×3264).物理的に同じ評価板領域を見ているかを再検証.不一致なら残差 2.63× の一部を説明する可能性.
  • 手順(設定変更なし):
    1. シミュ orthographic 設定(position (0,0,-50), ortho_scale (50, 52), film 512×512)と ROI から評価板中心基準の物理範囲を算出
    2. 評価板 STL bbox 計測(X=99, Y=102 mm)
    3. 実機 PNG (MiniTIAS_20260408_144434.png) で評価板の縦方向黒縁を検出 → 物理分解能 0.0654 mm/px を確定
    4. 実機 ROI の物理範囲を算出(画像 y→物理 Y は符号反転)
    5. 両者を物理座標系で重ね合わせ比較
  • 結果:
項目シミュ ROI実機 ROI差
X 幅90.63 mm91.54 mm-0.91 mm (1.0%)
Y 高さ91.41 mm92.13 mm-0.72 mm (0.8%)
X 中心(評価板中心基準)0 mm+0.98 mm+0.98 mm
Y 中心(符号反転後)-1.22 mm-1.47 mm-0.25 mm

→ 物理サイズ差 < 1%・中心位置差 < 1 mm で整合.視覚化パネル output/_slide_panels/roi_alignment_check.png(①実機画像 + 評価板境界・実機 ROI / ②シミュ輝度マップ + 評価板境界・シミュ ROI / ③物理座標系での重ね合わせ)でも確認.

  • 解釈・学び:
    • 残差 2.63× の主因は ROI 整合ではないことが確定.D1 を候補リストから「クリア」として除外(TECH_10 § D1 検証結果 参照).
    • 過去の設定者(Step 8 開始時の scripts/select_white_board.py GUI 選択 → シミュ側 ortho_scale 設計値)は 物理整合性を意識して ROI を揃えていたことが裏付けられた.
    • 副次発見: 評価板は実機画像中央から下方向に約 4.2 mm(65 px)オフセット配置されているが(カメラ取付位置 vs 評価板取付位置のミリ精度差),実機 ROI もそのオフセットに沿って選択されているため物理領域として整合.
    • 設定変更ゼロで結論が出たため,シミュ/実機双方の YAML・コードへの コミット可能な変更なし.本記録のみ.
  • 次のアクション: 残る候補(β A1 単独 / α A8+A9 / δ β+α 全部入り)を選択して Step 8-14 を実施.TECH_10 § Step 8-14 候補選定 参照.

Step 8-14 候補 β: A1 内壁の非 Lambertian 性 — 混合 BSDF 感度分析

  • 日付: 2026-06-02
  • 位置付け: TECH_10 で当時 🥇 1 位だった A1「内壁の非 Lambertian 性(光沢成分混合 BSDF)」 の感度分析.3D プリンタ白フィラメント物性整合性は一旦置き,weight × roughness の 2 軸 3×3 グリッドで「形」と数値がどう動くかを観察.
  • 仮説: 実物の 3D プリンタ白フィラメントは完全 Lambertian ではなく微妙な specular 成分を持つ可能性.これが残差 2.63× を説明するなら,weight を上げると CoV/勾配/C/P が改善方向(実機 0.0695 / 8.35% / 1.091 に近づく方向)に動くはず.
  • 実装: スキーマ拡張 (BlendBSDFConfig + RoughConductorBSDFConfig) + materials.py 再帰変換 + テンプレ YAML + sweep スクリプト + 比較パネル生成スクリプト.新規テスト 89 件追加 (既存 608 → 697 全通過).
  • 設定: configs/scene_baseline_blend.yaml ベース.printer_white を blendbsdf (diffuse R=0.85 + roughconductor material="none") に変更.weight ∈ {0.05, 0.15, 0.30} × α ∈ {0.1, 0.3, 0.6} の 9 ジョブ × spp=1024 × max_depth=8.
  • 結果(CoV / 勾配% / C/P / 動径 min/max.ベースライン純 diffuse: 0.1826 / 24.65 / 1.327 / 0.615, 実機: 0.0695 / 8.35 / 1.091 / 0.860):
weight \ α0.1(鋭い)0.3(中)0.6(粗い)
0.050.192 / 24.8 / 1.33 / 0.620.189 / 24.9 / 1.33 / 0.620.185 / 24.4 / 1.32 / 0.62 ← 最良
0.150.213 / 26.0 / 1.35 / 0.610.204 / 26.6 / 1.36 / 0.600.193 / 25.5 / 1.34 / 0.61
0.300.243 / 26.8 / 1.37 / 0.59 ← 最悪 CoV0.227 / 29.0 / 1.41 / 0.57 ← 最悪 形0.205 / 27.0 / 1.37 / 0.59

→ どの組み合わせも純 diffuse より悪化または不変.実機方向 (CoV=0.0695) と 逆方向に動く.

  • 「形」の観察(output/_slide_panels/blend_bsdf_sweep.png):
    • w=0.05 行: ベースラインに近い Y 軸単調勾配(純 diffuse と区別困難)
    • w=0.15 行: 下端中央に明るい集中点が現れ始める
    • w=0.30 行: 下端中央に 2 つの明るいスポットが顕在化.specular 反射が LED 直下の評価板領域に集中
    • α を上げると specular が「拡散的」になり diffuse に近づくが、実機の中央ピーク楕円パターンには近づかない
  • 解釈・学び:
    • 純 Lambertian は cos 重み散乱で 多重反射の均一化作用が最大.specular 成分は特定方向に光を集中させ均一化を阻害する
    • 3D プリンタ白フィラメントは 完全 Lambertian として扱うのが実機挙動に近い近似 だと判明(TECH_09 の LED Lambertian 整合性と並ぶ「物理モデル妥当性の裏付け」)
    • A1 は残差 2.63× の主因ではないことが確定.TECH_10 優先順位を更新(A1 を「クリア」に,A8/A9/B1 を繰り上げ).TECH_10 § A1 検証結果 参照
    • 「最有力候補」だった A1 の除外は 次の候補に焦点を絞れる正味前進.計算コスト 75.5 分 + 実装 2-3 時間で「やってみないと分からない仮説」を確実に潰せた
  • 副次成果: スキーマ層に blendbsdf + roughconductor のサポートが入った.今後の物理モデル試行(例:thindielectric 評価板の薄板透過モデル,特殊壁面の光沢追加)でも再利用可能
  • 次のアクション: A8 (反射率 R=0.85→0.89) を試す Step 8-14 候補 α,または A9 (max_depth 8→16+) を試す案,または両方の組み合わせを実施.TECH_10 § Step 8-14 候補選定 参照.

Step 8-14 候補 α 前半: A9 max_depth スイープ {8, 12, 16, 20, 28}

  • 日付: 2026-06-03
  • 位置付け: TECH_10 で 🥈 2 位だった A9「max_depth 8 → 16+」 の感度分析.「反射回数が少ないものの影響は強いが,0.85 の 8 乗 ≈ 0.27 で 0.01 まで続けるべき」というユーザー仮説を 5 値スイープで検証.
  • 仮説: 現状 max_depth=8 では多重反射の累積寄与の 理論累積 100% (R/(1-R)=5.67) に対して 72.7% しか取り込めていない.残り 27% を打ち切っており,これが形状指標(特に勾配と動径 min/max)を歪めている.
max_depth最終 bounce 寄与 R^n累積 R·(1-R^n)/(1-R)理論累積に対する割合
8(現状)0.2734.1272.7%
120.1424.8785.8%
160.0745.2592.6%
200.0395.4596.1%
280.0135.6098.7%
  • 実装: scripts/sweep_max_depth.py で configs/scene_baseline.yaml の render.max_depth のみを書き換えた 5 つの一時 YAML を生成 → sm-render → sm-evaluate (configs/eval_baseline_dng_target.yaml, linear + mean アンカー 207.82).約 85 分.
  • 結果: 全 4 形状指標が 単調に実機方向に改善:
max_depthmeanCoV勾配%C/P動径 min/max
8207.820.181724.011.3160.628
12207.820.165121.351.2720.671
16207.820.160420.591.2590.683
20207.820.158920.351.2560.687
28207.820.158320.241.2540.689
実機 TARGET—0.06958.351.0910.860
  • 残差縮小率 (d=8 → 28):
指標d=8d=28縮小率 = (d8 − d28) / (d8 − TARGET)
CoV0.18170.158320.9%
勾配24.01%20.24%24.1%
C/P1.3161.25427.6%
動径 min/max0.6280.68926.3%
  • 収束観察: 実用的な収束は d=16 で達成(d=16 → 28 で CoV 1.3% のみ動く).理論累積 (R^n) より早く収束.これは 「直接光と初期反射が支配的,後段の累積はわずかな ambient しか足さない」 という物理的直感と整合.
  • 「形」の観察(output/_slide_panels/max_depth_sweep_shape.png 2 段比較 + max_depth_sweep_relative.png mean=1 正規化):
    • 上段 共有スケール: 全 5 画像とも 下端中央が明るく上端が暗い Y 軸単調勾配で、 contrast が d=8→28 で緩む
    • 下段 独立スケール(各画像 1%-99% 自己 contrast 最大化): 全 5 画像とも 同じ形を異なる contrast で再現 → 形は完全に不変
    • mean=1 正規化: d=8 で 0.3〜1.3、d=28 で 0.4〜1.2 と 相対輝度の範囲が狭まる(ambient 化が進む)が,空間パターン (Y 単調勾配) は不変
  • 解釈・学び:
    • 「精度(数値指標)」は明確に改善.ユーザー仮説「max_depth を増やすべき」は方向性として正しく,d=8 → 28 で残差を 21〜28% 縮められた
    • 「形」は変わらない.多重反射の累積は 空間的にほぼ均一な ambient 成分であり、これを足しても暗い領域と明るい領域の 絶対差は縮むが空間配置は不変.「LED が下にしかなく評価板の中央〜上端は内壁経由でしか光が届かない」という 配置と幾何に由来する非対称性は除去できない
    • これは TEST_03 の主張「Step 8-1〜8-7 で形は全く変わっていない」と整合.max_depth スイープも同じパターンで,「均一化フィルタ系の改善は数値には効くが形には効かない」が再確認された
    • 新キャリブベースラインは d=16 で十分(d=28 と CoV 1.3% 差,レンダ時間 17 分 vs 30 分).「物理整合の極致」を求めるなら d=28
    • A9 は数値改善には有効だが形改善の主因ではないことが確定.TECH_10 優先順位を更新(A9 を「数値改善のみクリア」化,A8 を 🥇 1 位継続,形改善の本筋候補は B1 幾何精度に集約)
  • 副次成果: scripts/sweep_max_depth.py + scripts/build_max_depth_panel.py(収束カーブ + 数値表 + 輝度マップ)+ shape 比較スクリプトのテンプレ.今後 spp など他のレンダパラメータ感度分析にも流用可能
  • 次のアクション:
    • 数値改善目的: d=16 を新キャリブベースラインに採用(要検討)
    • 形改善目的: B1 筐体幾何精度の検討(3D プリンタの実物理表面の偏り・LED 軸方向のティルト仮説等)
    • A8 反射率 R=0.89 も次の試行候補(数値改善は予想,形改善は予想薄)

Step 8-14 候補 α 後半: A8 反射率 5 値スイープ R∈{0.75, 0.80, 0.85, 0.89, 0.92}

  • 日付: 2026-06-03
  • 位置付け: Step 8-14 候補 α の後半.新指標 (shape_metrics) を初めて感度分析に投入して,反射率変化が「数値」と「形」のどちらに効くかを定量検証.
  • 仮説:
    1. 既存 4 指標 (CoV/勾配/C/P/動径 min/max) は R 上昇で実機方向に改善(多重反射 ambient ゲイン)
    2. 新指標 angular_ratio (0=完全同心円, 1=完全角度依存) は不変または同心円方向(実機の中央ピーク楕円は同心円的)
    3. SSIM/NCC は不変(shape_reference 無指定なので NaN)
  • 実装: scripts/sweep_reflectance.py で configs/scene_baseline.yaml (d=16 新基準) の materials.printer_white.reflectance のみを書き換え.評価は configs/eval_baseline_dng_target_shape.yaml (新指標含む).約 85 分.
  • 結果:
RmeanCoV勾配%C/Prmin/maxangular_ratiocentroid_y_normeccentricity
0.75207.820.186124.671.3270.6200.40790.04530.444
0.80207.820.173522.671.2930.6490.42820.04280.436
0.85207.820.160420.591.2590.6840.45360.04000.426
0.89207.820.150118.961.2340.7100.47610.03770.419
0.92207.820.142417.721.2150.7310.49380.03580.414
実機 TARGET—0.06958.351.0910.860小予想0—
  • ★ 形状指標見直しの初の定量実証 ★:
指標R 0.75→0.92 の動き実機方向か
CoV0.186 → 0.142 で 改善 24%✓
勾配24.7 → 17.7 で 改善 28%✓
C/P1.327 → 1.215 で 改善✓
rmin/max0.620 → 0.731 で 改善✓
angular_ratio0.408 → 0.494 で増加 21%✗ 逆方向(実機は同心円的)
centroid_y_norm0.045 → 0.036 で減少✓ わずか
eccentricity0.444 → 0.414 で減少✓ わずか

→ 既存 4 指標が「改善」と判定する一方で、新指標 angular_ratio は「形は実機から遠ざかる」と判定.TECH_11 で予想していた「数値の偽物の一致」が 現実に起きていることの初の定量証拠.

  • 物理的解釈:
    • R 上昇 → ambient 成分増加 → 半径方向の偏り(評価板下端 vs 上端の差)が圧縮される(→ CoV/勾配/rmin/max 改善)
    • しかし角度方向のばらつき(X 方向の波打ち等)は 相対的に圧縮されにくい
    • 結果として「半径 var / 角度 var」のバランスが崩れ、angular_ratio が 増加
    • つまり R 上昇は 「Y 単調勾配の contrast を緩める代わりに角度方向のムラを相対的に強調する」.実機の「中央ピーク楕円(=同心円的)」とは 形が遠ざかる
  • 解釈・学び:
    • 「均一化フィルタ系の改善は数値には効くが形には効かない」を超えて、「数値改善が形を逆方向に動かす」ケースの実証.これは A1/A9 検証より強い発見
    • **A8 も A1/A9 と同様に「数値改善のみ・形改善ではない」**と判定.むしろ形は逆効果
    • TECH_10 優先順位を再更新: A8 を「数値改善のみクリア」化.形改善の本筋は B1 幾何精度に集約(これでほぼ確定)
    • TECH_11 の評価方針(数値 + 形 + 視覚の 3 軸)の妥当性が定量データで裏付けられた.今後の試行で新指標必須
    • 副次成果: 反射率スイープのテンプレ + 新指標統合評価パイプラインが整備された
  • 再現性確認: R=0.85 の CoV=0.1604 は max_depth スイープ d=16 (CoV=0.1604) と 完全一致 ← 別 sweep 間の数値整合性 OK
  • ユーザー仮説の評価: 「反射率を変えて結果を見たい」要請は重要な実証実験として完了.結果として: 数値だけ見れば R=0.92 が最良 (CoV 0.1424) と判定されるが、新指標も合わせて見ると R=0.75 が最も同心円的(実機方向に近い形).新指標を導入していなければ気づけない発見であり、形状指標見直しの 正当性が定量データで裏付けられた
  • 次のアクション:
    • 数値改善のみが目的なら R=0.89(Step 8-6 物理整合点)または R=0.92 採用候補(要検討)
    • 形改善目的: B1 筐体幾何精度 / A10 サブサーフェス散乱 / ζ LED ティルト など、構造的に光分布を再配分する候補に進む
    • 既存 max_depth スイープを新指標で再評価して angular_ratio の同様パターンをクロスチェック(オプション)

俯瞰サマリへの 8-14 α 後半追記

Step設定空間meanCoV勾配%C/PCoV 残差倍率
8-14 候補 α 後半 (A8) R=0.89R=0.89, d=16, spp1024linear207.82*0.150118.961.2342.16×(数値改善あり、angular_ratio 増 = 形逆効果)
8-14 候補 α 後半 (A8) R=0.92R=0.92, d=16, spp1024linear207.82*0.142417.721.2152.05×(数値最良、angular_ratio 0.494 で実機方向と逆)
8-14 候補 ξ (A2/A3) spot cutoff=90°spot c90 b30 R0.85 d16 spp1024linear207.82*0.164923.711.3112.37×(数値悪化、angular_ratio 0.352 で実機方向に大改善)
8-14 候補 ξ (A2/A3) spot cutoff=30°spot c30 b10 R0.85 d16 spp1024linear207.82*0.177625.511.3432.56×(数値悪化、angular_ratio 0.338 で最低 = 形最良)

Step 8-14 候補 ξ: A2/A3 LED 配光 cutoff_angle 5 値スイープ {30°, 60°, 90°, 120°, 150°}

  • 日付: 2026-06-03
  • 位置付け: TECH_10 で 4 位だった A2/A3「LED 配光モデル」 の感度分析.データシート整合は気にせず純粋に「光の広がりが形に効くか」を測る実験.ユーザー要請:「一番効きそうなものが配光条件を変えること」「データシートに合わせる必要なく,照明の影響を調べるための実験」.
  • 仮説:
    1. 鋭いビーム (cutoff=30°) → LED 直下に集中 → angular_ratio 増(角度依存性増)
    2. 広いビーム (cutoff=150°) → Lambertian 近似 → angular_ratio 減(同心円方向)
    3. 形状指標は実機方向に動く可能性あり(A1/A8/A9 では形が動かなかった残候補)
  • 実装: scripts/sweep_led_distribution.py で configs/scene_baseline_spot.yaml (Step 8-10 で作成) をテンプレに spot emitter の cutoff_angle を {30, 60, 90, 120, 150}° に書き換え.beam_width = cutoff_angle / 3 で連動(ビーム形状を相似に保つ).max_depth を 16 に更新.flux 補正なし(mean アンカーで吸収).約 85 分.
  • 結果:
cutoff (beam)meanCoV勾配%C/Prmin/maxangular_ratiocentroid_yeccentricity
area light (baseline d=16)207.820.160420.591.2590.6840.45360.04000.4264
30° (10° beam, 鋭)207.820.177625.511.3430.6210.33800.04860.4087
60° (20° beam)207.820.166424.131.3180.6390.34380.04310.4098
90° (30° beam, 最良 CoV)207.820.164923.711.3110.6470.35240.04240.4106
120° (40° beam)207.820.168223.691.3100.6470.35460.04230.4116
150° (50° beam, 広)207.820.173823.741.3110.6470.35560.04240.4119
実機 TARGET—0.06958.351.0910.860小予想0—
  • ★ 重要な 2 つの発見 ★:

発見 1: 「area light → spot」のステップが本質的

emitter のタイプ自体が「形」を決めている:

設定angular_ratio
area light (Lambertian, baseline)0.4536
spot (どの cutoff でも)0.34 〜 0.36

→ area→spot に変えた瞬間に angular_ratio が 0.45 → 0.34 へ大きく低下(-25%).実機方向 (同心円的) に動いた最大の発見.

発見 2: cutoff スイープ内では効果限定的

spot ファミリーで cutoff を 30°→150° と変えても:

指標動き
angular_ratio0.338 → 0.356(+0.018 のみ)
eccentricity0.409 → 0.412(ほぼ不変)
CoVU 字(90° が最良 0.165)

つまり 「鋭さ」を変えても形はほぼ同じ.効くのは emitter の基本構造(area vs spot).

  • A8 と真逆のパターン: 数値悪化(CoV +3% 〜 +11%)するが、angular_ratio は実機方向に改善(-25%).これは Step 8-14 α 後半 (A8) の「数値改善・形逆効果」と 真逆のパターン.「形改善のための候補」として A2/A3/ξ が初実証された.
  • 物理的解釈:
    • area light: 半球全方向に cos θ で散乱 → 内壁に広く拡散光 → 多重反射 ambient が支配 → Y 軸方向勾配が出る
    • spot: +Z 軸方向にしか光を出さない(cutoff 内に限定)→ 内壁に当たる成分が減り直接光が増える → LED 直下に明点 → X 方向の波打ち → 半径方向のばらつきが支配的(angular_ratio 減)
    • spot にすると 「内壁多重反射 ambient < 直接光」 に傾き、評価板の照度分布が LED 配置のパターンを直接反映するようになる
  • 解釈・学び:
    • 「形」を変える本物の候補が初実証された.これまでクリアした A1/A8/A9 はすべて「均一化フィルタ系」で形を変えなかったが、emitter type は 構造的に光分布を再配分する
    • TECH_10 優先順位を再更新: A2/A3/ξ を「形改善候補」へ昇格.B1 と並列の本筋候補
    • 数値とのトレードオフ: 形改善(angular_ratio 改善)と引き換えに数値(CoV/勾配)が悪化.TECH_11 評価方針(数値 + 形 の 2 軸)が再び正当性を示す
    • cutoff の細分化スイープ余地は限定的.次の方向性は emitter の本質的バリエーション(cos^n, IES, 軸ティルト等)または 形 + 数値の両立を狙う組み合わせ(spot + 反射率調整等)
    • 副次成果: 配光スイープテンプレ整備.今後の emitter 系試行に流用可能
  • 副次発見: spot の中で cutoff=90° が CoV 最良(0.165)だが、cutoff=30° が angular_ratio 最良(0.338).数値最良点と形最良点が違うことを実証.これはキャリブで「何を優先するか」の議論を明確化する事例.
  • 次のアクション:
    • 形改善目的: 配光モデルをより本格的に検討(cos^n の n スイープ・LED 軸ティルト ζ)or 配光 + 反射率の組み合わせ
    • B1 筐体幾何精度 も依然有力候補(未試行)
    • 配光 + B1 + max_depth の組み合わせで「形 + 数値」両立を狙う総合試行も視野

Step 8-N 候補: LSC 順方向モデル(不採用 — Step 8-13 で方針確定)

2026-06-02 注記: 本セクションは当時「実機側を変更しない前提」で「シミュ側に LSC モデル化を追加して残差を埋める」案として立案されていた.Step 8-13 で 実機側に LSC 順方向適用 するアプローチが MiniTias-Evaluation で確立した結果,本案は不採用となった.以下は歴史的記録として残す.詳細な却下理由は TECH_07 §検討した代替案 参照.

  • 位置付け: 8-3 OETF 適用後の残差 1.6〜1.9×(CoV 0.089 vs 実測 0.043,勾配 12.57 vs 6.10)の 主因候補.
  • 仮説(物理動機): 実測 PNG は実機 ISP の レンズシェーディング補正(周辺光量低下の電子補正)が掛かっており,周辺を持ち上げて中央を相対的に押し下げる.これは残差の符号(シミュ側の方が勾配・C/P が大きい)と整合.シミュ側で同じ補正を順方向に適用すれば消える可能性が高い.
  • 設計方針: overfitting 回避のため,自由多項式ではなく 物理動機づけ低自由度形 に限定する.
    • cos⁴ 則(典型的なレンズ周辺減光則)をベースに,平滑な動径多項式 2〜3 パラメータ
    • 適用順: ROI 抽出後・OETF 順方向適用の 後段 にフックを追加するのが筋(実機 ISP の処理順と整合)
    • パラメータ推定は実測 1 枚での fit ではなく,物理パラメータ(センサ位置・レンズ F 値・撮像距離)から導出できる範囲で
  • 未確定事項:
    • 実機カメラ(SH-02M)の正確なレンズ仕様(F 値,焦点距離)
    • ISP のレンズシェーディング補正テーブルの直接取得は不可(メーカー独自)
    • スマホ独自トーンマップ(残差の一部,さらに不確実)も同時に推定するか分離するか
  • 想定される結果:
    • 残差が 1.6〜1.9× → 1.0〜1.2× まで縮まる可能性
    • 残らない場合: スマホ独自トーンマップ・反射率の実フィラメント精緻化・LED 配光詳細化 などへ
  • 要する作業量: コード(evaluation/lsc.py 新規・eval スキーマ拡張・テスト)+ パラメータ推定(実機写真からの動径フィット)で 1〜2 日相当.

改善ストーリーの要約 (Takeaways)

イテレーション全体を俯瞰したときに残る判断指針:

  • MC ノイズ vs 物理勾配の切り分けは spp スイープが安価で有効(8-1).これを早期に行うとその後の方向性が決まる.
  • 弱いレバーで攻めて手詰まりになったら,「評価方法そのもの」を疑う(8-2 → 8-3).非線形変換下では無次元指標は不変ではない.
  • 標準仕様(OETF, Rec.709 等)の見落としは最大の交絡源になりうる(8-3).データに合わせて回す係数ゼロで残差の 2/3 を消した事例.
  • 「校正都合」と「物理忠実性」を独立パラメータで分離する(8-4 max_depth 独立化,8-5 path ベイク独立化).校正に最適な depth と可視化に最適な depth は違って良い.
  • 同じ物理量を異なる手法で計算しない(8-5).手法非対称は混乱の源.
  • 物理レバーは 1 個ずつ独立化する.絶対値が動かなくても 不確かさの所在を局所化 する価値がある(8-6 LED 物性,8-7 発光面サイズ).
  • 予想外の結果は仮説より雄弁.完全機序解明より「確認できた事実を正直に記録」を優先(8-7).
  • 形状指標と絶対値は別物として扱う.多くのレバーは形状指標には不変(線形ゲイン)だが,絶対値は局所幾何との縮退で動きうる.
  • 失敗・予想外の記録は学びの宝庫.方向性ドリフトを防ぐ核は「失敗を消さずに残す」こと.

輝度マップ形状の追跡 (→ TEST_03)

数値指標と独立に 輝度マップの「形」 を実機に近づける観点は TEST_03_輝度マップ形状追跡 に独立化した.要点のみ:

  • これまで実施した 7 つの改善ステップ (8-1〜8-7) は すべて「形を変えない変更」 だった(線形ゲイン・単調変換・局所幾何依存のいずれか).シミュは初期から Y 軸単調勾配のままで,実機の 中央付近ピークには近づいていない.
  • 実機の形 = シミュの Y 軸勾配 + カメラ系の動径補正.LSC モデル化(Step 8-N 候補)は数値残差縮小だけでなく形の構造的改善を担う.
  • 以後の改善判断は 「数値 + 形」の 2 軸 で行う.

比較パネル・観察事実・物理的解釈の詳細は TEST_03 参照.

参照 (References)