本ドキュメントは MiniTIAS 実機(baseline 1 枚 MiniTIAS_20260408_144434)に対するシミュレーション結果の キャリブレーション と 検証イテレーション を時系列で記録する.
目的:
関連ドキュメント:
reference_measurement/MiniTIAS_20260408_144434/baseline 1 枚(MiniTIAS_20260408_144434,ROI 1400×1409,sRGB 符号化済み Y' luma):
| 指標 | 値 |
|---|---|
| mean | 146.71 |
| CoV | 0.0427 |
| 勾配 % | 6.10 |
| 中心/周辺比 (C/P) | 1.0650 |
| std | 6.26 |
| max/min 比 | 1.392 |
評価は sm-evaluate で実施.シミュ側の比較は OETF 順方向適用後(Step 8-3 以降)に sRGB ドメインで行うのが正式.linear ドメイン比較は Step 8-3 以前または同一条件シミュ間の検証用.
時系列での主要指標推移.残差倍率 = (シミュ - 実測) / (初期残差 - 実測) として「初期からどれだけ縮まったか」を見る.
| Step | 設定 | 空間 | mean | CoV | 勾配% | C/P | CoV 残差倍率 |
|---|---|---|---|---|---|---|---|
| 実測 TARGET (旧 PNG sRGB) | — | sRGB | 146.71 | 0.0427 | 6.10 | 1.065 | 1.0× |
| 8-1 spp=128 | R0.85, d8, linear | linear | 151.79 | 0.236 | 24.83 | 1.330 | 5.5× |
| 8-1 spp=1024 (基準確定) | R0.85, d8, linear | linear | 152.02 | 0.183 | 24.72 | 1.328 | 4.3× |
| 8-2 R=0.92 sweep | R0.92, d12, linear | linear | — | 0.170 | 19.42 | 1.241 | 4.0× |
| 8-3 OETF 適用 | R0.85, d8, spp1024 | sRGB | 146.71* | 0.089 | 12.57 | 1.144 | 2.1× |
| 8-3 OETF + R=0.92 + d=12 | R0.92, d12 | sRGB | 146.71* | 0.081 | 9.72 | 1.108 | 1.9× |
| 8-7 size 1.5×1.5 (Φe 保存) | linear, R0.85, d8 | linear | 429.99 | 0.186 | 26.21 | 1.355 | (形状指標 ≈ 8-1) |
| 実測 TARGET (新 DNG+LSC linear) | — | linear | 207.82 | 0.0695 | 8.35 | 1.091 | 1.0× |
| 8-13 新方針シミュ突合 | R0.85, d8, spp1024 | linear | 207.82* | 0.1826 | 24.65 | 1.327 | 2.63× |
| 8-14 候補 γ (D1) ROI 整合確認 | 変更なし | — | — | — | — | — | クリア(ROI 物理整合差 < 1%) |
* 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 候補)は実機側で順方向適用するアプローチが確立したため 不採用.
日付: 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=128 | spp=1024 | 動いた量 |
|---|---|---|---|
| CoV | 0.236 | 0.183 | -22% |
| std | 35.83 | 27.85 | -22% |
| max/min 比 | 11.59 | 4.27 | -63%(極端な外れ値が消えた) |
| mean | 151.79 | 152.02 | ≈ 不変 |
| 中心/周辺比 | 1.330 | 1.328 | ≈ 不変 |
| 勾配 % | 24.83 | 24.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 へ.
日付: 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 を見つける.
実際の結果:
| R | CoV | 勾配 % | C/P |
|---|---|---|---|
| 0.75 | 0.2173 | 25.91 | 1.350 |
| 0.80 | 0.2034 | 24.00 | 1.316 |
| 0.85(基準) | 0.1893 | 22.08 | 1.283 |
| 0.90 | 0.1753 | 20.15 | 1.252 |
| 0.92(マット白プラ実用上限) | 0.1697 | 19.42 | 1.241 |
解釈: 全指標が R に対し単調・線形に改善するが感度が低い(∂勾配/∂R ≈ −38 %/単位,linear).実測 (CoV=0.0427) 到達には外挿で R ≈ 1.2〜1.4 が必要 = 物理範囲外.
学び: 反射率は弱い二次レバー.これ単独では差を閉じられない.構造的に違う何か(評価方法・座標系・ドメイン)を疑うべき.
次のアクション: もっと大きな自由度を持つレバーを探す.評価方法自体を疑う → Step 8-3 へ.
日付: 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 への二重適用禁止).期待した効果: ガンマ非線形性で「同じ物理だが見かけが違う」分が解消,残差が大きく縮む.データに合わせて回す係数はゼロ.
実際の結果:
| ソース | 空間 | CoV | 勾配 % | C/P |
|---|---|---|---|---|
| R0.85, d8, spp1024 | linear | 0.183 | 24.65 | 1.327 |
| 〃 | sRGB | 0.089 | 12.57 | 1.144 |
| R0.85, d12, spp256 | sRGB | 0.091 | 11.16 | 1.126 |
| R0.92, d12, spp256 | sRGB | 0.081 | 9.72 | 1.108 |
| 実測 TARGET | sRGB | 0.0427 | 6.10 | 1.0650 |
解釈: 見かけ差の約 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 は別ドメインだった.
学び:
次のアクション:
26904da).max_depth=8 で打ち切ると 0.85^8 ≈ 27% のエネルギーが「未追跡」のまま残る.均一化に効く 後段多重反射 を取りこぼしている可能性.render.max_depth を 8 と 12 で比較レンダ.configs/scene_baseline.yaml の render.max_depth は 現状 8 のまま(既知差分 #8).--bake-max-depth 16 で render 設定から独立化(コミット a0fe07d).「2D 校正都合」と「3D 可視化忠実性」を分離.7181efa, c32ccd6, a0fe07d)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 でマーカー個別非表示.sm-render/sm-evaluate(path tracer)で(校正済みの定量結果,不変)./implement).日付: 2026-05-27(コミット f5048a4)
背景・問題意識: SPEC_03 既知差分 #3「LED 1 個あたりの実 W 値が未検証」を残していた.現状 radiance=2807.247 は実測 mean アンカーで決まった校正値で,規格値からの導出ではない.LED 物性が確定すれば,独立に検証できる.
仮説(物理動機): 規格値から radiance を独立推定し,現校正値と並べる.大きく合えば 物理妥当性の担保,合わなければ何かのレバーの不確かさを炙り出せる(縮退の所在が分かる).
試した変更: LED Paradise 商品ページから物性取得.SPEC_03 LED セクションを拡張.
期待した効果: 校正値 2807 と規格推定が大きく合うか,どこに不確かさが残るかを明確化.
実際の結果: 規格値から radiance を独立計算
| ステップ | 値 |
|---|---|
| Φv(typ 中央値) | 17.5 lm |
| LER(4000K Ra98 典型値) | ≈ 280 lm/W |
| Φe = Φv / LER | 0.0625 W |
| A = 2.8 × 3.5 mm | 9.8 × 10⁻⁶ m² |
| 規格推定 L = Φe / (A·π) | ≈ 2030 W/(m²·sr) |
| 現状校正値 | 2807 W/(m²·sr) |
| 比 | 1.38× |
(1-0.85)/(1-0.89) = 1.36×(観測 1.38× とほぼ一致).R=0.89 はマット白プラ実用上限 0.92 の範囲内.解釈:
学び:
次のアクション: 次は LED 周辺幾何の検証(発光面サイズの妥当性)→ Step 8-7 へ.
日付: 2026-05-27
背景・問題意識: 「現実装はパッケージ外形 2.8 × 3.5 mm を発光面として使う」仮定が物理的に正しいか疑問.実 SMD 2835 の真の発光部は チップ + 蛍光体 ~1.5 × 1.5 mm(パッケージ面積の ~23%)のみで,周りは白プラスチック筐体(光らない).
仮説(物理動機,複数):
試した変更: configs/scene_baseline_emitter_real.yaml を Python ワンライナーで自動生成.
期待した効果: mean ≈ 不変,CoV/勾配/C/P/max-min/radial profile ≈ 不変(点光源近似が成立する遠方界).
実際の結果(linear,同条件):
| 指標 | 元 (2.8×3.5) | 検証 (1.5×1.5) | 比 | 評価 |
|---|---|---|---|---|
| mean | 152.52 | 429.99 | 2.82× | ⚠️ 予想外に大きく変化 |
| std | 27.85 | 80.12 | 2.88× | mean スケールに比例 |
| CoV | 0.1826 | 0.1863 | 1.02× | ✅ 形状指標 ≈ 不変 |
| 勾配 % | 24.65 | 26.21 | 1.06× | ✅ 形状指標 ≈ 不変 |
| C/P | 1.327 | 1.355 | 1.02× | ✅ 形状指標 ≈ 不変 |
| max/min | 4.28 | 4.36 | 1.02× | ✅ 形状指標 ≈ 不変 |
| 放射プロファイル中心/端 | 1.63 | 1.68 | 1.03× | ✅ 形状指標 ≈ 不変 |
画像保存先: output/baseline_linear_npy/ と output/emitter_real/(各 figures/luminance_map.png, radial_profile.png, histogram.png, zone_map.png).放射プロファイルの曲線形は目視で瓜二つ,色スケールのみ違う.
追跡調査: 予想外の 2.83× mean 上昇の機序を STL 幾何分析で追跡.
meshes/LED基板カバー.stl)は z=-66.6〜-64.1 の 2 階建て構造(天井梁 + 底板).解釈:
学び:
次のアクション:
configs/scene_baseline_emitter_real.yaml, configs/eval_baseline_linear.yaml, output/emitter_real/, output/baseline_linear_npy/ は 検証アーティファクトとして保持(後から再現できるように).日付: 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 として禁止(露出アンカー二重適用回避).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) | 差 |
|---|---|---|---|
| mean | 152.5204 | 146.7146 | target_mean に厳密一致 |
| CoV | 0.1826 | 0.182577 | ≈ 不変(誤差レベル) |
| max/min | 4.2759 | 4.2759 | 厳密一致 |
| C/P | 1.3271 | 1.3271 | 厳密一致 |
| 勾配 % | 24.65 | 24.65 | 不変 |
| std | 27.85 | 26.7868 | α=0.962 倍にスケール(想定通り) |
α = target_mean / src_mean = 146.7146 / 152.52 = 0.961934.
解釈: 線形ゲイン正規化の物理的不変性が実証された.形状指標は誤差レベルで一致し,mean は厳密に target_mean に揃う.後段の TEST_03 比較パネル再生成に向けた評価本体の対称化が完了.
学び:
model_validator)で実装することで,二重適用のリスクを使用時点ではなく設定時点で防げる.次のアクション:
scripts/build_luminance_evolution_panel.py) が利用する Step 8-1 / 8-7 の入力を linear + normalization 評価結果に揃え,color scale を共有して「形」の比較を強化する(別フェーズ・別コミット).日付: 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)期待した効果:
実際の結果(output/baseline_v3_leds/,linear + normalization 評価):
| 指標 | 旧 LED(推定値) | 新 LED(Fusion STL) | 差 |
|---|---|---|---|
| mean (pre-normalize) | 152.52 | 167.95 | +10.1% |
| α (mean 揃え係数) | 0.961934 | 0.873423 | -10% |
| mean (post-normalize) | 146.7146 | 146.7146 | 同(アンカー一致) |
| CoV | 0.18258 | 0.18151 | -0.6% |
| 勾配 % | 24.65 | 24.13 | -0.5pt |
| C/P | 1.327 | 1.318 | -0.7% |
| max/min | 4.2759 | 4.2713 | ≈ 0 |
| std | 26.79 | 26.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)(不変) |
解釈:
REFERENCE/led_board_closeup.jpg) で LED 配置が「3+ギャップ+3」と一致.これは中央の電流制限抵抗 2 個分のスペース(10.8mm)に対応.学び:
次のアクション:
日付: 2026-05-28
背景・問題意識: Step 8-1〜8-9 で「形を変えない変更」を網羅し,emitter 指向性が形に効くかどうかを次に検証.データシート LP-2835D90VW の配光角 120° (FWHM) は数学的に厳密 Lambertian(現状の area emitter)と整合するが,Mitsuba の spot emitter で smoothstep 補間を使うと「中央集中度」が違うため,多重反射経由の評価板への分布が変わる可能性.
仮説(物理動機):
試した変更:
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° に出る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.95 | 11.49 | -93%(spot は約 14.6× 暗い) |
| α (mean 揃え係数) | 0.873 | 12.77 | × 14.6 |
| mean (post-normalize) | 146.71 | 146.71 | 同(アンカー) |
| CoV | 0.181 | 0.189 | +4.4%(数値悪化) |
| 勾配 % | 24.13 | 27.69 | +14.7%(数値悪化) |
| C/P | 1.318 | 1.383 | +4.9%(数値悪化) |
| max/min | 4.27 | 4.15 | -2.8%(誤差レベル) |
目視観察(重要): 数値指標は悪化したが,輝度マップを目視で比較すると下端の明るい領域がやや中央寄りに集中し,左右端は他のシミュより暗い.X 方向の対称性が部分的に改善された.TEST_03 比較パネルで「他のシミュ 4 種と spot の 5 番目」を並べると spot のみ「下中央集中型」と判別できる.
解釈:
副次的な発見(未解明): flux 保存で I_0 を計算したのに mean が 14.6× も暗くなった.仮説:(1) Mitsuba spot の falloff 関数が cos ドメインの smoothstep(私の計算は角度ドメイン smoothstep)で I_0 計算が不正確,(2) 点光源 vs 面光源で多重反射の光路長が違う,(3) spot の集中性で「LED 真下の壁」に光が偏り多重反射数が増えて減衰.本筋ではないため深掘りしない.
学び:
採用判断: scene_baseline.yaml の area light はそのまま残し,configs/scene_baseline_spot.yaml を並列保持.本格採用するかは LSC モデル化との組み合わせ評価後に判断.SpotLight クラス・lights.py 分岐は将来の IES 実装等の基盤として残す.
次のアクション:
日付: 2026-05-28
背景・問題意識: Step 8-10 で spot emitter (cutoff=90, beam=30 = FWHM 120° の標準解釈) の試行で X 方向の対称性が部分改善した.これを データシート LP-2835D90VW + 物理的整合性 の両面で詰めるとどうなるか検証.
仮説(物理動機):
試した変更 (configs/scene_baseline_datasheet.yaml 新規):
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.95 | 11.49 | 10.26 |
| α (mean 揃え係数) | 0.873 | 12.77 | 14.30 |
| CoV | 0.181 | 0.189 | 0.183 |
| 勾配 % | 24.13 | 27.69 | 26.79 |
| C/P | 1.318 | 1.383 | 1.366 |
| max/min | 4.27 | 4.15 | 4.11 |
目視観察: 形は依然 Y 軸単調勾配.Step 8-10 と 8-11 の差は微小で,X 方向の集中度がわずかに緩和された程度(反射率 0.89 の多重反射均一化と cos^1.2 集中度の打ち消し合い).実機の中央ピーク楕円には近づかず.
解釈:
副次的な発見:
学び:
採用判断: scene_baseline.yaml は area + R=0.85 のまま(Step 8-9 状態).configs/scene_baseline_datasheet.yaml は 「データシート従順版」として並列保持.LSC モデル化との組み合わせ評価後に本格採用可否を判断.
次のアクション:
日付: 2026-05-28
背景・問題意識: 「光線追跡の方向 (path/ptracer) で形が変わるか」 という直感に対して,数学的事実 (Helmholtz 相反原理=光線追跡の方向は無限サンプル極限で同じ結果) を Mitsuba 上で実証するか,例外があるかを実機検証.LSC モデル化に進む前に「方向変更で形を実機に近づける」可能性が無いことを確証するため.
仮説(物理動機):
試した変更:
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)Endpoint::sample_direction(): not implemented! でエラー.orthographic sensor が ptracer の光子受け取りインタフェースを実装していない仕様.そのため検証は perspective sensor で実施.期待した効果: 両方の結果(同じシーン)が同じ形になることを実証.それで「方向変更では形を変えられない」が確定.
実際の結果 (spp=4096, scalar_rgb, perspective):
| 指標 | path (backward) | ptracer (forward) | 比 |
|---|---|---|---|
| mean | 160.24 | 319.04 | 1.99×(Mitsuba 実装の正規化差) |
| std | 29.15 | 74.94 | 2.57× |
| max | 212 | 4919 | 23×(ptracer の光子集中スパイク残) |
| Y プロファイル top | 67.36 | 110.14 | 1.64× |
| Y プロファイル mid (Y=256) | 190.99 | 380.44 | 1.99× |
| Y プロファイル bot | 137.05 | 220.98 | 1.61× |
| bot/top 比(形の指標) | 2.035 | 2.006 | 0.986 ←ほぼ完全一致 |
解釈:
学び:
次のアクション:
日付: 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')
output/baseline/luminance.npy) を新 config で評価期待した効果: 残差 2.5〜3× 程度で TEST_05 の予想値 (2.66×) を実測確認
実際の結果:
| 指標 | 実機 DNG+LSC | シミュ (本イテレーション) | 残差 |
|---|---|---|---|
| mean | 207.82 | 207.82*(mean アンカー後) | — |
| CoV | 0.0695 | 0.1826 | 2.63× |
| 勾配 % | 8.35 | 24.65 | 2.95× |
| 中心/周辺 (C/P) | 1.0911 | 1.3271 | 絶対差 0.236 |
| 動径 min/max | 0.8600 | 0.6151 | 絶対差 0.245 |
| max/min 比 | 1.617 | 4.276 | 2.64× |
解釈:
学び:
次のアクション:
MiniTIAS_20260408_144434.png) で評価板の縦方向黒縁を検出 → 物理分解能 0.0654 mm/px を確定| 項目 | シミュ ROI | 実機 ROI | 差 |
|---|---|---|---|
| X 幅 | 90.63 mm | 91.54 mm | -0.91 mm (1.0%) |
| Y 高さ | 91.41 mm | 92.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 / ③物理座標系での重ね合わせ)でも確認.
scripts/select_white_board.py GUI 選択 → シミュ側 ortho_scale 設計値)は 物理整合性を意識して ROI を揃えていたことが裏付けられた.2026-06-02 注記: 本セクションは当時「実機側を変更しない前提」で「シミュ側に LSC モデル化を追加して残差を埋める」案として立案されていた.Step 8-13 で 実機側に LSC 順方向適用 するアプローチが MiniTias-Evaluation で確立した結果,本案は不採用となった.以下は歴史的記録として残す.詳細な却下理由は TECH_07 §検討した代替案 参照.
evaluation/lsc.py 新規・eval スキーマ拡張・テスト)+ パラメータ推定(実機写真からの動径フィット)で 1〜2 日相当.イテレーション全体を俯瞰したときに残る判断指針:
数値指標と独立に 輝度マップの「形」 を実機に近づける観点は TEST_03_輝度マップ形状追跡 に独立化した.要点のみ:
比較パネル・観察事実・物理的解釈の詳細は TEST_03 参照.
output/ ディレクトリの索引)src/sm_tias_lightsim/evaluation/oetf.py(Step 8-3)src/sm_tias_lightsim/visualize/baker.py(Step 8-5)src/sm_tias_lightsim/visualize/viewer.py(Step 8-5)configs/scene_baseline_emitter_real.yaml(Step 8-7)configs/eval_baseline_linear.yaml(Step 8-7)output/emitter_real/(Step 8-7 検証レンダ)output/baseline_linear_npy/(Step 8-7 比較基準)26904da(OETF 正規実装),7181efa / c32ccd6 / a0fe07d(3D ビュー改善),f5048a4(LED 物性反映)